From 57a453c5b246c6fad87b2458189a9165c3643b97 Mon Sep 17 00:00:00 2001 From: Ryan Quinn Date: Wed, 19 Feb 2025 12:41:09 -0600 Subject: [PATCH 1/4] feat: Rename client side batch check functions for legacy use --- .../go/template/client/client.mustache | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/config/clients/go/template/client/client.mustache b/config/clients/go/template/client/client.mustache index 38d6cf3f..f2a8618c 100644 --- a/config/clients/go/template/client/client.mustache +++ b/config/clients/go/template/client/client.mustache @@ -337,17 +337,17 @@ type SdkClient interface { CheckExecute(request SdkClientCheckRequestInterface) (*ClientCheckResponse, error) /* - * BatchCheck Run a set of [checks](#check). Batch Check will return `allowed: false` if it encounters an error, and will return the error in the body. + * ClientBatchCheck Run a set of [checks](#check). Batch Check will return `allowed: false` if it encounters an error, and will return the error in the body. * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @return SdkClientBatchCheckRequestInterface */ - BatchCheck(ctx _context.Context) SdkClientBatchCheckRequestInterface + ClientBatchCheck(ctx _context.Context) SdkClientBatchCheckClientRequestInterface /* - * BatchCheckExecute executes the BatchCheck request + * ClientBatchCheckExecute executes the BatchCheck request * @return *ClientBatchCheckResponse */ - BatchCheckExecute(request SdkClientBatchCheckRequestInterface) (*ClientBatchCheckResponse, error) + ClientBatchCheckExecute(request SdkClientBatchCheckClientRequestInterface) (*ClientBatchCheckClientResponse, error) /* * Expand Expands the relationships in userset tree format. @@ -1927,93 +1927,93 @@ func (client *{{appShortName}}Client) CheckExecute(request SdkClientCheckRequest return &ClientCheckResponse{CheckResponse: data, HttpResponse: httpResponse}, err } -/// BatchCheck +/// ClientBatchCheck -type SdkClientBatchCheckRequest struct { +type SdkClientBatchCheckClientRequest struct { ctx _context.Context Client *{{appShortName}}Client - body *ClientBatchCheckBody - options *ClientBatchCheckOptions + body *ClientBatchCheckClientBody + options *ClientBatchCheckClientOptions } -type SdkClientBatchCheckRequestInterface interface { - Options(options ClientBatchCheckOptions) SdkClientBatchCheckRequestInterface - Body(body ClientBatchCheckBody) SdkClientBatchCheckRequestInterface - Execute() (*ClientBatchCheckResponse, error) +type SdkClientBatchCheckClientRequestInterface interface { + Options(options ClientBatchCheckClientOptions) SdkClientBatchCheckClientRequestInterface + Body(body ClientBatchCheckClientBody) SdkClientBatchCheckClientRequestInterface + Execute() (*ClientBatchCheckClientResponse, error) GetAuthorizationModelIdOverride() *string GetStoreIdOverride() *string GetContext() _context.Context - GetBody() *ClientBatchCheckBody - GetOptions() *ClientBatchCheckOptions + GetBody() *ClientBatchCheckClientBody + GetOptions() *ClientBatchCheckClientOptions } -type ClientBatchCheckBody = []ClientCheckRequest +type ClientBatchCheckClientBody = []ClientCheckRequest -type ClientBatchCheckOptions struct { +type ClientBatchCheckClientOptions struct { AuthorizationModelId *string `json:"authorization_model_id,omitempty"` StoreId *string `json:"store_id,omitempty"` MaxParallelRequests *int32 `json:"max_parallel_requests,omitempty"` Consistency *fgaSdk.ConsistencyPreference `json:"consistency,omitempty"` } -type ClientBatchCheckSingleResponse struct { +type ClientBatchCheckClientSingleResponse struct { ClientCheckResponse Request ClientCheckRequest Error error } -type ClientBatchCheckResponse = []ClientBatchCheckSingleResponse +type ClientBatchCheckClientResponse = []ClientBatchCheckClientSingleResponse -func (client *{{appShortName}}Client) BatchCheck(ctx _context.Context) SdkClientBatchCheckRequestInterface { - return &SdkClientBatchCheckRequest{ +func (client *{{appShortName}}Client) ClientBatchCheck(ctx _context.Context) SdkClientBatchCheckClientRequestInterface { + return &SdkClientBatchCheckClientRequest{ Client: client, ctx: ctx, } } -func (request *SdkClientBatchCheckRequest) Options(options ClientBatchCheckOptions) SdkClientBatchCheckRequestInterface { +func (request *SdkClientBatchCheckClientRequest) Options(options ClientBatchCheckClientOptions) SdkClientBatchCheckClientRequestInterface { request.options = &options return request } -func (request *SdkClientBatchCheckRequest) GetAuthorizationModelIdOverride() *string { +func (request *SdkClientBatchCheckClientRequest) GetAuthorizationModelIdOverride() *string { if request.options == nil { return nil } return request.options.AuthorizationModelId } -func (request *SdkClientBatchCheckRequest) GetStoreIdOverride() *string { +func (request *SdkClientBatchCheckClientRequest) GetStoreIdOverride() *string { if request.options == nil { return nil } return request.options.StoreId } -func (request *SdkClientBatchCheckRequest) Body(body ClientBatchCheckBody) SdkClientBatchCheckRequestInterface { +func (request *SdkClientBatchCheckClientRequest) Body(body ClientBatchCheckClientBody) SdkClientBatchCheckClientRequestInterface { request.body = &body return request } -func (request *SdkClientBatchCheckRequest) Execute() (*ClientBatchCheckResponse, error) { - return request.Client.BatchCheckExecute(request) +func (request *SdkClientBatchCheckClientRequest) Execute() (*ClientBatchCheckClientResponse, error) { + return request.Client.ClientBatchCheckExecute(request) } -func (request *SdkClientBatchCheckRequest) GetContext() _context.Context { +func (request *SdkClientBatchCheckClientRequest) GetContext() _context.Context { return request.ctx } -func (request *SdkClientBatchCheckRequest) GetBody() *ClientBatchCheckBody { +func (request *SdkClientBatchCheckClientRequest) GetBody() *ClientBatchCheckClientBody { return request.body } -func (request *SdkClientBatchCheckRequest) GetOptions() *ClientBatchCheckOptions { +func (request *SdkClientBatchCheckClientRequest) GetOptions() *ClientBatchCheckClientOptions { return request.options } -func (client *{{appShortName}}Client) BatchCheckExecute(request SdkClientBatchCheckRequestInterface) (*ClientBatchCheckResponse, error) { +func (client *{{appShortName}}Client) ClientBatchCheckExecute(request SdkClientBatchCheckClientRequestInterface) (*ClientBatchCheckClientResponse, error) { group, ctx := errgroup.WithContext(request.GetContext()) var maxParallelReqs int if request.GetOptions() == nil || request.GetOptions().MaxParallelRequests == nil { @@ -2023,7 +2023,7 @@ func (client *{{appShortName}}Client) BatchCheckExecute(request SdkClientBatchCh } group.SetLimit(maxParallelReqs) var numOfChecks = len(*request.GetBody()) - response := make(ClientBatchCheckResponse, numOfChecks) + response := make(ClientBatchCheckClientResponse, numOfChecks) authorizationModelId, err := client.getAuthorizationModelId(request.GetAuthorizationModelIdOverride()) if err != nil { return nil, err @@ -2057,7 +2057,7 @@ func (client *{{appShortName}}Client) BatchCheckExecute(request SdkClientBatchCh return err } - response[index] = ClientBatchCheckSingleResponse{ + response[index] = ClientBatchCheckClientSingleResponse{ Request: checkBody, ClientCheckResponse: *singleResponse, Error: err, @@ -2400,7 +2400,7 @@ func (client *{{appShortName}}Client) ListRelationsExecute(request SdkClientList return nil, fmt.Errorf("ListRelations - expected len(Relations) > 0") } - batchRequestBody := ClientBatchCheckBody{} + batchRequestBody := ClientBatchCheckClientBody{} for index := 0; index < len(request.GetBody().Relations); index++ { batchRequestBody = append(batchRequestBody, ClientCheckRequest{ User: request.GetBody().User, @@ -2419,7 +2419,7 @@ func (client *{{appShortName}}Client) ListRelationsExecute(request SdkClientList return nil, err } - options := &ClientBatchCheckOptions{ + options := &ClientBatchCheckClientOptions{ AuthorizationModelId: authorizationModelId, StoreId: storeId, } @@ -2428,7 +2428,7 @@ func (client *{{appShortName}}Client) ListRelationsExecute(request SdkClientList options.MaxParallelRequests = request.GetOptions().MaxParallelRequests } - batchResponse, err := client.BatchCheckExecute(&SdkClientBatchCheckRequest{ + batchResponse, err := client.BatchCheckClientExecute(&SdkClientBatchCheckClientRequest{ ctx: request.GetContext(), Client: client, body: &batchRequestBody, From 6ef9ec7e3e4190e52e51691cdc195295e58b67eb Mon Sep 17 00:00:00 2001 From: Ryan Quinn Date: Wed, 19 Feb 2025 12:43:16 -0600 Subject: [PATCH 2/4] feat: Update API SHA for server side batch check --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 014ebb9d..0c9be402 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ # Main config OPENFGA_DOCKER_TAG = v1.8.1 -OPEN_API_REF ?= 0bb89b73d6550b627f79c53b4b97dec1ee3fe0ad +OPEN_API_REF ?= c14fb4b3d4b44836436cf1bab13e21b322e38ae9 OPEN_API_URL = https://raw.githubusercontent.com/openfga/api/${OPEN_API_REF}/docs/openapiv2/apidocs.swagger.json OPENAPI_GENERATOR_CLI_DOCKER_TAG = v6.4.0 NODE_DOCKER_TAG = 20-alpine From 207f66350df1023b6b5e440b8e6ca995d4073674 Mon Sep 17 00:00:00 2001 From: Ryan Quinn Date: Wed, 19 Feb 2025 12:46:12 -0600 Subject: [PATCH 3/4] fix: Resolve incorrect batch check renaming --- config/clients/go/template/client/client.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/clients/go/template/client/client.mustache b/config/clients/go/template/client/client.mustache index f2a8618c..040b7fd3 100644 --- a/config/clients/go/template/client/client.mustache +++ b/config/clients/go/template/client/client.mustache @@ -2428,7 +2428,7 @@ func (client *{{appShortName}}Client) ListRelationsExecute(request SdkClientList options.MaxParallelRequests = request.GetOptions().MaxParallelRequests } - batchResponse, err := client.BatchCheckClientExecute(&SdkClientBatchCheckClientRequest{ + batchResponse, err := client.ClientBatchCheckExecute(&SdkClientBatchCheckClientRequest{ ctx: request.GetContext(), Client: client, body: &batchRequestBody, From 3cb71a6254406ebf51028b0047ddd23df823d362 Mon Sep 17 00:00:00 2001 From: Ryan Quinn Date: Wed, 19 Feb 2025 12:51:26 -0600 Subject: [PATCH 4/4] feat: renaming client side batch check functions in tests --- .../go/template/client/client_test.mustache | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/config/clients/go/template/client/client_test.mustache b/config/clients/go/template/client/client_test.mustache index a408c5b1..1497bc31 100644 --- a/config/clients/go/template/client/client_test.mustache +++ b/config/clients/go/template/client/client_test.mustache @@ -2034,7 +2034,7 @@ func Test{{appShortName}}Client(t *testing.T) { } }) - t.Run("BatchCheck", func(t *testing.T) { + t.Run("ClientBatchCheck", func(t *testing.T) { test := TestDefinition{ Name: "Check", JsonResponse: `{"allowed":true, "resolution":""}`, @@ -2042,7 +2042,7 @@ func Test{{appShortName}}Client(t *testing.T) { Method: http.MethodPost, RequestPath: "check", } - requestBody := ClientBatchCheckBody{ { + requestBody := ClientBatchCheckClientBody{ { User: "user:81684243-9356-4421-8fbf-a4f8d36aa31b", Relation: "viewer", Object: "document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a", @@ -2072,7 +2072,7 @@ func Test{{appShortName}}Client(t *testing.T) { const authModelId = "01GAHCE4YVKPQEKZQHT2R89MQV" - options := ClientBatchCheckOptions{ + options := ClientBatchCheckClientOptions{ AuthorizationModelId: {{packageName}}.PtrString(authModelId), MaxParallelRequests: {{packageName}}.PtrInt32(5), } @@ -2094,7 +2094,7 @@ func Test{{appShortName}}Client(t *testing.T) { }, ) - got, err := fgaClient.BatchCheck(context.Background()).Body(requestBody).Options(options).Execute() + got, err := fgaClient.ClientBatchCheck(context.Background()).Body(requestBody).Options(options).Execute() if err != nil { t.Fatalf("%v", err) } @@ -2125,28 +2125,28 @@ func Test{{appShortName}}Client(t *testing.T) { t.Fatalf("{{appShortName}}Client.%v() = %v, want %v", test.Name, string(responseJson), test.JsonResponse) } } - // BatchCheck without options should work - _, err = fgaClient.BatchCheck(context.Background()).Body(requestBody).Execute() + // ClientBatchCheck without options should work + _, err = fgaClient.ClientBatchCheck(context.Background()).Body(requestBody).Execute() if err != nil { t.Fatalf("%v", err) } httpmock.ZeroCallCounters() - // BatchCheck with invalid auth model ID should fail - badOptions := ClientBatchCheckOptions{ + // ClientBatchCheck with invalid auth model ID should fail + badOptions := ClientBatchCheckClientOptions{ AuthorizationModelId: {{packageName}}.PtrString("INVALID"), MaxParallelRequests: {{packageName}}.PtrInt32(5), } - _, err = fgaClient.BatchCheck(context.Background()).Body(requestBody).Options(badOptions).Execute() + _, err = fgaClient.ClientBatchCheck(context.Background()).Body(requestBody).Options(badOptions).Execute() if err == nil { t.Fatalf("Expect error with invalid auth model id but there is none") } // invalid store ID should fail - badStoreOptions := ClientBatchCheckOptions{ + badStoreOptions := ClientBatchCheckClientOptions{ StoreId: {{packageName}}.PtrString("INVALID"), MaxParallelRequests: {{packageName}}.PtrInt32(5), } - _, err = fgaClient.BatchCheck(context.Background()).Body(requestBody).Options(badStoreOptions).Execute() + _, err = fgaClient.ClientBatchCheck(context.Background()).Body(requestBody).Options(badStoreOptions).Execute() if err == nil { t.Fatalf("Expect error with invalid auth model id but there is none") } @@ -2161,14 +2161,14 @@ func Test{{appShortName}}Client(t *testing.T) { return httpmock.NewStringResponse(http.StatusUnauthorized, ""), nil }, ) - // BatchCheck with invalid auth should fail - _, err = fgaClient.BatchCheck(context.Background()).Body(requestBody).Options(options).Execute() + // ClientBatchCheck with invalid auth should fail + _, err = fgaClient.ClientBatchCheck(context.Background()).Body(requestBody).Options(options).Execute() if err == nil { t.Fatalf("Expect error with invalid auth but there is none") } // store should be overridden - storeOverrideOptions := ClientBatchCheckOptions{ + storeOverrideOptions := ClientBatchCheckClientOptions{ StoreId: {{packageName}}.PtrString("7777HCE4YVKPQEKZQHT2R89MQV"), MaxParallelRequests: {{packageName}}.PtrInt32(5), } @@ -2182,13 +2182,13 @@ func Test{{appShortName}}Client(t *testing.T) { }, ) - _, err = fgaClient.BatchCheck(context.Background()).Body(requestBody).Options(storeOverrideOptions).Execute() + _, err = fgaClient.ClientBatchCheck(context.Background()).Body(requestBody).Options(storeOverrideOptions).Execute() if err != nil { t.Fatalf("%v", err) } }) - t.Run("BatchCheckWithConsistency", func(t *testing.T) { + t.Run("ClientBatchCheckWithConsistency", func(t *testing.T) { test := TestDefinition{ Name: "Check", JsonResponse: `{"allowed":true, "resolution":""}`, @@ -2196,7 +2196,7 @@ func Test{{appShortName}}Client(t *testing.T) { Method: http.MethodPost, RequestPath: "check", } - requestBody := ClientBatchCheckBody{ { + requestBody := ClientBatchCheckClientBody{ { User: "user:81684243-9356-4421-8fbf-a4f8d36aa31b", Relation: "viewer", Object: "document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a", @@ -2226,7 +2226,7 @@ func Test{{appShortName}}Client(t *testing.T) { const authModelId = "01GAHCE4YVKPQEKZQHT2R89MQV" - options := ClientBatchCheckOptions{ + options := ClientBatchCheckClientOptions{ AuthorizationModelId: {{packageName}}.PtrString(authModelId), MaxParallelRequests: {{packageName}}.PtrInt32(5), Consistency: {{packageName}}.CONSISTENCYPREFERENCE_HIGHER_CONSISTENCY.Ptr(), @@ -2250,7 +2250,7 @@ func Test{{appShortName}}Client(t *testing.T) { }, ) - checks, err := fgaClient.BatchCheck(context.Background()).Body(requestBody).Options(options).Execute() + checks, err := fgaClient.ClientBatchCheck(context.Background()).Body(requestBody).Options(options).Execute() if err != nil { t.Fatalf("%v", err) }