aws-service-stack 0.18.394 → 0.18.395

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,6 +23,7 @@ class EntityConfig extends core_1.EntityConfigImpl {
23
23
  const policies = [
24
24
  { method: core_1.HttpMethod.GET, path: `${exports.path}`, access: [core_1.Access.ADMIN] },
25
25
  { method: core_1.HttpMethod.GET, path: `${exports.path}/search`, access: [core_1.Access.ADMIN] },
26
+ { method: core_1.HttpMethod.GET, path: `${exports.path}/search/query`, access: [core_1.Access.PUBLIC] },
26
27
  { method: core_1.HttpMethod.GET, path: `${exports.path}/{id}`, access: [core_1.Access.ADMIN] },
27
28
  // { method: m.GET, path: `${path}/search-entities`, access: [a.PUBLIC] },
28
29
  { method: core_1.HttpMethod.GET, path: `${exports.path}/batch`, access: [core_1.Access.PUBLIC] },
@@ -1 +1 @@
1
- {"version":3,"file":"entity-config.js","sourceRoot":"","sources":["../../../../src/_examples/controller/entity/entity-config.ts"],"names":[],"mappings":"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","sourcesContent":["import { Access as a, DynamoIndexMap, EndpointPolicy, EntityConfigImpl, HttpMethod as m } from \"@chinggis/core\";\n\n// OPENSEARCH\nexport const openSearch = {\n domain: \"https://search-amplify-opense-1qu4zfdauaeh1-ncvbubjnpcsfempstbsykhoadi.ap-southeast-1.es.amazonaws.com\",\n index: \"entity\",\n};\nexport const path = \"/supplier/entities\"; // url path base\n\n// Entity configuration\nexport class EntityConfig extends EntityConfigImpl {\n constructor() {\n // DYNAMODB\n const tableName = \"Entity-2i5o74z4mjf6lpabqp7myrkdre-dev\";\n const indexMap = new DynamoIndexMap()\n .set(\"byISBN\", { field: \"isbn\", rFields: [\"isbn\"] })\n .set(\"byOriginalOwner\", { field: \"originalOwner\", rFields: [\"originalOwner\"] })\n .set(\"byStatusByUpdatedAt\", { field: \"status\", rFields: [\"status\"] });\n\n // PERMISSIONS\n const ownerFieldName = \"owner\";\n const adminGroupNames = [\"adminUsers\"];\n const policies: EndpointPolicy[] = [\n { method: m.GET, path: `${path}`, access: [a.ADMIN] },\n { method: m.GET, path: `${path}/search`, access: [a.ADMIN] },\n { method: m.GET, path: `${path}/{id}`, access: [a.ADMIN] },\n // { method: m.GET, path: `${path}/search-entities`, access: [a.PUBLIC] },\n { method: m.GET, path: `${path}/batch`, access: [a.PUBLIC] },\n { method: m.GET, path: `${path}/details/{id}`, access: [a.PUBLIC] },\n { method: m.POST, path: `${path}`, access: [a.ADMIN] },\n { method: m.POST, path: `${path}/add`, access: [a.USER] },\n { method: m.PUT, path: `${path}/{id}`, access: [a.ADMIN] },\n { method: m.PATCH, path: `${path}/{id}`, access: [a.ADMIN] },\n { method: m.DELETE, path: `${path}/{id}`, access: [a.ADMIN] },\n { method: m.GET, path: `/entities/{id}`, access: [a.PUBLIC] }, // TODO remove later\n { method: m.GET, path: `/entities/batch`, access: [a.PUBLIC] }, // TODO remove later\n ];\n\n // INIT\n super(path, adminGroupNames);\n this.setDynamoDB(tableName, ownerFieldName, indexMap)\n .setOpenSearch(openSearch.domain, openSearch.index)\n .setPolicies(policies);\n }\n}\n\n// Export default Entity configuration\nexport const CONFIG_ENTITY = new EntityConfig();\n"]}
1
+ {"version":3,"file":"entity-config.js","sourceRoot":"","sources":["../../../../src/_examples/controller/entity/entity-config.ts"],"names":[],"mappings":"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","sourcesContent":["import { Access as a, DynamoIndexMap, EndpointPolicy, EntityConfigImpl, HttpMethod as m } from \"@chinggis/core\";\n\n// OPENSEARCH\nexport const openSearch = {\n domain: \"https://search-amplify-opense-1qu4zfdauaeh1-ncvbubjnpcsfempstbsykhoadi.ap-southeast-1.es.amazonaws.com\",\n index: \"entity\",\n};\nexport const path = \"/supplier/entities\"; // url path base\n\n// Entity configuration\nexport class EntityConfig extends EntityConfigImpl {\n constructor() {\n // DYNAMODB\n const tableName = \"Entity-2i5o74z4mjf6lpabqp7myrkdre-dev\";\n const indexMap = new DynamoIndexMap()\n .set(\"byISBN\", { field: \"isbn\", rFields: [\"isbn\"] })\n .set(\"byOriginalOwner\", { field: \"originalOwner\", rFields: [\"originalOwner\"] })\n .set(\"byStatusByUpdatedAt\", { field: \"status\", rFields: [\"status\"] });\n\n // PERMISSIONS\n const ownerFieldName = \"owner\";\n const adminGroupNames = [\"adminUsers\"];\n const policies: EndpointPolicy[] = [\n { method: m.GET, path: `${path}`, access: [a.ADMIN] },\n { method: m.GET, path: `${path}/search`, access: [a.ADMIN] },\n { method: m.GET, path: `${path}/search/query`, access: [a.PUBLIC] },\n { method: m.GET, path: `${path}/{id}`, access: [a.ADMIN] },\n // { method: m.GET, path: `${path}/search-entities`, access: [a.PUBLIC] },\n { method: m.GET, path: `${path}/batch`, access: [a.PUBLIC] },\n { method: m.GET, path: `${path}/details/{id}`, access: [a.PUBLIC] },\n { method: m.POST, path: `${path}`, access: [a.ADMIN] },\n { method: m.POST, path: `${path}/add`, access: [a.USER] },\n { method: m.PUT, path: `${path}/{id}`, access: [a.ADMIN] },\n { method: m.PATCH, path: `${path}/{id}`, access: [a.ADMIN] },\n { method: m.DELETE, path: `${path}/{id}`, access: [a.ADMIN] },\n { method: m.GET, path: `/entities/{id}`, access: [a.PUBLIC] }, // TODO remove later\n { method: m.GET, path: `/entities/batch`, access: [a.PUBLIC] }, // TODO remove later\n ];\n\n // INIT\n super(path, adminGroupNames);\n this.setDynamoDB(tableName, ownerFieldName, indexMap)\n .setOpenSearch(openSearch.domain, openSearch.index)\n .setPolicies(policies);\n }\n}\n\n// Export default Entity configuration\nexport const CONFIG_ENTITY = new EntityConfig();\n"]}
@@ -1,11 +1,12 @@
1
- import { APIGatewayProxyEvent, APIGatewayProxyWebsocketEventV2, DynamoDBStreamEvent, ScheduledEvent, SQSEvent } from "aws-lambda";
2
- import { BaseController } from "../../../index.js";
1
+ import { APIGatewayProxyWebsocketEventV2, DynamoDBStreamEvent, ScheduledEvent, SQSEvent } from "aws-lambda";
2
+ import { ControllerApi, HttpRequest } from "../../../index.js";
3
+ import { Entity } from "../../model-shared/supplier-portal.model";
3
4
  import { EntityService } from "../../service/entity/entity-service.interface";
4
5
  import "../../service/entity/entity-service";
5
- export declare class EntityController extends BaseController<EntityService> {
6
+ export declare class EntityController extends ControllerApi<Entity, EntityService> {
6
7
  constructor();
7
8
  protected processSQSEvent(sqsEvent: SQSEvent): Promise<any>;
8
- protected processCrudRequest(apiGatewayProxyEvent: APIGatewayProxyEvent): Promise<any>;
9
+ protected processCrudRequest(req: HttpRequest): Promise<any>;
9
10
  protected processStreamEvent(dynamoDBStreamEvent: DynamoDBStreamEvent): Promise<void>;
10
11
  protected processScheduledEvent(scheduledEvent: ScheduledEvent): Promise<void>;
11
12
  protected processWebSocketEvent(event: APIGatewayProxyWebsocketEventV2): Promise<void>;
@@ -46,10 +46,8 @@ exports.EntityController = void 0;
46
46
  const typedi_1 = __importStar(require("typedi"));
47
47
  const entity_config_1 = require("./entity-config");
48
48
  const core_1 = require("../../../index.js");
49
- const supplier_portal_model_1 = require("../../model-shared/supplier-portal.model");
50
- const errors_1 = require("../../../exception/errors");
51
49
  require("../../service/entity/entity-service");
52
- let EntityController = class EntityController extends core_1.BaseController {
50
+ let EntityController = class EntityController extends core_1.ControllerApi {
53
51
  constructor() {
54
52
  const entityService = typedi_1.default.get("EntityService");
55
53
  super(entityService, entity_config_1.CONFIG_ENTITY.toObject());
@@ -57,37 +55,7 @@ let EntityController = class EntityController extends core_1.BaseController {
57
55
  processSQSEvent(sqsEvent) {
58
56
  throw new Error("Method not implemented.");
59
57
  }
60
- async processCrudRequest(apiGatewayProxyEvent) {
61
- if (this.resourcePath === `GET ${entity_config_1.path}/search-entities`) {
62
- const filter = this.request.filter;
63
- filter.status = supplier_portal_model_1.Status.active;
64
- return await this.service.find(filter);
65
- }
66
- if (this.resourcePath === `GET ${entity_config_1.path}/batch`) {
67
- const ids = this.request.filter.ids.split(",") ?? [];
68
- return await this.service.findByIds(ids);
69
- }
70
- if (this.resourcePath === `GET ${entity_config_1.path}/details/{id}`) {
71
- const { id } = this.request.pathParameters;
72
- const result = await this.service.findById(id);
73
- if (result.status !== supplier_portal_model_1.Status.active)
74
- throw new errors_1.ErrorHttp({ code: 404, error: "NotFound" }, "Entity not found");
75
- return result;
76
- }
77
- // TODO remove later
78
- if (this.resourcePath === `GET /entities/batch`) {
79
- const ids = this.request.filter.ids.split(",") ?? [];
80
- return await this.service.searchEntityBatch(ids);
81
- }
82
- // TODO remove later
83
- if (this.resourcePath === `GET /entities/{id}`) {
84
- const { id } = this.request.pathParameters;
85
- const result = await this.service.findById(id);
86
- if (result.status !== supplier_portal_model_1.Status.active)
87
- throw new errors_1.ErrorHttp({ code: 404, error: "NotFound" }, "Entity not found");
88
- return result;
89
- }
90
- }
58
+ async processCrudRequest(req) { }
91
59
  processStreamEvent(dynamoDBStreamEvent) {
92
60
  return;
93
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"entity-controller.js","sourceRoot":"","sources":["../../../../src/_examples/controller/entity/entity-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, { Service } from \"typedi\";\nimport {\n APIGatewayProxyEvent,\n APIGatewayProxyWebsocketEventV2,\n DynamoDBStreamEvent,\n ScheduledEvent,\n SQSEvent,\n} from \"aws-lambda\";\nimport { CONFIG_ENTITY, path } from \"./entity-config\";\nimport { BaseController } from \"@chinggis/core\";\nimport { Status } from \"../../model-shared/supplier-portal.model\";\nimport { ErrorHttp } from \"../../../exception/errors\";\n\nimport { EntityService } from \"../../service/entity/entity-service.interface\";\nimport \"../../service/entity/entity-service\";\n\n@Service(\"EntityController\")\nexport class EntityController extends BaseController<EntityService> {\n constructor() {\n const entityService: EntityService = Container.get(\"EntityService\");\n super(entityService, CONFIG_ENTITY.toObject());\n }\n\n protected processSQSEvent(sqsEvent: SQSEvent): Promise<any> {\n throw new Error(\"Method not implemented.\");\n }\n\n protected async processCrudRequest(apiGatewayProxyEvent: APIGatewayProxyEvent): Promise<any> {\n if (this.resourcePath === `GET ${path}/search-entities`) {\n const filter = this.request.filter;\n filter.status = Status.active;\n return await this.service.find(filter);\n }\n\n if (this.resourcePath === `GET ${path}/batch`) {\n const ids = this.request.filter.ids.split(\",\") ?? [];\n return await this.service.findByIds(ids);\n }\n\n if (this.resourcePath === `GET ${path}/details/{id}`) {\n const { id } = this.request.pathParameters;\n const result = await this.service.findById(id);\n if (result.status !== Status.active) throw new ErrorHttp({ code: 404, error: \"NotFound\" }, \"Entity not found\");\n return result;\n }\n\n // TODO remove later\n if (this.resourcePath === `GET /entities/batch`) {\n const ids = this.request.filter.ids.split(\",\") ?? [];\n return await this.service.searchEntityBatch(ids);\n }\n\n // TODO remove later\n if (this.resourcePath === `GET /entities/{id}`) {\n const { id } = this.request.pathParameters;\n const result = await this.service.findById(id);\n if (result.status !== Status.active) throw new ErrorHttp({ code: 404, error: \"NotFound\" }, \"Entity not found\");\n return result;\n }\n }\n\n protected processStreamEvent(dynamoDBStreamEvent: DynamoDBStreamEvent): Promise<void> {\n return;\n }\n\n protected processScheduledEvent(scheduledEvent: ScheduledEvent): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n protected processWebSocketEvent(event: APIGatewayProxyWebsocketEventV2): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n}\n"]}
1
+ {"version":3,"file":"entity-controller.js","sourceRoot":"","sources":["../../../../src/_examples/controller/entity/entity-controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAQ5C,mDAAsD;AACtD,yCAA4E;AAK5E,+CAA6C;AAGtC,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,oBAAoC;IACxE;QACE,MAAM,aAAa,GAAkB,gBAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACpE,KAAK,CAAC,aAAa,EAAE,6BAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;IAES,eAAe,CAAC,QAAkB;QAC1C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAES,KAAK,CAAC,kBAAkB,CAAC,GAAgB,IAAiB,CAAC;IAE3D,kBAAkB,CAAC,mBAAwC;QACnE,OAAO;IACT,CAAC;IAES,qBAAqB,CAAC,cAA8B;QAC5D,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAES,qBAAqB,CAAC,KAAsC;QACpE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;CACF,CAAA;AAvBY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,gBAAO,EAAC,kBAAkB,CAAC;;GACf,gBAAgB,CAuB5B","sourcesContent":["import Container, { Service } from \"typedi\";\nimport {\n APIGatewayProxyEvent,\n APIGatewayProxyWebsocketEventV2,\n DynamoDBStreamEvent,\n ScheduledEvent,\n SQSEvent,\n} from \"aws-lambda\";\nimport { CONFIG_ENTITY, path } from \"./entity-config\";\nimport { BaseController, ControllerApi, HttpRequest } from \"@chinggis/core\";\nimport { Entity, Status } from \"../../model-shared/supplier-portal.model\";\nimport { ErrorHttp } from \"../../../exception/errors\";\n\nimport { EntityService } from \"../../service/entity/entity-service.interface\";\nimport \"../../service/entity/entity-service\";\n\n@Service(\"EntityController\")\nexport class EntityController extends ControllerApi<Entity, EntityService> {\n constructor() {\n const entityService: EntityService = Container.get(\"EntityService\");\n super(entityService, CONFIG_ENTITY.toObject());\n }\n\n protected processSQSEvent(sqsEvent: SQSEvent): Promise<any> {\n throw new Error(\"Method not implemented.\");\n }\n\n protected async processCrudRequest(req: HttpRequest): Promise<any> {}\n\n protected processStreamEvent(dynamoDBStreamEvent: DynamoDBStreamEvent): Promise<void> {\n return;\n }\n\n protected processScheduledEvent(scheduledEvent: ScheduledEvent): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n protected processWebSocketEvent(event: APIGatewayProxyWebsocketEventV2): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { ActionDynamoDB, BaseServiceImpl } from "../../../index.js";
1
+ import { ActionDynamoDB, CrudServiceImpl } from "../../../index.js";
2
2
  import { Entity } from "../../model-shared/supplier-portal.model";
3
3
  import { EntityRepoDB } from "../../repositories/entity/entity-repo-db.interface";
4
4
  import "../../repositories/entity/entity-repo-db";
@@ -6,7 +6,7 @@ import { EntityRepoES } from "../../repositories/entity/entity-repo-es.interface
6
6
  import "../../repositories/entity/entity-repo-es";
7
7
  import { EntityService } from "./entity-service.interface";
8
8
  import "./entity-service";
9
- export declare class EntityServiceImpl extends BaseServiceImpl<Entity, EntityRepoDB, EntityRepoES> implements EntityService {
9
+ export declare class EntityServiceImpl extends CrudServiceImpl<Entity, EntityRepoDB, EntityRepoES> implements EntityService {
10
10
  constructor();
11
11
  searchEntityBatch(ids: Array<string>): Promise<Entity[]>;
12
12
  processChanges(itemOld: Entity, itemNew: Entity, action: ActionDynamoDB, tableName: string): Promise<any>;
@@ -1,5 +1,5 @@
1
- import { BaseService } from "../../../index.js";
1
+ import { CrudService } from "../../../index.js";
2
2
  import { Entity } from "../../model-shared/supplier-portal.model";
3
- export interface EntityService extends BaseService<Entity> {
3
+ export interface EntityService extends CrudService<Entity> {
4
4
  searchEntityBatch(ids: Array<string>): Promise<Entity[]>;
5
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"entity-service.interface.js","sourceRoot":"","sources":["../../../../src/_examples/service/entity/entity-service.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { BaseService } from \"@chinggis/core\";\nimport { Entity } from \"../../model-shared/supplier-portal.model\";\n\nexport interface EntityService extends BaseService<Entity> {\n searchEntityBatch(ids: Array<string>): Promise<Entity[]>;\n}\n"]}
1
+ {"version":3,"file":"entity-service.interface.js","sourceRoot":"","sources":["../../../../src/_examples/service/entity/entity-service.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { BaseService, CrudService } from \"@chinggis/core\";\nimport { Entity } from \"../../model-shared/supplier-portal.model\";\n\nexport interface EntityService extends CrudService<Entity> {\n searchEntityBatch(ids: Array<string>): Promise<Entity[]>;\n}\n"]}
@@ -49,7 +49,7 @@ const entity_config_1 = require("../../controller/entity/entity-config");
49
49
  require("../../repositories/entity/entity-repo-db");
50
50
  require("../../repositories/entity/entity-repo-es");
51
51
  require("./entity-service");
52
- let EntityServiceImpl = class EntityServiceImpl extends core_1.BaseServiceImpl {
52
+ let EntityServiceImpl = class EntityServiceImpl extends core_1.CrudServiceImpl {
53
53
  constructor() {
54
54
  const repoDB = typedi_1.default.get("EntityRepoDB");
55
55
  const repoES = typedi_1.default.get("EntityRepoES");
@@ -1 +1 @@
1
- {"version":3,"file":"entity-service.js","sourceRoot":"","sources":["../../../../src/_examples/service/entity/entity-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAE5C,yCAAiE;AAEjE,yEAAmE;AAGnE,oDAAkD;AAGlD,oDAAkD;AAGlD,4BAA0B;AAGnB,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,sBAAmD;IACxF;QACE,MAAM,MAAM,GAAiB,gBAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAiB,gBAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC3D,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,CAAC;IACD,KAAK,CAAC,iBAAiB,CAAC,GAAkB;QACxC,MAAM,KAAK,GAAQ;YACjB,KAAK,EAAE,0BAAU,CAAC,KAAK;YACvB,IAAI,EAAE;gBACJ,KAAK,EAAE;oBACL,IAAI,EAAE;wBACJ,IAAI,EAAE;4BACJ;gCACE,GAAG,EAAE;oCACH,MAAM,EAAE,GAAG;iCACZ;6BACF;4BACD;gCACE,IAAI,EAAE;oCACJ,MAAM,EAAE,QAAQ;iCACjB;6BACF;yBACF;qBACF;iBACF;aACF;SACF,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5C,OAAO,GAAG,EAAE,KAAK,CAAC;IACpB,CAAC;IAED,cAAc,CAAC,OAAe,EAAE,OAAe,EAAE,MAAsB,EAAE,SAAiB;QACxF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;CACF,CAAA;AArCY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,gBAAO,EAAC,eAAe,CAAC;;GACZ,iBAAiB,CAqC7B","sourcesContent":["import Container, { Service } from \"typedi\";\n\nimport { ActionDynamoDB, BaseServiceImpl } from \"@chinggis/core\";\nimport { Entity } from \"../../model-shared/supplier-portal.model\";\nimport { openSearch } from \"../../controller/entity/entity-config\";\n\nimport { EntityRepoDB } from \"../../repositories/entity/entity-repo-db.interface\";\nimport \"../../repositories/entity/entity-repo-db\";\n\nimport { EntityRepoES } from \"../../repositories/entity/entity-repo-es.interface\";\nimport \"../../repositories/entity/entity-repo-es\";\n\nimport { EntityService } from \"./entity-service.interface\";\nimport \"./entity-service\";\n\n@Service(\"EntityService\")\nexport class EntityServiceImpl extends BaseServiceImpl<Entity, EntityRepoDB, EntityRepoES> implements EntityService {\n constructor() {\n const repoDB: EntityRepoDB = Container.get(\"EntityRepoDB\");\n const repoES: EntityRepoES = Container.get(\"EntityRepoES\");\n super(repoDB, repoES);\n }\n async searchEntityBatch(ids: Array<string>): Promise<Entity[]> {\n const query: any = {\n index: openSearch.index,\n body: {\n query: {\n bool: {\n must: [\n {\n ids: {\n values: ids,\n },\n },\n {\n term: {\n status: \"active\",\n },\n },\n ],\n },\n },\n },\n };\n\n const res = await this.repoES.search(query);\n\n return res?.items;\n }\n\n processChanges(itemOld: Entity, itemNew: Entity, action: ActionDynamoDB, tableName: string): Promise<any> {\n throw new Error(\"Method not implemented.\");\n }\n}\n"]}
1
+ {"version":3,"file":"entity-service.js","sourceRoot":"","sources":["../../../../src/_examples/service/entity/entity-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAE5C,yCAAuH;AAEvH,yEAAmE;AAGnE,oDAAkD;AAGlD,oDAAkD;AAGlD,4BAA0B;AAGnB,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,sBAAmD;IACxF;QACE,MAAM,MAAM,GAAiB,gBAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAiB,gBAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC3D,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,GAAkB;QACxC,MAAM,KAAK,GAAQ;YACjB,KAAK,EAAE,0BAAU,CAAC,KAAK;YACvB,IAAI,EAAE;gBACJ,KAAK,EAAE;oBACL,IAAI,EAAE;wBACJ,IAAI,EAAE;4BACJ;gCACE,GAAG,EAAE;oCACH,MAAM,EAAE,GAAG;iCACZ;6BACF;4BACD;gCACE,IAAI,EAAE;oCACJ,MAAM,EAAE,QAAQ;iCACjB;6BACF;yBACF;qBACF;iBACF;aACF;SACF,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5C,OAAO,GAAG,EAAE,KAAK,CAAC;IACpB,CAAC;IAED,cAAc,CAAC,OAAe,EAAE,OAAe,EAAE,MAAsB,EAAE,SAAiB;QACxF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;CACF,CAAA;AAtCY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,gBAAO,EAAC,eAAe,CAAC;;GACZ,iBAAiB,CAsC7B","sourcesContent":["import Container, { Service } from \"typedi\";\n\nimport { ActionDynamoDB, BaseServiceImpl, CognitoUser, CrudServiceImpl, DynamoIndexMap, Filter } from \"@chinggis/core\";\nimport { Entity } from \"../../model-shared/supplier-portal.model\";\nimport { openSearch } from \"../../controller/entity/entity-config\";\n\nimport { EntityRepoDB } from \"../../repositories/entity/entity-repo-db.interface\";\nimport \"../../repositories/entity/entity-repo-db\";\n\nimport { EntityRepoES } from \"../../repositories/entity/entity-repo-es.interface\";\nimport \"../../repositories/entity/entity-repo-es\";\n\nimport { EntityService } from \"./entity-service.interface\";\nimport \"./entity-service\";\n\n@Service(\"EntityService\")\nexport class EntityServiceImpl extends CrudServiceImpl<Entity, EntityRepoDB, EntityRepoES> implements EntityService {\n constructor() {\n const repoDB: EntityRepoDB = Container.get(\"EntityRepoDB\");\n const repoES: EntityRepoES = Container.get(\"EntityRepoES\");\n super(repoDB, repoES);\n }\n\n async searchEntityBatch(ids: Array<string>): Promise<Entity[]> {\n const query: any = {\n index: openSearch.index,\n body: {\n query: {\n bool: {\n must: [\n {\n ids: {\n values: ids,\n },\n },\n {\n term: {\n status: \"active\",\n },\n },\n ],\n },\n },\n },\n };\n\n const res = await this.repoES.search(query);\n\n return res?.items;\n }\n\n processChanges(itemOld: Entity, itemNew: Entity, action: ActionDynamoDB, tableName: string): Promise<any> {\n throw new Error(\"Method not implemented.\");\n }\n}\n"]}
@@ -61,5 +61,6 @@ export declare enum AggTypeOS {
61
61
  SUM = "sum",
62
62
  AVG = "avg",
63
63
  MAX = "max",
64
- MIN = "min"
64
+ MIN = "min",
65
+ TREE = "tree"
65
66
  }
@@ -29,5 +29,6 @@ var AggTypeOS;
29
29
  AggTypeOS["AVG"] = "avg";
30
30
  AggTypeOS["MAX"] = "max";
31
31
  AggTypeOS["MIN"] = "min";
32
+ AggTypeOS["TREE"] = "tree";
32
33
  })(AggTypeOS || (exports.AggTypeOS = AggTypeOS = {}));
33
34
  //# sourceMappingURL=filter.model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter.model.js","sourceRoot":"","sources":["../../src/model/filter.model.ts"],"names":[],"mappings":";;;AA8CA,IAAY,eASX;AATD,WAAY,eAAe;IACzB,4BAAS,CAAA;IACT,4BAAS,CAAA;IACT,4BAAS,CAAA;IACT,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,oCAAiB,CAAA;IACjB,kCAAe,CAAA;AACjB,CAAC,EATW,eAAe,+BAAf,eAAe,QAS1B;AAED,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,0BAAW,CAAA;IACX,0BAAW,CAAA;AACb,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB;AAED,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,+BAAW,CAAA;IACX,6BAAS,CAAA;AACX,CAAC,EAHW,gBAAgB,gCAAhB,gBAAgB,QAG3B;AAED,IAAY,SAMX;AAND,WAAY,SAAS;IACnB,4BAAe,CAAA;IACf,wBAAW,CAAA;IACX,wBAAW,CAAA;IACX,wBAAW,CAAA;IACX,wBAAW,CAAA;AACb,CAAC,EANW,SAAS,yBAAT,SAAS,QAMpB","sourcesContent":["import { SortOrder } from \"@chinggis/core\";\n\nexport interface Filter extends Record<string, any> {\n page?: number; // The page number for pagination\n size?: number; // The size of items per page\n sortBy?: string; // The field to sort by\n sort?: SortOrder; // Sorting order, either ascending or descending\n searchBy?: string[]; // The field to search in\n searchKeyword?: string; // The keyword to search for\n rangeFilters?: RangeFilter[]; // The field to apply range filtering on\n lastKey?: string;\n indexName?: string;\n indexValue?: string;\n indexSortName?: string;\n indexSortValue?: string;\n fieldsInclude?: string[];\n fieldsExclude?: string[];\n urlRaw?: string;\n}\n\nexport type RangeFilter = {\n fieldName: string;\n minValue?: number | Date;\n maxValue?: number | Date;\n minExclude?: boolean;\n maxExclude?: boolean;\n};\n\nexport type NumberRange = {\n gte?: number;\n lte?: number;\n};\n\nexport type DateRange = {\n gte?: string;\n lte?: string;\n};\n\nexport interface BoolQueryOS {\n must: Array<any>;\n must_not: Array<any>;\n filter: Array<any>;\n should: Array<any>;\n minimum_should_match?: number;\n}\n\nexport enum BoolQueryTypeOS {\n eq = \"eq\",\n ne = \"ne\",\n in = \"in\",\n nin = \"nin\",\n gte = \"gte\",\n lte = \"lte\",\n exists = \"exists\",\n regex = \"regex\",\n}\n\nexport enum RangeTypeOS {\n lte = \"lte\",\n gte = \"gte\",\n}\n\nexport enum SearchOperatorOS {\n AND = \"and\",\n OR = \"or\",\n}\n\nexport enum AggTypeOS {\n TERMS = \"terms\",\n SUM = \"sum\",\n AVG = \"avg\",\n MAX = \"max\",\n MIN = \"min\",\n}\n"]}
1
+ {"version":3,"file":"filter.model.js","sourceRoot":"","sources":["../../src/model/filter.model.ts"],"names":[],"mappings":";;;AA8CA,IAAY,eASX;AATD,WAAY,eAAe;IACzB,4BAAS,CAAA;IACT,4BAAS,CAAA;IACT,4BAAS,CAAA;IACT,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,oCAAiB,CAAA;IACjB,kCAAe,CAAA;AACjB,CAAC,EATW,eAAe,+BAAf,eAAe,QAS1B;AAED,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,0BAAW,CAAA;IACX,0BAAW,CAAA;AACb,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB;AAED,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,+BAAW,CAAA;IACX,6BAAS,CAAA;AACX,CAAC,EAHW,gBAAgB,gCAAhB,gBAAgB,QAG3B;AAED,IAAY,SAOX;AAPD,WAAY,SAAS;IACnB,4BAAe,CAAA;IACf,wBAAW,CAAA;IACX,wBAAW,CAAA;IACX,wBAAW,CAAA;IACX,wBAAW,CAAA;IACX,0BAAa,CAAA;AACf,CAAC,EAPW,SAAS,yBAAT,SAAS,QAOpB","sourcesContent":["import { SortOrder } from \"@chinggis/core\";\n\nexport interface Filter extends Record<string, any> {\n page?: number; // The page number for pagination\n size?: number; // The size of items per page\n sortBy?: string; // The field to sort by\n sort?: SortOrder; // Sorting order, either ascending or descending\n searchBy?: string[]; // The field to search in\n searchKeyword?: string; // The keyword to search for\n rangeFilters?: RangeFilter[]; // The field to apply range filtering on\n lastKey?: string;\n indexName?: string;\n indexValue?: string;\n indexSortName?: string;\n indexSortValue?: string;\n fieldsInclude?: string[];\n fieldsExclude?: string[];\n urlRaw?: string;\n}\n\nexport type RangeFilter = {\n fieldName: string;\n minValue?: number | Date;\n maxValue?: number | Date;\n minExclude?: boolean;\n maxExclude?: boolean;\n};\n\nexport type NumberRange = {\n gte?: number;\n lte?: number;\n};\n\nexport type DateRange = {\n gte?: string;\n lte?: string;\n};\n\nexport interface BoolQueryOS {\n must: Array<any>;\n must_not: Array<any>;\n filter: Array<any>;\n should: Array<any>;\n minimum_should_match?: number;\n}\n\nexport enum BoolQueryTypeOS {\n eq = \"eq\",\n ne = \"ne\",\n in = \"in\",\n nin = \"nin\",\n gte = \"gte\",\n lte = \"lte\",\n exists = \"exists\",\n regex = \"regex\",\n}\n\nexport enum RangeTypeOS {\n lte = \"lte\",\n gte = \"gte\",\n}\n\nexport enum SearchOperatorOS {\n AND = \"and\",\n OR = \"or\",\n}\n\nexport enum AggTypeOS {\n TERMS = \"terms\",\n SUM = \"sum\",\n AVG = \"avg\",\n MAX = \"max\",\n MIN = \"min\",\n TREE = \"tree\",\n}\n"]}
@@ -45,6 +45,8 @@ function buildQuery(type, field) {
45
45
  return {
46
46
  [types_1.AggTypeOS.TERMS]: { size: 1000, field: field },
47
47
  };
48
+ if (type === types_1.AggTypeOS.TREE)
49
+ return buildTreeQuery(field);
48
50
  return { [type]: { field: field } };
49
51
  }
50
52
  // ----------------------------
@@ -53,7 +55,10 @@ function buildQuery(type, field) {
53
55
  function buildNativeOSQuery(instructions) {
54
56
  const aggs = {};
55
57
  for (const inst of instructions) {
56
- const aggName = inst.type === types_1.AggTypeOS.TERMS ? inst.field : `${inst.field}`;
58
+ let aggName = inst.type === types_1.AggTypeOS.TERMS ? inst.field : `${inst.field}`;
59
+ if (inst.type === types_1.AggTypeOS.TREE) {
60
+ aggName = inst.field.split(",")[0];
61
+ }
57
62
  aggs[aggName] = buildQuery(inst.type, inst.field);
58
63
  if (inst.sub && aggs[aggName]) {
59
64
  aggs[aggName].aggs = {
@@ -63,4 +68,34 @@ function buildNativeOSQuery(instructions) {
63
68
  }
64
69
  return aggs;
65
70
  }
71
+ function buildTreeQuery(tree) {
72
+ let include = ".*\\/.*";
73
+ let exclude = ".*\\/.*\\/.*";
74
+ const [field, treeValue] = tree.split(",");
75
+ if (treeValue) {
76
+ let level = treeValue.split("/").length;
77
+ include = treeValue + include;
78
+ if (level > 1) {
79
+ include = treeValue + ".*\\/.*";
80
+ exclude = "";
81
+ }
82
+ return {
83
+ terms: {
84
+ field: `${field}.tree`,
85
+ include: include,
86
+ exclude: exclude,
87
+ size: 300,
88
+ },
89
+ };
90
+ }
91
+ else {
92
+ return {
93
+ terms: {
94
+ field: `${field}.tree`,
95
+ exclude: exclude,
96
+ size: 300,
97
+ },
98
+ };
99
+ }
100
+ }
66
101
  //# sourceMappingURL=opensearch.parser.aggs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"opensearch.parser.aggs.js","sourceRoot":"","sources":["../../../src/utils/opensearch/opensearch.parser.aggs.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,4CAA4C;AAC5C,wCAAwC;;AAaxC,8CA+BC;AAgBD,gDAgBC;AA1ED,2CAA4C;AAQ5C,+BAA+B;AAC/B,qBAAqB;AACrB,+BAA+B;AAC/B,SAAgB,iBAAiB,CAAC,MAA8B;IAC9D,MAAM,YAAY,GAAqB,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS;QAEvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B;QAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAc,CAAC;QAEnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAEvD,2BAA2B;QAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC;gBAChB,IAAI;gBACJ,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,mCAAmC;QACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;YAC7C,sBAAsB;YACtB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAErE,IAAI,QAAQ;gBAAE,QAAQ,CAAC,GAAG,GAAG,KAAK,CAAC;YACnC,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,kBAAkB,CAAC,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED,+BAA+B;AAC/B,sBAAsB;AACtB,+BAA+B;AAC/B,SAAS,UAAU,CAAC,IAAe,EAAE,KAAa;IAChD,IAAI,IAAI,KAAK,iBAAS,CAAC,KAAK;QAC1B,OAAO;YACL,CAAC,iBAAS,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;SAChD,CAAC;IACJ,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AACtC,CAAC;AAED,+BAA+B;AAC/B,2BAA2B;AAC3B,+BAA+B;AAC/B,SAAgB,kBAAkB,CAAC,YAA8B;IAC/D,MAAM,IAAI,GAAQ,EAAE,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,iBAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAE7E,IAAI,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAElD,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG;gBACnB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;aAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["// =====================================\n// AGG BUILDER (MULTI ROOT + 1 SUB PER ROOT)\n// =====================================\n\nimport { AggTypeOS } from \"@chinggis/types\";\n\nexport interface AggInstruction {\n type: AggTypeOS;\n field: string;\n sub?: string; // only for agg__xxx__sub\n}\n\n// ----------------------------\n// Parse aggregations\n// ----------------------------\nexport function buildAggregations(params: Record<string, string>): AggInstruction[] {\n const instructions: AggInstruction[] = [];\n\n for (const [key, value] of Object.entries(params)) {\n if (!key.startsWith(\"agg__\")) continue;\n\n const parts = key.split(\"__\"); // [\"agg\", \"terms\", \"sub\"?]\n const type = parts[1] as AggTypeOS;\n\n if (!Object.values(AggTypeOS).includes(type)) continue;\n\n // root = agg__terms=status\n if (parts.length === 2) {\n instructions.push({\n type,\n field: value,\n });\n continue;\n }\n\n // sub = agg__terms__sub=customerId\n if (parts.length === 3 && parts[2] === \"sub\") {\n // attach to last root\n const lastRoot = instructions.find((i) => i.type === type && !i.sub);\n\n if (lastRoot) lastRoot.sub = value;\n continue;\n }\n }\n\n return buildNativeOSQuery(instructions);\n}\n\n// ----------------------------\n// Build ES agg object\n// ----------------------------\nfunction buildQuery(type: AggTypeOS, field: string) {\n if (type === AggTypeOS.TERMS)\n return {\n [AggTypeOS.TERMS]: { size: 1000, field: field },\n };\n return { [type]: { field: field } };\n}\n\n// ----------------------------\n// Build final aggregations\n// ----------------------------\nexport function buildNativeOSQuery(instructions: AggInstruction[]) {\n const aggs: any = {};\n\n for (const inst of instructions) {\n const aggName = inst.type === AggTypeOS.TERMS ? inst.field : `${inst.field}`;\n\n aggs[aggName] = buildQuery(inst.type, inst.field);\n\n if (inst.sub && aggs[aggName]) {\n aggs[aggName].aggs = {\n [inst.sub]: buildQuery(inst.type, inst.sub),\n };\n }\n }\n\n return aggs;\n}\n"]}
1
+ {"version":3,"file":"opensearch.parser.aggs.js","sourceRoot":"","sources":["../../../src/utils/opensearch/opensearch.parser.aggs.ts"],"names":[],"mappings":"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","sourcesContent":["// =====================================\n// AGG BUILDER (MULTI ROOT + 1 SUB PER ROOT)\n// =====================================\n\nimport { AggTypeOS } from \"@chinggis/types\";\n\nexport interface AggInstruction {\n type: AggTypeOS;\n field: string;\n sub?: string; // only for agg__xxx__sub\n}\n\n// ----------------------------\n// Parse aggregations\n// ----------------------------\nexport function buildAggregations(params: Record<string, string>): AggInstruction[] {\n const instructions: AggInstruction[] = [];\n\n for (const [key, value] of Object.entries(params)) {\n if (!key.startsWith(\"agg__\")) continue;\n\n const parts = key.split(\"__\"); // [\"agg\", \"terms\", \"sub\"?]\n const type = parts[1] as AggTypeOS;\n\n if (!Object.values(AggTypeOS).includes(type)) continue;\n\n // root = agg__terms=status\n if (parts.length === 2) {\n instructions.push({\n type,\n field: value,\n });\n continue;\n }\n\n // sub = agg__terms__sub=customerId\n if (parts.length === 3 && parts[2] === \"sub\") {\n // attach to last root\n const lastRoot = instructions.find((i) => i.type === type && !i.sub);\n\n if (lastRoot) lastRoot.sub = value;\n continue;\n }\n }\n\n return buildNativeOSQuery(instructions);\n}\n\n// ----------------------------\n// Build ES agg object\n// ----------------------------\nfunction buildQuery(type: AggTypeOS, field: string) {\n if (type === AggTypeOS.TERMS)\n return {\n [AggTypeOS.TERMS]: { size: 1000, field: field },\n };\n\n if (type === AggTypeOS.TREE) return buildTreeQuery(field);\n return { [type]: { field: field } };\n}\n\n// ----------------------------\n// Build final aggregations\n// ----------------------------\nexport function buildNativeOSQuery(instructions: AggInstruction[]) {\n const aggs: any = {};\n\n for (const inst of instructions) {\n let aggName = inst.type === AggTypeOS.TERMS ? inst.field : `${inst.field}`;\n\n if (inst.type === AggTypeOS.TREE) {\n aggName = inst.field.split(\",\")[0];\n }\n\n aggs[aggName] = buildQuery(inst.type, inst.field);\n\n if (inst.sub && aggs[aggName]) {\n aggs[aggName].aggs = {\n [inst.sub]: buildQuery(inst.type, inst.sub),\n };\n }\n }\n\n return aggs;\n}\n\nfunction buildTreeQuery(tree: string) {\n let include = \".*\\\\/.*\";\n let exclude = \".*\\\\/.*\\\\/.*\";\n const [field, treeValue] = tree.split(\",\");\n\n if (treeValue) {\n let level = treeValue.split(\"/\").length;\n include = treeValue + include;\n\n if (level > 1) {\n include = treeValue + \".*\\\\/.*\";\n exclude = \"\";\n }\n\n return {\n terms: {\n field: `${field}.tree`,\n include: include,\n exclude: exclude,\n size: 300,\n },\n };\n } else {\n return {\n terms: {\n field: `${field}.tree`,\n exclude: exclude,\n size: 300,\n },\n };\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aws-service-stack",
3
- "version": "0.18.394",
3
+ "version": "0.18.395",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "author": "chinggis.systems",