From 1885d865d48b2f227ec599058fb8504cf6dd746c Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Tue, 6 Dec 2022 18:02:32 +0300 Subject: [PATCH] Filter controller by service-type --- npm/ng-packs/package.json | 2 +- .../schematics/src/commands/api/index.ts | 18 ++++++++++-- .../src/commands/proxy-add/schema.json | 28 +++++++++++++++++++ .../packages/schematics/src/enums/index.ts | 1 + .../schematics/src/enums/service-types.ts | 7 +++++ .../schematics/src/models/api-definition.ts | 2 ++ .../src/models/generate-proxy-schema.ts | 3 ++ 7 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 npm/ng-packs/packages/schematics/src/enums/service-types.ts diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index caf8f6b67d..b540cb4d10 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -36,7 +36,7 @@ "lerna": "lerna", "migrate-nx": "yarn nx migrate --run-migrations", "mock:schematics": "cd scripts/mock-schematic && yarn && yarn start", - "debug:schematics": "./node_modules/.bin/ng g ./packages/schematics/src/collection.json:proxy-add --module __default --apiName __default --source __default --target __default --url http://localhost:4300" + "debug:schematics": "./node_modules/.bin/ng g ./packages/schematics/src/collection.json:proxy-add --module __default --apiName __default --source __default --target __default --url https://localhost:44305 --serviceType application" }, "private": true, "devDependencies": { 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 a344381b77..fda8117c07 100644 --- a/npm/ng-packs/packages/schematics/src/commands/api/index.ts +++ b/npm/ng-packs/packages/schematics/src/commands/api/index.ts @@ -8,8 +8,8 @@ import { Tree, url, } from '@angular-devkit/schematics'; -import { Exception } from '../../enums'; -import { GenerateProxySchema, ServiceGeneratorParams } from '../../models'; +import { defaultEServiceType, eServiceType, Exception } from '../../enums'; +import { Controller, GenerateProxySchema, ServiceGeneratorParams } from '../../models'; import { applyWithOverwrite, buildTargetPath, @@ -47,6 +47,7 @@ export default function (schema: GenerateProxySchema) { const data = readProxyConfig(tree); const types = data.types; const modules = data.modules; + const serviceType = schema.serviceType || defaultEServiceType; if (!types || !modules) throw new SchematicsException(Exception.InvalidApiDefinition); const definition = data.modules[moduleName]; @@ -54,7 +55,7 @@ export default function (schema: GenerateProxySchema) { throw new SchematicsException(interpolate(Exception.InvalidModule, moduleName)); const apiName = definition.remoteServiceName; - const controllers = Object.values(definition.controllers || {}); + const controllers = filterControllersByServiceType(serviceType, definition.controllers); const serviceImports: Record = {}; const generateServices = createServiceGenerator({ targetPath, @@ -170,3 +171,14 @@ function createServiceGenerator(params: ServiceGeneratorParams) { }), ); } + +function filterControllersByServiceType( + serviceType: eServiceType, + controllers: Record, +): Controller[] { + const itShouldBeIntegratedService = serviceType === eServiceType.Integration; + const skipFilter = serviceType === eServiceType.All; + return Object.values(controllers || {}).filter( + x => x.isIntegrationService === itShouldBeIntegratedService || skipFilter, + ); +} diff --git a/npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json b/npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json index 2cf27f9c33..0458c7c7ab 100644 --- a/npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json +++ b/npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json @@ -48,6 +48,34 @@ "index": 4 }, "x-prompt": "Please enter URL for API definition (default: API Name's url in environment file)" + }, + "serviceType": { + "description": "Service type to the generated code", + "type": "string", + "$default": "application", + "enum": [ + "application", + "integration", + "all" + ], + "x-prompt": { + "message": "Specifies the service type to generate. `application`, `integration` and `all`, Default value: `application`", + "type": "list", + "items": [ + { + "value": "all", + "label": "All" + }, + { + "value": "application", + "label": "Application" + }, + { + "value": "integration", + "label": "Integration" + } + ] + } } }, "entryPoint": { diff --git a/npm/ng-packs/packages/schematics/src/enums/index.ts b/npm/ng-packs/packages/schematics/src/enums/index.ts index aee862a5f5..9b2d376cc3 100644 --- a/npm/ng-packs/packages/schematics/src/enums/index.ts +++ b/npm/ng-packs/packages/schematics/src/enums/index.ts @@ -2,3 +2,4 @@ export * from './binding-source-id'; export * from './exception'; export * from './import-keyword'; export * from './method-modifier'; +export * from './service-types'; diff --git a/npm/ng-packs/packages/schematics/src/enums/service-types.ts b/npm/ng-packs/packages/schematics/src/enums/service-types.ts new file mode 100644 index 0000000000..1616aaca31 --- /dev/null +++ b/npm/ng-packs/packages/schematics/src/enums/service-types.ts @@ -0,0 +1,7 @@ +export enum eServiceType { + All = 'all', + Application = 'application', + Integration = 'integration', +} + +export const defaultEServiceType = eServiceType.Application; diff --git a/npm/ng-packs/packages/schematics/src/models/api-definition.ts b/npm/ng-packs/packages/schematics/src/models/api-definition.ts index 15f6ef1d0b..01af33ac3e 100644 --- a/npm/ng-packs/packages/schematics/src/models/api-definition.ts +++ b/npm/ng-packs/packages/schematics/src/models/api-definition.ts @@ -31,6 +31,8 @@ export interface Module { export interface Controller { controllerName: string; type: string; + isRemoteService: boolean; + isIntegrationService: boolean; interfaces: InterfaceDef[]; actions: Record; } diff --git a/npm/ng-packs/packages/schematics/src/models/generate-proxy-schema.ts b/npm/ng-packs/packages/schematics/src/models/generate-proxy-schema.ts index 682cdda9fe..6d4c67bcd8 100644 --- a/npm/ng-packs/packages/schematics/src/models/generate-proxy-schema.ts +++ b/npm/ng-packs/packages/schematics/src/models/generate-proxy-schema.ts @@ -1,3 +1,5 @@ +import { eServiceType } from '../enums'; + export interface GenerateProxySchema { /** * Backend module name @@ -28,4 +30,5 @@ export interface GenerateProxySchema { * Secondary entrypoint for proxy generation */ entryPoint?: string; + serviceType?: eServiceType; }