From 98afff5c6cb43ca7b7f7100a277bf1afb782b6de Mon Sep 17 00:00:00 2001 From: sumeyye Date: Tue, 7 Jul 2026 08:29:57 +0300 Subject: [PATCH] update: schematics template for the resource api --- .../__name@kebab__.service.ts.template | 44 +++++++++++++++++-- .../schematics/src/commands/api/index.ts | 5 ++- .../schematics/src/commands/api/schema.json | 5 +++ 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/npm/ng-packs/packages/schematics/src/commands/api/files-service/proxy/__namespace@dir__/__name@kebab__.service.ts.template b/npm/ng-packs/packages/schematics/src/commands/api/files-service/proxy/__namespace@dir__/__name@kebab__.service.ts.template index 22443a5a88..97661ef3bc 100644 --- a/npm/ng-packs/packages/schematics/src/commands/api/files-service/proxy/__namespace@dir__/__name@kebab__.service.ts.template +++ b/npm/ng-packs/packages/schematics/src/commands/api/files-service/proxy/__namespace@dir__/__name@kebab__.service.ts.template @@ -9,10 +9,15 @@ export class <%= name %>Service { apiName = '<%= apiName %>';<% for (let {body, signature} of methods) { %> <% - const isBlob = body.isBlobMethod() ; - const responseType = isBlob ? "Blob":body.responseType; + const isBlob = body.isBlobMethod(); + const responseType = isBlob ? 'Blob' : body.responseType; const httpResponseType = body.httpResponseType; const acceptHeader = body.acceptHeader; + const resourceParameters = signature.parameters.filter(p => p.name !== 'config'); + const resourceType = resourceParameters.length + ? `{ ${resourceParameters.map(p => `${p.name}${p.optional}: ${p.type}`).join('; ')} }` + : ''; + const resourceArgs = resourceParameters.map(p => `params.${p.name}`).join(', '); %> <%= camel(signature.name) %> = (<%= serializeParameters(signature.parameters) %>) => @@ -32,5 +37,36 @@ export class <%= name %>Service { if (body.body) { %> body: <%= body.body %>,<% } %> }, - { apiName: this.apiName,...config });<% } %> -} \ No newline at end of file + { apiName: this.apiName,...config });<% + + if (resourceApi && body.method === 'GET') { %> + + <%= camel(signature.name) %>Resource = (<% + if (resourceParameters.length) { %> + params: Signal<<%= resourceType %>>,<% } %> + config?: Partial + ): ResourceRef<<%= responseType %> | undefined> => this.restService.requestResource( + computed(() => {<% + if (resourceParameters.length) { %> + const { <%= resourceParameters.map(p => p.name).join(', ') %> } = params();<% } %> + return ({ + method: '<%= body.method %>',<% + if (httpResponseType && httpResponseType !== 'json') { %> + responseType: '<%= httpResponseType %>',<% } %><% + if (acceptHeader) { %> + headers: { Accept: '<%= acceptHeader %>' },<% } %> + url: <%= body.url %>,<% + if (body.dictParamVar && !body.params.length) { %> + params: <%= body.dictParamVar %>,<% } %><% + if (body.dictParamVar && body.params.length) { %> + params: { ...<%= body.dictParamVar %>, <%= body.params.join(', ') %> },<% } %><% + if (!body.dictParamVar && body.params.length) { %> + params: { <%= body.params.join(', ') %> },<% } + if (body.body) { %> + body: <%= body.body %>,<% } %> + }); + }), + { apiName: this.apiName, ...config }, + );<% } + } %> +} diff --git a/npm/ng-packs/packages/schematics/src/commands/api/index.ts b/npm/ng-packs/packages/schematics/src/commands/api/index.ts index 15dfb8ab2d..ee759cb9cf 100644 --- a/npm/ng-packs/packages/schematics/src/commands/api/index.ts +++ b/npm/ng-packs/packages/schematics/src/commands/api/index.ts @@ -56,6 +56,7 @@ export default function (schema: GenerateProxySchema) { const types = data.types; const modules = data.modules; const serviceType = schema.serviceType || defaultEServiceType; + const resourceApi = schema.resourceApi ?? false; if (!types || !modules) { throw new SchematicsException(Exception.InvalidApiDefinition); @@ -82,6 +83,7 @@ export default function (schema: GenerateProxySchema) { apiName, controllers, serviceImports, + resourceApi, }); const modelImports: Record = {}; @@ -177,7 +179,7 @@ function createModelGenerator(params: ModelGeneratorParams) { } function createServiceGenerator(params: ServiceGeneratorParams) { - const { targetPath, controllers, serviceImports } = params; + const { targetPath, controllers, serviceImports, resourceApi } = params; const mapControllerToService = createControllerToServiceMapper(params); return chain( @@ -195,6 +197,7 @@ function createServiceGenerator(params: ServiceGeneratorParams) { applyTemplates({ ...cases, serializeParameters, + resourceApi, ...service, }), move(normalize(targetPath)), diff --git a/npm/ng-packs/packages/schematics/src/commands/api/schema.json b/npm/ng-packs/packages/schematics/src/commands/api/schema.json index b5fde3ad79..ec2a49d0b3 100644 --- a/npm/ng-packs/packages/schematics/src/commands/api/schema.json +++ b/npm/ng-packs/packages/schematics/src/commands/api/schema.json @@ -79,6 +79,11 @@ } ] } + }, + "resourceApi": { + "description": "Generate Resource API helpers for read endpoints", + "type": "boolean", + "default": false } },