From 9b73295a7c2a4da2acd32bff41d2613da891d600 Mon Sep 17 00:00:00 2001 From: Gani Georgiev Date: Sat, 22 Nov 2025 10:58:32 +0200 Subject: [PATCH] added dumy request info to directly return an error on invalid API rule --- core/collection_validate.go | 2 +- core/collection_validate_test.go | 6 +++--- core/record_field_resolver_runner.go | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/core/collection_validate.go b/core/collection_validate.go index a3506aba..ca4c654a 100644 --- a/core/collection_validate.go +++ b/core/collection_validate.go @@ -489,7 +489,7 @@ func (validator *collectionValidator) checkRule(value any) error { return nil // nothing to check } - r := NewRecordFieldResolver(validator.app, validator.new, nil, true) + r := NewRecordFieldResolver(validator.app, validator.new, &RequestInfo{}, true) _, err := search.FilterData(vStr).BuildExpr(r) if err != nil { return validation.NewError("validation_invalid_rule", "Invalid rule. Raw error: "+err.Error()) diff --git a/core/collection_validate_test.go b/core/collection_validate_test.go index 0f98de43..9f0ef342 100644 --- a/core/collection_validate_test.go +++ b/core/collection_validate_test.go @@ -319,8 +319,8 @@ func TestCollectionValidate(t *testing.T) { c.ListRule = types.Pointer("!invalid") c.ViewRule = types.Pointer("missing = 123") c.CreateRule = types.Pointer("id = 123 && missing = 456") - c.UpdateRule = types.Pointer("(id = 123") - c.DeleteRule = types.Pointer("missing = 123") + c.UpdateRule = types.Pointer("@request.body.missing:changed = false") + c.DeleteRule = types.Pointer("(id=123") return c, nil }, expectedErrors: []string{"listRule", "viewRule", "createRule", "updateRule", "deleteRule"}, @@ -333,7 +333,7 @@ func TestCollectionValidate(t *testing.T) { c.ListRule = types.Pointer("") c.ViewRule = types.Pointer("f1 = 123") c.CreateRule = types.Pointer("id = 123 && f1 = 456") - c.UpdateRule = types.Pointer("(id = 123)") + c.UpdateRule = types.Pointer("(id = 123 && @request.body.f1:changed = false)") c.DeleteRule = types.Pointer("f1 = 123") return c, nil }, diff --git a/core/record_field_resolver_runner.go b/core/record_field_resolver_runner.go index 87aacfbf..c43a0a42 100644 --- a/core/record_field_resolver_runner.go +++ b/core/record_field_resolver_runner.go @@ -80,6 +80,7 @@ func (r *runner) run() (*search.ResolverResult, error) { } if r.activeProps[0] == "@request" { + // @todo consider returning an error instead? if r.resolver.requestInfo == nil { return &search.ResolverResult{Identifier: "NULL"}, nil }