storemw-core-api 1.0.154 → 1.0.156

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.
Files changed (62) hide show
  1. package/dist/lib/model_factory/default.d.ts +5 -5
  2. package/dist/lib/model_factory/default.js +8 -5
  3. package/dist/lib/model_factory/default.js.map +1 -1
  4. package/dist/services/access_control/AccessControlRoleService.js +1 -1
  5. package/dist/services/access_control/AccessControlRoleService.js.map +1 -1
  6. package/dist/services/access_key/AccessKeyService.js +1 -1
  7. package/dist/services/access_key/AccessKeyService.js.map +1 -1
  8. package/dist/services/account/AccountService.js +1 -1
  9. package/dist/services/account/AccountService.js.map +1 -1
  10. package/dist/services/business/BusinessService.js +1 -1
  11. package/dist/services/business/BusinessService.js.map +1 -1
  12. package/dist/services/injection_field/InjectionFieldService.js +1 -1
  13. package/dist/services/injection_field/InjectionFieldService.js.map +1 -1
  14. package/dist/services/item/ItemBrandService.js +1 -1
  15. package/dist/services/item/ItemBrandService.js.map +1 -1
  16. package/dist/services/item/ItemCategoryService.js +1 -1
  17. package/dist/services/item/ItemCategoryService.js.map +1 -1
  18. package/dist/services/item/ItemItemService.js +1 -1
  19. package/dist/services/item/ItemItemService.js.map +1 -1
  20. package/dist/services/item/ItemProductService.js +1 -1
  21. package/dist/services/item/ItemProductService.js.map +1 -1
  22. package/dist/services/item/ItemUomService.js +1 -1
  23. package/dist/services/item/ItemUomService.js.map +1 -1
  24. package/dist/services/location/LocationLocationService.js +1 -1
  25. package/dist/services/location/LocationLocationService.js.map +1 -1
  26. package/dist/services/location/LocationRackService.js +1 -1
  27. package/dist/services/location/LocationRackService.js.map +1 -1
  28. package/dist/services/location/LocationSlotService.js +1 -1
  29. package/dist/services/location/LocationSlotService.js.map +1 -1
  30. package/dist/services/one_time_code/OneTimeCodeService.js +1 -1
  31. package/dist/services/one_time_code/OneTimeCodeService.js.map +1 -1
  32. package/dist/services/region/AreaService.js +1 -1
  33. package/dist/services/region/AreaService.js.map +1 -1
  34. package/dist/services/region/CountryService.js +1 -1
  35. package/dist/services/region/CountryService.js.map +1 -1
  36. package/dist/services/region/StateService.js +1 -1
  37. package/dist/services/region/StateService.js.map +1 -1
  38. package/dist/services/scheduler/SchedulerLogService.js +1 -1
  39. package/dist/services/scheduler/SchedulerLogService.js.map +1 -1
  40. package/dist/services/subscription/account/AccountSubscribeService.js +1 -1
  41. package/dist/services/subscription/account/AccountSubscribeService.js.map +1 -1
  42. package/dist/services/subscription/plan/SubscribePlanService.js +1 -1
  43. package/dist/services/subscription/plan/SubscribePlanService.js.map +1 -1
  44. package/dist/services/user/AdministratorService.js +1 -1
  45. package/dist/services/user/AdministratorService.js.map +1 -1
  46. package/dist/services/user/AgentService.js +1 -1
  47. package/dist/services/user/AgentService.js.map +1 -1
  48. package/dist/services/user/CustomerService.js +1 -1
  49. package/dist/services/user/CustomerService.js.map +1 -1
  50. package/dist/services/user/DriverService.js +1 -1
  51. package/dist/services/user/DriverService.js.map +1 -1
  52. package/dist/services/user/MemberService.js +1 -1
  53. package/dist/services/user/MemberService.js.map +1 -1
  54. package/dist/services/user/OperatorService.js +1 -1
  55. package/dist/services/user/OperatorService.js.map +1 -1
  56. package/dist/services/user/RetailerService.js +1 -1
  57. package/dist/services/user/RetailerService.js.map +1 -1
  58. package/dist/services/user/UserService.js +1 -1
  59. package/dist/services/user/UserService.js.map +1 -1
  60. package/dist/services/user/WorkerService.js +1 -1
  61. package/dist/services/user/WorkerService.js.map +1 -1
  62. package/package.json +1 -1
@@ -1,23 +1,23 @@
1
1
  export type DefaultOmitFields = "createdatetime" | "createuserid" | "updatedatetime" | "updateuserid" | "isdelete" | "istrash" | "accountid";
2
2
  export declare const getDefaultCreateFields: (createUserId: number, accountId: number) => {
3
- createuserid: number;
3
+ createuserid: string | number;
4
4
  createdatetime: string;
5
- updateuserid: number;
5
+ updateuserid: string | number;
6
6
  updatedatetime: string;
7
7
  accountid: number;
8
8
  };
9
9
  export declare const getDefaultUpdateFields: (updateUserId: number) => {
10
- updateuserid: number;
10
+ updateuserid: string | number;
11
11
  updatedatetime: string;
12
12
  };
13
13
  export declare const getDefaultTrashFields: (updateUserId: number) => {
14
14
  istrash: boolean;
15
- updateuserid: number;
15
+ updateuserid: string | number;
16
16
  updatedatetime: string;
17
17
  };
18
18
  export declare const getDefaultRemoveFields: (updateUserId: number) => {
19
19
  isdelete: boolean;
20
- updateuserid: number;
20
+ updateuserid: string | number;
21
21
  updatedatetime: string;
22
22
  };
23
23
  export declare const getDefaultGetWhere: {
@@ -2,13 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.errorRecordNotFoundAfterRemoved = exports.errorRecordNotFoundAfterTrashed = exports.errorRecordNotFoundAfterUpdated = exports.errorRecordNotFoundAlreadyDeleted = exports.getDefaultRemoveWhere = exports.getDefaultTrashWhere = exports.getDefaultUpdateWhere = exports.getDefaultGetWhere = exports.getDefaultRemoveFields = exports.getDefaultTrashFields = exports.getDefaultUpdateFields = exports.getDefaultCreateFields = void 0;
4
4
  const utils_1 = require("../../utils");
5
+ const forceToZeroIfEmpty = (val) => {
6
+ return val === "" ? 0 : "";
7
+ };
5
8
  // insert into create - data fields
6
9
  const getDefaultCreateFields = (createUserId, accountId) => {
7
10
  const currentDatetimeISO = (0, utils_1.getCurrentDateTimeISO)();
8
11
  return {
9
- createuserid: createUserId,
12
+ createuserid: forceToZeroIfEmpty(createUserId),
10
13
  createdatetime: currentDatetimeISO,
11
- updateuserid: createUserId,
14
+ updateuserid: forceToZeroIfEmpty(createUserId),
12
15
  updatedatetime: currentDatetimeISO,
13
16
  accountid: accountId
14
17
  };
@@ -18,7 +21,7 @@ exports.getDefaultCreateFields = getDefaultCreateFields;
18
21
  const getDefaultUpdateFields = (updateUserId) => {
19
22
  const currentDatetimeISO = (0, utils_1.getCurrentDateTimeISO)();
20
23
  return {
21
- updateuserid: updateUserId,
24
+ updateuserid: forceToZeroIfEmpty(updateUserId),
22
25
  updatedatetime: currentDatetimeISO,
23
26
  };
24
27
  };
@@ -28,7 +31,7 @@ const getDefaultTrashFields = (updateUserId) => {
28
31
  const currentDatetimeISO = (0, utils_1.getCurrentDateTimeISO)();
29
32
  return {
30
33
  istrash: true,
31
- updateuserid: updateUserId,
34
+ updateuserid: forceToZeroIfEmpty(updateUserId),
32
35
  updatedatetime: currentDatetimeISO,
33
36
  };
34
37
  };
@@ -38,7 +41,7 @@ const getDefaultRemoveFields = (updateUserId) => {
38
41
  const currentDatetimeISO = (0, utils_1.getCurrentDateTimeISO)();
39
42
  return {
40
43
  isdelete: true,
41
- updateuserid: updateUserId,
44
+ updateuserid: forceToZeroIfEmpty(updateUserId),
42
45
  updatedatetime: currentDatetimeISO,
43
46
  };
44
47
  };
@@ -1 +1 @@
1
- {"version":3,"file":"default.js","sourceRoot":"","sources":["../../../src/lib/model_factory/default.ts"],"names":[],"mappings":";;;AAAA,mCAA+C;AAK/C,mCAAmC;AAC5B,MAAM,sBAAsB,GAAG,CAAC,YAAoB,EAAE,SAAiB,EAAE,EAAE;IAE9E,MAAM,kBAAkB,GAAG,IAAA,6BAAqB,GAAE,CAAA;IAElD,OAAO;QACH,YAAY,EAAE,YAAY;QAC1B,cAAc,EAAE,kBAAkB;QAClC,YAAY,EAAE,YAAY;QAC1B,cAAc,EAAE,kBAAkB;QAClC,SAAS,EAAE,SAAS;KACvB,CAAA;AACL,CAAC,CAAA;AAXY,QAAA,sBAAsB,0BAWlC;AAED,mCAAmC;AAC5B,MAAM,sBAAsB,GAAG,CAAC,YAAoB,EAAE,EAAE;IAE3D,MAAM,kBAAkB,GAAG,IAAA,6BAAqB,GAAE,CAAA;IAElD,OAAO;QACH,YAAY,EAAE,YAAY;QAC1B,cAAc,EAAE,kBAAkB;KACrC,CAAA;AACL,CAAC,CAAA;AARY,QAAA,sBAAsB,0BAQlC;AAED,kCAAkC;AAC3B,MAAM,qBAAqB,GAAG,CAAC,YAAoB,EAAE,EAAE;IAE1D,MAAM,kBAAkB,GAAG,IAAA,6BAAqB,GAAE,CAAA;IAElD,OAAO;QACH,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,YAAY;QAC1B,cAAc,EAAE,kBAAkB;KACrC,CAAA;AACL,CAAC,CAAA;AATY,QAAA,qBAAqB,yBASjC;AAED,mCAAmC;AAC5B,MAAM,sBAAsB,GAAG,CAAC,YAAoB,EAAE,EAAE;IAE3D,MAAM,kBAAkB,GAAG,IAAA,6BAAqB,GAAE,CAAA;IAElD,OAAO;QACH,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,YAAY;QAC1B,cAAc,EAAE,kBAAkB;KACrC,CAAA;AACL,CAAC,CAAA;AATY,QAAA,sBAAsB,0BASlC;AAED,yCAAyC;AAC5B,QAAA,kBAAkB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;AAErD,4CAA4C;AAC/B,QAAA,qBAAqB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAExE,2CAA2C;AAC9B,QAAA,oBAAoB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAEvE,4CAA4C;AAC/B,QAAA,qBAAqB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAE3D,QAAA,iCAAiC,GAAG,qCAAqC,CAAA;AACzE,QAAA,+BAA+B,GAAG,+BAA+B,CAAA;AACjE,QAAA,+BAA+B,GAAG,8BAA8B,CAAA;AAChE,QAAA,+BAA+B,GAAG,+BAA+B,CAAA","sourcesContent":["import { getCurrentDateTimeISO } from \"@/utils\"\n\nexport type DefaultOmitFields = \"createdatetime\" | \"createuserid\" |\n \"updatedatetime\" | \"updateuserid\" | \"isdelete\" | \"istrash\" | \"accountid\"\n\n// insert into create - data fields\nexport const getDefaultCreateFields = (createUserId: number, accountId: number) => {\n\n const currentDatetimeISO = getCurrentDateTimeISO()\n\n return {\n createuserid: createUserId,\n createdatetime: currentDatetimeISO,\n updateuserid: createUserId,\n updatedatetime: currentDatetimeISO,\n accountid: accountId\n }\n}\n\n// insert into update - data fields\nexport const getDefaultUpdateFields = (updateUserId: number) => {\n\n const currentDatetimeISO = getCurrentDateTimeISO()\n\n return {\n updateuserid: updateUserId,\n updatedatetime: currentDatetimeISO,\n }\n}\n\n// insert into trash - data fields\nexport const getDefaultTrashFields = (updateUserId: number) => {\n\n const currentDatetimeISO = getCurrentDateTimeISO()\n\n return {\n istrash: true,\n updateuserid: updateUserId,\n updatedatetime: currentDatetimeISO,\n }\n}\n\n// insert into remove - data fields\nexport const getDefaultRemoveFields = (updateUserId: number) => {\n\n const currentDatetimeISO = getCurrentDateTimeISO()\n\n return {\n isdelete: true,\n updateuserid: updateUserId,\n updatedatetime: currentDatetimeISO,\n }\n}\n\n// insert into the get - where conditions\nexport const getDefaultGetWhere = { isdelete: false }\n\n// insert into the update - where conditions\nexport const getDefaultUpdateWhere = { isdelete: false, istrash: false }\n\n// insert into the trash - where conditions\nexport const getDefaultTrashWhere = { isdelete: false, istrash: false }\n\n// insert into the remove - where conditions\nexport const getDefaultRemoveWhere = { isdelete: false, istrash: false }\n\nexport const errorRecordNotFoundAlreadyDeleted = `Record not found or already deleted`\nexport const errorRecordNotFoundAfterUpdated = `Record not found after update`\nexport const errorRecordNotFoundAfterTrashed = `Record not found after trash`\nexport const errorRecordNotFoundAfterRemoved = `Record not found after remove`"]}
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../../src/lib/model_factory/default.ts"],"names":[],"mappings":";;;AAAA,mCAA+C;AAK/C,MAAM,kBAAkB,GAAG,CAAC,GAAQ,EAAE,EAAE;IACpC,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/B,CAAC,CAAA;AAED,mCAAmC;AAC5B,MAAM,sBAAsB,GAAG,CAAC,YAAoB,EAAE,SAAiB,EAAE,EAAE;IAE9E,MAAM,kBAAkB,GAAG,IAAA,6BAAqB,GAAE,CAAA;IAElD,OAAO;QACH,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAAC;QAC9C,cAAc,EAAE,kBAAkB;QAClC,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAAC;QAC9C,cAAc,EAAE,kBAAkB;QAClC,SAAS,EAAE,SAAS;KACvB,CAAA;AACL,CAAC,CAAA;AAXY,QAAA,sBAAsB,0BAWlC;AAED,mCAAmC;AAC5B,MAAM,sBAAsB,GAAG,CAAC,YAAoB,EAAE,EAAE;IAE3D,MAAM,kBAAkB,GAAG,IAAA,6BAAqB,GAAE,CAAA;IAElD,OAAO;QACH,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAAC;QAC9C,cAAc,EAAE,kBAAkB;KACrC,CAAA;AACL,CAAC,CAAA;AARY,QAAA,sBAAsB,0BAQlC;AAED,kCAAkC;AAC3B,MAAM,qBAAqB,GAAG,CAAC,YAAoB,EAAE,EAAE;IAE1D,MAAM,kBAAkB,GAAG,IAAA,6BAAqB,GAAE,CAAA;IAElD,OAAO;QACH,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAAC;QAC9C,cAAc,EAAE,kBAAkB;KACrC,CAAA;AACL,CAAC,CAAA;AATY,QAAA,qBAAqB,yBASjC;AAED,mCAAmC;AAC5B,MAAM,sBAAsB,GAAG,CAAC,YAAoB,EAAE,EAAE;IAE3D,MAAM,kBAAkB,GAAG,IAAA,6BAAqB,GAAE,CAAA;IAElD,OAAO;QACH,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAAC;QAC9C,cAAc,EAAE,kBAAkB;KACrC,CAAA;AACL,CAAC,CAAA;AATY,QAAA,sBAAsB,0BASlC;AAED,yCAAyC;AAC5B,QAAA,kBAAkB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;AAErD,4CAA4C;AAC/B,QAAA,qBAAqB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAExE,2CAA2C;AAC9B,QAAA,oBAAoB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAEvE,4CAA4C;AAC/B,QAAA,qBAAqB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAE3D,QAAA,iCAAiC,GAAG,qCAAqC,CAAA;AACzE,QAAA,+BAA+B,GAAG,+BAA+B,CAAA;AACjE,QAAA,+BAA+B,GAAG,8BAA8B,CAAA;AAChE,QAAA,+BAA+B,GAAG,+BAA+B,CAAA","sourcesContent":["import { getCurrentDateTimeISO } from \"@/utils\"\n\nexport type DefaultOmitFields = \"createdatetime\" | \"createuserid\" |\n \"updatedatetime\" | \"updateuserid\" | \"isdelete\" | \"istrash\" | \"accountid\"\n\nconst forceToZeroIfEmpty = (val: any) => {\n return val === \"\" ? 0 : \"\";\n}\n\n// insert into create - data fields\nexport const getDefaultCreateFields = (createUserId: number, accountId: number) => {\n\n const currentDatetimeISO = getCurrentDateTimeISO()\n\n return {\n createuserid: forceToZeroIfEmpty(createUserId),\n createdatetime: currentDatetimeISO,\n updateuserid: forceToZeroIfEmpty(createUserId),\n updatedatetime: currentDatetimeISO,\n accountid: accountId\n }\n}\n\n// insert into update - data fields\nexport const getDefaultUpdateFields = (updateUserId: number) => {\n\n const currentDatetimeISO = getCurrentDateTimeISO()\n\n return {\n updateuserid: forceToZeroIfEmpty(updateUserId),\n updatedatetime: currentDatetimeISO,\n }\n}\n\n// insert into trash - data fields\nexport const getDefaultTrashFields = (updateUserId: number) => {\n\n const currentDatetimeISO = getCurrentDateTimeISO()\n\n return {\n istrash: true,\n updateuserid: forceToZeroIfEmpty(updateUserId),\n updatedatetime: currentDatetimeISO,\n }\n}\n\n// insert into remove - data fields\nexport const getDefaultRemoveFields = (updateUserId: number) => {\n\n const currentDatetimeISO = getCurrentDateTimeISO()\n\n return {\n isdelete: true,\n updateuserid: forceToZeroIfEmpty(updateUserId),\n updatedatetime: currentDatetimeISO,\n }\n}\n\n// insert into the get - where conditions\nexport const getDefaultGetWhere = { isdelete: false }\n\n// insert into the update - where conditions\nexport const getDefaultUpdateWhere = { isdelete: false, istrash: false }\n\n// insert into the trash - where conditions\nexport const getDefaultTrashWhere = { isdelete: false, istrash: false }\n\n// insert into the remove - where conditions\nexport const getDefaultRemoveWhere = { isdelete: false, istrash: false }\n\nexport const errorRecordNotFoundAlreadyDeleted = `Record not found or already deleted`\nexport const errorRecordNotFoundAfterUpdated = `Record not found after update`\nexport const errorRecordNotFoundAfterTrashed = `Record not found after trash`\nexport const errorRecordNotFoundAfterRemoved = `Record not found after remove`"]}
@@ -178,7 +178,7 @@ const AccessControlRoleService = (props) => {
178
178
  const listAccessControlRoles = async ({ limit, offset, filters = [], sortfield, sortorder }) => {
179
179
  let data = [];
180
180
  let sqlSelect = [
181
- `COUNT(role.*) OVER() as filtered_count`,
181
+ `COUNT(*) OVER() as filtered_count`,
182
182
  (0, lib_1.buildSqlSelect)(``, mainSqlSelect),
183
183
  (0, lib_1.buildSqlSelect)(``, rolePolicySqlSelect),
184
184
  (0, lib_1.buildSqlSelect)(``, defaultSqlSelect)
@@ -1 +1 @@
1
- {"version":3,"file":"AccessControlRoleService.js","sourceRoot":"","sources":["../../../src/services/access_control/AccessControlRoleService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport {\n ModelUserFields,\n AccessControlRoleModel,\n ModelAccessControlRoleFields,\n AccessControlRolePolicyModel,\n ModelAccessControlRolePolicyFields,\n} from \"@/models\";\n\nimport { UserType, AccessControlService, AccessControlListOptionsProps } from \"@/services\"\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps, getAllPermissionKeysByPolicies } from \"@/utils\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nexport type AccessControlRoleUserType = UserType\n\nexport type AccessControlRoleServiceProps = DefaultServiceProps & {};\n\nexport type AccessControlRoleGetProps = Omit<QueryGet, \"datatypes\"> & {\n id: number,\n};\n\nexport type AccessControlRoleListProps = Omit<QueryList, \"datatypes\"> & {\n};\n\nexport type AccessControlRoleRemoveProps = {\n roleIds: BigInt[]\n};\n\nexport type AccessControlRole = {\n name: string;\n description: string;\n userType: AccessControlRoleUserType;\n permissionKeys: string[]\n status: boolean\n}\n\nexport type AccessControlRoleCreateProps = {\n data: AccessControlRole\n}\n\nexport type AccessControlRoleUpdateProps = {\n roleId: number\n data: Omit<AccessControlRole, \"userType\">\n}\n\nconst getCreatePayload = (data: AccessControlRoleCreateProps[\"data\"]) => {\n\n return {\n [`${ModelAccessControlRoleFields.name}`]: data.name,\n [`${ModelAccessControlRoleFields.description}`]: data.description,\n [`${ModelAccessControlRoleFields.user_type}`]: data.userType,\n [`${ModelAccessControlRoleFields.status}`]: Boolean(data.status)\n }\n\n}\n\nconst getUpdatePayload = (data: AccessControlRoleUpdateProps[\"data\"]) => {\n\n return {\n [`${ModelAccessControlRoleFields.name}`]: data.name,\n [`${ModelAccessControlRoleFields.description}`]: data.description,\n // [`${ModelAccessControlRoleFields.user_type}`]: data.userType,\n [`${ModelAccessControlRoleFields.status}`]: Boolean(data.status)\n }\n\n}\n\nlet mainSqlSelect = {\n [`role.${ModelAccessControlRoleFields.access_control_role_id}`]: \"access_control_role_id\",\n [`role.${ModelAccessControlRoleFields.name}`]: \"name\",\n [`role.${ModelAccessControlRoleFields.description}`]: \"description\",\n [`role.${ModelAccessControlRoleFields.user_type}`]: \"user_type\",\n [`role.${ModelAccessControlRoleFields.status}`]: \"status\",\n}\n\nlet rolePolicySqlSelect = {\n [`COALESCE(\n JSON_AGG(\n DISTINCT ${ModelAccessControlRolePolicyFields.permission_key}\n ) FILTER (\n WHERE rolepol.access_control_role_policy_id IS NOT NULL \n AND rolepol.isdelete = false \n AND rolepol.istrash = false\n ),\n '[]'\n )`]: \"permission_keys\"\n // [`COALESCE(\n // STRING_AGG(DISTINCT rolepol.${ModelAccessControlRolePolicyFields.permission_key}::text, ', '),\n // ''\n // )`]: \"permission_keys\",\n // [`rolepol.${ModelAccessControlRolePolicyFields.permission_key}`]: \"permission_key\",\n // [`rolepol.${ModelAccessControlRolePolicyFields.role_policy_id}`]: \"role_policy_id\",\n}\n\nlet defaultSqlSelect = {\n [`role.${ModelAccessControlRoleFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`role.${ModelAccessControlRoleFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`role.${ModelAccessControlRoleFields.isdelete}`]: \"isdelete\",\n [`role.${ModelAccessControlRoleFields.istrash}`]: \"istrash\",\n [`role.${ModelAccessControlRoleFields.accountid}`]: \"accountid\",\n}\n\nexport const AccessControlRoleService = (props: AccessControlRoleServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const accessControlRoleModel = AccessControlRoleModel({ ...rest })\n const accessControlRolePolicyModel = AccessControlRolePolicyModel({ ...rest })\n const accessControlService = AccessControlService({ ...rest })\n\n const getUserTypeAllPermissionKeys = (userType: UserType) => {\n\n let payload: AccessControlListOptionsProps = {\n userType\n }\n\n const { options: aclPolicyOptions } = accessControlService.listAccessControlPolicyOptions(payload)\n\n const permissionKeys = getAllPermissionKeysByPolicies(aclPolicyOptions.scopes)\n\n return permissionKeys\n\n }\n\n const validatePermissionKeys = (userType: UserType, permissionKeys: string[]) => {\n\n const allowedPermissionKeys = getUserTypeAllPermissionKeys(userType)\n\n // Get invalid values\n const invalidValues = permissionKeys.filter(item => !allowedPermissionKeys.includes(item));\n\n if (invalidValues.length > 0) {\n throwError(`Invalid permission keys: ${invalidValues.join(\", \")}`)\n }\n\n return permissionKeys\n\n }\n\n const validateUniquePermissionKeys = (arr: (string | number)[]): boolean => {\n\n const seen = new Set<string | number>();\n const duplicates = new Set<string | number>();\n\n for (const item of arr) {\n if (seen.has(item)) {\n duplicates.add(item);\n } else {\n seen.add(item);\n }\n }\n\n if (duplicates.size > 0) throwError(`Duplicate permission keys: ${Array.from(duplicates).join(\", \")}`)\n\n return true\n }\n\n const createAccessControlRole = async ({ data }: AccessControlRoleCreateProps) => {\n\n const requestUserType = data.userType\n const requestPermissionKeys = data.permissionKeys\n\n // validate duplicate permission keys\n validateUniquePermissionKeys(requestPermissionKeys)\n\n // validate the request permission keys with allowed keys\n validatePermissionKeys(requestUserType, requestPermissionKeys)\n\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create role payload: ${JSON.stringify(_data)}`);\n }\n\n // create role record\n let response = await accessControlRoleModel.create({ data: _data })\n\n const roleId = Number(response?.access_control_role_id ?? 0)\n\n const rolePolicyData = requestPermissionKeys.map(i => ({\n [`${ModelAccessControlRolePolicyFields.permission_key}`]: i,\n [`${ModelAccessControlRolePolicyFields.access_control_role_id}`]: roleId,\n }))\n\n // create role policies records\n await accessControlRolePolicyModel.createMany({\n dataList: rolePolicyData\n })\n\n return await getAccessControlRole({ id: roleId })\n }\n\n const updateAccessControlRole = async ({ roleId, data }: AccessControlRoleUpdateProps) => {\n\n const requestPermissionKeys = data.permissionKeys ?? []\n\n // validate duplicate permission keys\n validateUniquePermissionKeys(requestPermissionKeys)\n\n // get the role info\n const role = await getAccessControlRole({ id: Number(roleId) })\n\n const roleUserType = role?.user_type ?? \"\"\n const rolePermissionKeys = role?.permission_keys ?? []\n\n // console.log('rolePermissionKeys', rolePermissionKeys)\n if (roleUserType === \"\") throwError(`Invalid role user type, roleId: ${roleId}`)\n\n // validate the request permission keys with allowed keys\n validatePermissionKeys(roleUserType, requestPermissionKeys)\n\n // Keys to remove: exist in role but NOT in request\n const needRemoveKeys = rolePermissionKeys.filter((key: any) => !requestPermissionKeys.includes(key));\n // Keys to create: exist in request but NOT in role\n const needCreateKeys = requestPermissionKeys.filter(key => !rolePermissionKeys.includes(key));\n\n // console.log('needCreateKeys', needCreateKeys)\n // console.log('needRemoveKeys', needRemoveKeys)\n\n const _data = getUpdatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid update role payload: ${JSON.stringify(_data)}`);\n }\n\n // update role record\n await accessControlRoleModel.update({ where: { [`${ModelAccessControlRoleFields.access_control_role_id}`]: roleId }, data: _data })\n\n const createRolePolicyData = needCreateKeys.map(i => ({\n [`${ModelAccessControlRolePolicyFields.permission_key}`]: i,\n [`${ModelAccessControlRolePolicyFields.access_control_role_id}`]: roleId,\n }))\n\n // remove role policies records\n if (needRemoveKeys.length > 0) {\n await accessControlRolePolicyModel.remove({\n where: {\n [`${ModelAccessControlRolePolicyFields.permission_key}`]: {\n in: needRemoveKeys\n },\n [`${ModelAccessControlRolePolicyFields.access_control_role_id}`]: roleId\n }\n })\n }\n\n // create role policies records\n if (createRolePolicyData.length > 0) {\n await accessControlRolePolicyModel.createMany({\n dataList: createRolePolicyData\n })\n }\n\n return await getAccessControlRole({ id: Number(roleId) })\n }\n\n const getAccessControlRole = async ({ id }: AccessControlRoleGetProps) => {\n\n let { data } = await listAccessControlRoles({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelAccessControlRoleFields.access_control_role_id}`, operator: \"=\", value: id }],\n sortfield: `${ModelAccessControlRoleFields.access_control_role_id}`,\n sortorder: \"ASC\",\n })\n\n return data[0] ?? null;\n\n };\n\n const listAccessControlRoles = async ({ limit, offset, filters = [], sortfield, sortorder }: AccessControlRoleListProps) => {\n\n let data = []\n\n let sqlSelect = [\n `COUNT(role.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, rolePolicySqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"role\", \"access_control_role_policies\", \"rolepol\", [\"role.access_control_role_id = rolepol.access_control_role_id\", \"rolepol.isdelete = false\", \"rolepol.istrash = false\"]),\n buildSqlRelation(\"left\", \"role\", \"users\", \"creator\", [\"role.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"role\", \"users\", \"updater\", [\"role.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n // ...Object.keys(rolePolicySqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...rolePolicySqlSelect,\n ...defaultSqlSelect\n }\n\n let sqlWhere = [\n `role.isdelete = false`,\n `role.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"access_control_roles\",\n mainAlias: \"role\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n data = await accessControlRoleModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n const removeAccessControlRoles = async ({ roleIds }: AccessControlRoleRemoveProps) => {\n\n if (!roleIds.length) throwError('roleIds is required');\n\n const response = await accessControlRoleModel.remove({ where: { [`${ModelAccessControlRoleFields.access_control_role_id}`]: { in: roleIds } } });\n\n // need to remove the role policies\n accessControlRolePolicyModel.remove({\n where: {\n [`${ModelAccessControlRolePolicyFields.access_control_role_id}`]: {\n in: roleIds\n }\n }\n })\n\n return response\n };\n\n return {\n getAccessControlRole,\n createAccessControlRole,\n updateAccessControlRole,\n removeAccessControlRoles,\n listAccessControlRoles\n }\n\n}\n\n"]}
1
+ {"version":3,"file":"AccessControlRoleService.js","sourceRoot":"","sources":["../../../src/services/access_control/AccessControlRoleService.ts"],"names":[],"mappings":";;;AAAA,mCAA+C;AAE/C,qCAMkB;AAElB,yCAA0F;AAI1F,mCAA8E;AAE9E,+BAAiI;AAkCjI,MAAM,gBAAgB,GAAG,CAAC,IAA0C,EAAE,EAAE;IAEpE,OAAO;QACH,CAAC,GAAG,qCAA4B,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI;QACnD,CAAC,GAAG,qCAA4B,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW;QACjE,CAAC,GAAG,qCAA4B,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ;QAC5D,CAAC,GAAG,qCAA4B,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;KACnE,CAAA;AAEL,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,IAA0C,EAAE,EAAE;IAEpE,OAAO;QACH,CAAC,GAAG,qCAA4B,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI;QACnD,CAAC,GAAG,qCAA4B,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW;QACjE,gEAAgE;QAChE,CAAC,GAAG,qCAA4B,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;KACnE,CAAA;AAEL,CAAC,CAAA;AAED,IAAI,aAAa,GAAG;IAChB,CAAC,QAAQ,qCAA4B,CAAC,sBAAsB,EAAE,CAAC,EAAE,wBAAwB;IACzF,CAAC,QAAQ,qCAA4B,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM;IACrD,CAAC,QAAQ,qCAA4B,CAAC,WAAW,EAAE,CAAC,EAAE,aAAa;IACnE,CAAC,QAAQ,qCAA4B,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;IAC/D,CAAC,QAAQ,qCAA4B,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ;CAC5D,CAAA;AAED,IAAI,mBAAmB,GAAG;IACtB,CAAC;;uBAEkB,2CAAkC,CAAC,cAAc;;;;;;;MAOlE,CAAC,EAAE,iBAAiB;IACtB,cAAc;IACd,yGAAyG;IACzG,aAAa;IACb,8BAA8B;IAC9B,sFAAsF;IACtF,sFAAsF;CACzF,CAAA;AAED,IAAI,gBAAgB,GAAG;IACnB,CAAC,QAAQ,qCAA4B,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IACzE,CAAC,WAAW,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAC/D,CAAC,QAAQ,qCAA4B,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IACzE,CAAC,WAAW,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAC/D,CAAC,QAAQ,qCAA4B,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU;IAC7D,CAAC,QAAQ,qCAA4B,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS;IAC3D,CAAC,QAAQ,qCAA4B,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;CAClE,CAAA;AAEM,MAAM,wBAAwB,GAAG,CAAC,KAAoC,EAAE,EAAE;IAE7E,MAAM,EACF,GAAG,IAAI,EACV,GAAG,KAAK,CAAA;IAET,MAAM,sBAAsB,GAAG,IAAA,+BAAsB,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAClE,MAAM,4BAA4B,GAAG,IAAA,qCAA4B,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAC9E,MAAM,oBAAoB,GAAG,IAAA,+BAAoB,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAE9D,MAAM,4BAA4B,GAAG,CAAC,QAAkB,EAAE,EAAE;QAExD,IAAI,OAAO,GAAkC;YACzC,QAAQ;SACX,CAAA;QAED,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,oBAAoB,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAA;QAElG,MAAM,cAAc,GAAG,IAAA,sCAA8B,EAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;QAE9E,OAAO,cAAc,CAAA;IAEzB,CAAC,CAAA;IAED,MAAM,sBAAsB,GAAG,CAAC,QAAkB,EAAE,cAAwB,EAAE,EAAE;QAE5E,MAAM,qBAAqB,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAA;QAEpE,qBAAqB;QACrB,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAE3F,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAA,kBAAU,EAAC,4BAA4B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACtE,CAAC;QAED,OAAO,cAAc,CAAA;IAEzB,CAAC,CAAA;IAED,MAAM,4BAA4B,GAAG,CAAC,GAAwB,EAAW,EAAE;QAEvE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAmB,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;QAE9C,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACL,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC;YAAE,IAAA,kBAAU,EAAC,8BAA8B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEtG,OAAO,IAAI,CAAA;IACf,CAAC,CAAA;IAED,MAAM,uBAAuB,GAAG,KAAK,EAAE,EAAE,IAAI,EAAgC,EAAE,EAAE;QAE7E,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAA;QACrC,MAAM,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAA;QAEjD,qCAAqC;QACrC,4BAA4B,CAAC,qBAAqB,CAAC,CAAA;QAEnD,yDAAyD;QACzD,sBAAsB,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAA;QAE9D,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAEpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,qBAAqB;QACrB,IAAI,QAAQ,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAEnE,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,sBAAsB,IAAI,CAAC,CAAC,CAAA;QAE5D,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACnD,CAAC,GAAG,2CAAkC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;YAC3D,CAAC,GAAG,2CAAkC,CAAC,sBAAsB,EAAE,CAAC,EAAE,MAAM;SAC3E,CAAC,CAAC,CAAA;QAEH,+BAA+B;QAC/B,MAAM,4BAA4B,CAAC,UAAU,CAAC;YAC1C,QAAQ,EAAE,cAAc;SAC3B,CAAC,CAAA;QAEF,OAAO,MAAM,oBAAoB,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IACrD,CAAC,CAAA;IAED,MAAM,uBAAuB,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAgC,EAAE,EAAE;QAErF,MAAM,qBAAqB,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAA;QAEvD,qCAAqC;QACrC,4BAA4B,CAAC,qBAAqB,CAAC,CAAA;QAEnD,oBAAoB;QACpB,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAE/D,MAAM,YAAY,GAAG,IAAI,EAAE,SAAS,IAAI,EAAE,CAAA;QAC1C,MAAM,kBAAkB,GAAG,IAAI,EAAE,eAAe,IAAI,EAAE,CAAA;QAEtD,wDAAwD;QACxD,IAAI,YAAY,KAAK,EAAE;YAAE,IAAA,kBAAU,EAAC,mCAAmC,MAAM,EAAE,CAAC,CAAA;QAEhF,yDAAyD;QACzD,sBAAsB,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAA;QAE3D,mDAAmD;QACnD,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACrG,mDAAmD;QACnD,MAAM,cAAc,GAAG,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAE9F,gDAAgD;QAChD,gDAAgD;QAEhD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAEpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,qBAAqB;QACrB,MAAM,sBAAsB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,qCAA4B,CAAC,sBAAsB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAEnI,MAAM,oBAAoB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClD,CAAC,GAAG,2CAAkC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;YAC3D,CAAC,GAAG,2CAAkC,CAAC,sBAAsB,EAAE,CAAC,EAAE,MAAM;SAC3E,CAAC,CAAC,CAAA;QAEH,+BAA+B;QAC/B,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,4BAA4B,CAAC,MAAM,CAAC;gBACtC,KAAK,EAAE;oBACH,CAAC,GAAG,2CAAkC,CAAC,cAAc,EAAE,CAAC,EAAE;wBACtD,EAAE,EAAE,cAAc;qBACrB;oBACD,CAAC,GAAG,2CAAkC,CAAC,sBAAsB,EAAE,CAAC,EAAE,MAAM;iBAC3E;aACJ,CAAC,CAAA;QACN,CAAC;QAED,+BAA+B;QAC/B,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,4BAA4B,CAAC,UAAU,CAAC;gBAC1C,QAAQ,EAAE,oBAAoB;aACjC,CAAC,CAAA;QACN,CAAC;QAED,OAAO,MAAM,oBAAoB,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC7D,CAAC,CAAA;IAED,MAAM,oBAAoB,GAAG,KAAK,EAAE,EAAE,EAAE,EAA6B,EAAE,EAAE;QAErE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,sBAAsB,CAAC;YACxC,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,qCAA4B,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACxG,SAAS,EAAE,GAAG,qCAA4B,CAAC,sBAAsB,EAAE;YACnE,SAAS,EAAE,KAAK;SACnB,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAE3B,CAAC,CAAC;IAEF,MAAM,sBAAsB,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAA8B,EAAE,EAAE;QAEvH,IAAI,IAAI,GAAG,EAAE,CAAA;QAEb,IAAI,SAAS,GAAG;YACZ,mCAAmC;YACnC,IAAA,oBAAc,EAAC,EAAE,EAAE,aAAa,CAAC;YACjC,IAAA,oBAAc,EAAC,EAAE,EAAE,mBAAmB,CAAC;YACvC,IAAA,oBAAc,EAAC,EAAE,EAAE,gBAAgB,CAAC;SACvC,CAAA;QAED,IAAI,WAAW,GAAG;YACd,IAAA,sBAAgB,EAAC,MAAM,EAAE,MAAM,EAAE,8BAA8B,EAAE,SAAS,EAAE,CAAC,8DAA8D,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;YACpM,IAAA,sBAAgB,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,qCAAqC,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;YACpJ,IAAA,sBAAgB,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,qCAAqC,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;SACvJ,CAAA;QAED,IAAI,UAAU,GAAa;YACvB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;YAC7B,uCAAuC;YACvC,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;SACnC,CAAA;QAED,IAAI,aAAa,GAAG;YAChB,GAAG,aAAa;YAChB,GAAG,mBAAmB;YACtB,GAAG,gBAAgB;SACtB,CAAA;QAED,IAAI,QAAQ,GAAG;YACX,uBAAuB;YACvB,sBAAsB;YACtB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAA,mBAAa,EAAC,OAAO,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAA;QAED,IAAI,UAAU,GAAG,IAAA,qBAAe,EAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QACtD,IAAI,cAAc,GAAG,IAAA,yBAAmB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAEvD,MAAM,MAAM,GAAG,IAAA,uBAAiB,EAAC;YAC7B,SAAS,EAAE,sBAAsB;YACjC,SAAS,EAAE,MAAM;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS;YACT,WAAW;YACX,QAAQ;YACR,UAAU;YACV,UAAU;YACV,cAAc;SACjB,CAAC,CAAA;QAEF,IAAI,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAE/C,MAAM,QAAQ,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;YACrD,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1D,CAAA;QAED,OAAO,QAAQ,CAAA;IAEnB,CAAC,CAAC;IAEF,MAAM,wBAAwB,GAAG,KAAK,EAAE,EAAE,OAAO,EAAgC,EAAE,EAAE;QAEjF,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,IAAA,kBAAU,EAAC,qBAAqB,CAAC,CAAC;QAEvD,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,qCAA4B,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAEjJ,mCAAmC;QACnC,4BAA4B,CAAC,MAAM,CAAC;YAChC,KAAK,EAAE;gBACH,CAAC,GAAG,2CAAkC,CAAC,sBAAsB,EAAE,CAAC,EAAE;oBAC9D,EAAE,EAAE,OAAO;iBACd;aACJ;SACJ,CAAC,CAAA;QAEF,OAAO,QAAQ,CAAA;IACnB,CAAC,CAAC;IAEF,OAAO;QACH,oBAAoB;QACpB,uBAAuB;QACvB,uBAAuB;QACvB,wBAAwB;QACxB,sBAAsB;KACzB,CAAA;AAEL,CAAC,CAAA;AAhQY,QAAA,wBAAwB,4BAgQpC","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport {\n ModelUserFields,\n AccessControlRoleModel,\n ModelAccessControlRoleFields,\n AccessControlRolePolicyModel,\n ModelAccessControlRolePolicyFields,\n} from \"@/models\";\n\nimport { UserType, AccessControlService, AccessControlListOptionsProps } from \"@/services\"\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps, getAllPermissionKeysByPolicies } from \"@/utils\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nexport type AccessControlRoleUserType = UserType\n\nexport type AccessControlRoleServiceProps = DefaultServiceProps & {};\n\nexport type AccessControlRoleGetProps = Omit<QueryGet, \"datatypes\"> & {\n id: number,\n};\n\nexport type AccessControlRoleListProps = Omit<QueryList, \"datatypes\"> & {\n};\n\nexport type AccessControlRoleRemoveProps = {\n roleIds: BigInt[]\n};\n\nexport type AccessControlRole = {\n name: string;\n description: string;\n userType: AccessControlRoleUserType;\n permissionKeys: string[]\n status: boolean\n}\n\nexport type AccessControlRoleCreateProps = {\n data: AccessControlRole\n}\n\nexport type AccessControlRoleUpdateProps = {\n roleId: number\n data: Omit<AccessControlRole, \"userType\">\n}\n\nconst getCreatePayload = (data: AccessControlRoleCreateProps[\"data\"]) => {\n\n return {\n [`${ModelAccessControlRoleFields.name}`]: data.name,\n [`${ModelAccessControlRoleFields.description}`]: data.description,\n [`${ModelAccessControlRoleFields.user_type}`]: data.userType,\n [`${ModelAccessControlRoleFields.status}`]: Boolean(data.status)\n }\n\n}\n\nconst getUpdatePayload = (data: AccessControlRoleUpdateProps[\"data\"]) => {\n\n return {\n [`${ModelAccessControlRoleFields.name}`]: data.name,\n [`${ModelAccessControlRoleFields.description}`]: data.description,\n // [`${ModelAccessControlRoleFields.user_type}`]: data.userType,\n [`${ModelAccessControlRoleFields.status}`]: Boolean(data.status)\n }\n\n}\n\nlet mainSqlSelect = {\n [`role.${ModelAccessControlRoleFields.access_control_role_id}`]: \"access_control_role_id\",\n [`role.${ModelAccessControlRoleFields.name}`]: \"name\",\n [`role.${ModelAccessControlRoleFields.description}`]: \"description\",\n [`role.${ModelAccessControlRoleFields.user_type}`]: \"user_type\",\n [`role.${ModelAccessControlRoleFields.status}`]: \"status\",\n}\n\nlet rolePolicySqlSelect = {\n [`COALESCE(\n JSON_AGG(\n DISTINCT ${ModelAccessControlRolePolicyFields.permission_key}\n ) FILTER (\n WHERE rolepol.access_control_role_policy_id IS NOT NULL \n AND rolepol.isdelete = false \n AND rolepol.istrash = false\n ),\n '[]'\n )`]: \"permission_keys\"\n // [`COALESCE(\n // STRING_AGG(DISTINCT rolepol.${ModelAccessControlRolePolicyFields.permission_key}::text, ', '),\n // ''\n // )`]: \"permission_keys\",\n // [`rolepol.${ModelAccessControlRolePolicyFields.permission_key}`]: \"permission_key\",\n // [`rolepol.${ModelAccessControlRolePolicyFields.role_policy_id}`]: \"role_policy_id\",\n}\n\nlet defaultSqlSelect = {\n [`role.${ModelAccessControlRoleFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`role.${ModelAccessControlRoleFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`role.${ModelAccessControlRoleFields.isdelete}`]: \"isdelete\",\n [`role.${ModelAccessControlRoleFields.istrash}`]: \"istrash\",\n [`role.${ModelAccessControlRoleFields.accountid}`]: \"accountid\",\n}\n\nexport const AccessControlRoleService = (props: AccessControlRoleServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const accessControlRoleModel = AccessControlRoleModel({ ...rest })\n const accessControlRolePolicyModel = AccessControlRolePolicyModel({ ...rest })\n const accessControlService = AccessControlService({ ...rest })\n\n const getUserTypeAllPermissionKeys = (userType: UserType) => {\n\n let payload: AccessControlListOptionsProps = {\n userType\n }\n\n const { options: aclPolicyOptions } = accessControlService.listAccessControlPolicyOptions(payload)\n\n const permissionKeys = getAllPermissionKeysByPolicies(aclPolicyOptions.scopes)\n\n return permissionKeys\n\n }\n\n const validatePermissionKeys = (userType: UserType, permissionKeys: string[]) => {\n\n const allowedPermissionKeys = getUserTypeAllPermissionKeys(userType)\n\n // Get invalid values\n const invalidValues = permissionKeys.filter(item => !allowedPermissionKeys.includes(item));\n\n if (invalidValues.length > 0) {\n throwError(`Invalid permission keys: ${invalidValues.join(\", \")}`)\n }\n\n return permissionKeys\n\n }\n\n const validateUniquePermissionKeys = (arr: (string | number)[]): boolean => {\n\n const seen = new Set<string | number>();\n const duplicates = new Set<string | number>();\n\n for (const item of arr) {\n if (seen.has(item)) {\n duplicates.add(item);\n } else {\n seen.add(item);\n }\n }\n\n if (duplicates.size > 0) throwError(`Duplicate permission keys: ${Array.from(duplicates).join(\", \")}`)\n\n return true\n }\n\n const createAccessControlRole = async ({ data }: AccessControlRoleCreateProps) => {\n\n const requestUserType = data.userType\n const requestPermissionKeys = data.permissionKeys\n\n // validate duplicate permission keys\n validateUniquePermissionKeys(requestPermissionKeys)\n\n // validate the request permission keys with allowed keys\n validatePermissionKeys(requestUserType, requestPermissionKeys)\n\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create role payload: ${JSON.stringify(_data)}`);\n }\n\n // create role record\n let response = await accessControlRoleModel.create({ data: _data })\n\n const roleId = Number(response?.access_control_role_id ?? 0)\n\n const rolePolicyData = requestPermissionKeys.map(i => ({\n [`${ModelAccessControlRolePolicyFields.permission_key}`]: i,\n [`${ModelAccessControlRolePolicyFields.access_control_role_id}`]: roleId,\n }))\n\n // create role policies records\n await accessControlRolePolicyModel.createMany({\n dataList: rolePolicyData\n })\n\n return await getAccessControlRole({ id: roleId })\n }\n\n const updateAccessControlRole = async ({ roleId, data }: AccessControlRoleUpdateProps) => {\n\n const requestPermissionKeys = data.permissionKeys ?? []\n\n // validate duplicate permission keys\n validateUniquePermissionKeys(requestPermissionKeys)\n\n // get the role info\n const role = await getAccessControlRole({ id: Number(roleId) })\n\n const roleUserType = role?.user_type ?? \"\"\n const rolePermissionKeys = role?.permission_keys ?? []\n\n // console.log('rolePermissionKeys', rolePermissionKeys)\n if (roleUserType === \"\") throwError(`Invalid role user type, roleId: ${roleId}`)\n\n // validate the request permission keys with allowed keys\n validatePermissionKeys(roleUserType, requestPermissionKeys)\n\n // Keys to remove: exist in role but NOT in request\n const needRemoveKeys = rolePermissionKeys.filter((key: any) => !requestPermissionKeys.includes(key));\n // Keys to create: exist in request but NOT in role\n const needCreateKeys = requestPermissionKeys.filter(key => !rolePermissionKeys.includes(key));\n\n // console.log('needCreateKeys', needCreateKeys)\n // console.log('needRemoveKeys', needRemoveKeys)\n\n const _data = getUpdatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid update role payload: ${JSON.stringify(_data)}`);\n }\n\n // update role record\n await accessControlRoleModel.update({ where: { [`${ModelAccessControlRoleFields.access_control_role_id}`]: roleId }, data: _data })\n\n const createRolePolicyData = needCreateKeys.map(i => ({\n [`${ModelAccessControlRolePolicyFields.permission_key}`]: i,\n [`${ModelAccessControlRolePolicyFields.access_control_role_id}`]: roleId,\n }))\n\n // remove role policies records\n if (needRemoveKeys.length > 0) {\n await accessControlRolePolicyModel.remove({\n where: {\n [`${ModelAccessControlRolePolicyFields.permission_key}`]: {\n in: needRemoveKeys\n },\n [`${ModelAccessControlRolePolicyFields.access_control_role_id}`]: roleId\n }\n })\n }\n\n // create role policies records\n if (createRolePolicyData.length > 0) {\n await accessControlRolePolicyModel.createMany({\n dataList: createRolePolicyData\n })\n }\n\n return await getAccessControlRole({ id: Number(roleId) })\n }\n\n const getAccessControlRole = async ({ id }: AccessControlRoleGetProps) => {\n\n let { data } = await listAccessControlRoles({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelAccessControlRoleFields.access_control_role_id}`, operator: \"=\", value: id }],\n sortfield: `${ModelAccessControlRoleFields.access_control_role_id}`,\n sortorder: \"ASC\",\n })\n\n return data[0] ?? null;\n\n };\n\n const listAccessControlRoles = async ({ limit, offset, filters = [], sortfield, sortorder }: AccessControlRoleListProps) => {\n\n let data = []\n\n let sqlSelect = [\n `COUNT(*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, rolePolicySqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"role\", \"access_control_role_policies\", \"rolepol\", [\"role.access_control_role_id = rolepol.access_control_role_id\", \"rolepol.isdelete = false\", \"rolepol.istrash = false\"]),\n buildSqlRelation(\"left\", \"role\", \"users\", \"creator\", [\"role.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"role\", \"users\", \"updater\", [\"role.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n // ...Object.keys(rolePolicySqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...rolePolicySqlSelect,\n ...defaultSqlSelect\n }\n\n let sqlWhere = [\n `role.isdelete = false`,\n `role.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"access_control_roles\",\n mainAlias: \"role\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n data = await accessControlRoleModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n const removeAccessControlRoles = async ({ roleIds }: AccessControlRoleRemoveProps) => {\n\n if (!roleIds.length) throwError('roleIds is required');\n\n const response = await accessControlRoleModel.remove({ where: { [`${ModelAccessControlRoleFields.access_control_role_id}`]: { in: roleIds } } });\n\n // need to remove the role policies\n accessControlRolePolicyModel.remove({\n where: {\n [`${ModelAccessControlRolePolicyFields.access_control_role_id}`]: {\n in: roleIds\n }\n }\n })\n\n return response\n };\n\n return {\n getAccessControlRole,\n createAccessControlRole,\n updateAccessControlRole,\n removeAccessControlRoles,\n listAccessControlRoles\n }\n\n}\n\n"]}
@@ -139,7 +139,7 @@ const AccessKeyService = (props) => {
139
139
  const listAccessKeys = async ({ limit, offset, filters = [], sortfield, sortorder, datatypes = [], skipFilterAccountId = false, revealEncryption = false }) => {
140
140
  let data = [];
141
141
  let sqlSelect = [
142
- `COUNT(ak.*) OVER() as filtered_count`,
142
+ `COUNT(*) OVER() as filtered_count`,
143
143
  (0, lib_1.buildSqlSelect)(``, mainSqlSelect),
144
144
  (0, lib_1.buildSqlSelect)(``, accountSqlSelect),
145
145
  ...(revealEncryption ? [(0, lib_1.buildSqlSelect)(``, mainEncryptedSqlSelect)] : []),
@@ -1 +1 @@
1
- {"version":3,"file":"AccessKeyService.js","sourceRoot":"","sources":["../../../src/services/access_key/AccessKeyService.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultServiceProps, encryptAccessKeySecret, throwError } from \"@/utils\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport { getCoreConfiguration, generateAccessKeyId, generateAccessKeySecret, hashAccessKeySecret } from \"@/utils\"\nimport { ModelUserFields, AccessKeyModel, ModelAccessKeyFields, ModelAccountFields } from \"@/models\";\nimport { UserService } from \"@/services\"\n\n// import { config } from \"@/configs\";\n\nexport const accessKeyUserTypes = {\n operator: \"operator\",\n administrator: \"administrator\",\n // worker: \"worker\",\n // customer: \"customer\",\n} as const\n\nexport const allowedAccessUserTypes: AccessKeyUserType[] = [\n \"administrator\", \"operator\"\n]\n\nexport type AccessKeyUserType = typeof accessKeyUserTypes[keyof typeof accessKeyUserTypes]\n\nexport const accessKeyStatus = {\n active: \"active\",\n revoked: \"revoked\",\n} as const\n\nexport type AccessKeyStatus = typeof accessKeyUserTypes[keyof typeof accessKeyUserTypes]\n\nexport type AccessKeyServiceProps = DefaultServiceProps & {\n accessKeyUserType: AccessKeyUserType,\n};\n\nexport type AccessKeyGetProps = QueryGet & {\n id: number,\n skipFilterAccountId: boolean\n revealEncryption: boolean\n};\n\nexport type AccessKeyListProps = QueryList & {\n skipFilterAccountId: boolean\n revealEncryption: boolean\n};\n\nexport type AccessKeyCreateProps = {\n data: {\n userId: number,\n isDefault: boolean\n overrideAccountId?: number\n }\n}\n\nexport type AccessKeyRevokeProps = {\n accessKeyIds: BigInt[]\n};\n\nconst getCreatePayload = (\n data: AccessKeyCreateProps[\"data\"],\n accessKeyUserType: AccessKeyUserType,\n keyId: string,\n encryptedSecret: string,\n) => {\n\n return {\n [`${ModelAccessKeyFields.access_key_status}`]: accessKeyStatus.active,\n [`${ModelAccessKeyFields.key_id}`]: keyId,\n [`${ModelAccessKeyFields.key_secret_encrypted}`]: encryptedSecret,\n [`${ModelAccessKeyFields.user_id}`]: Number(data.userId),\n [`${ModelAccessKeyFields.user_type}`]: accessKeyUserType,\n [`${ModelAccessKeyFields.is_default}`]: Boolean(data.isDefault ?? false),\n }\n\n}\n\nlet mainSqlSelect = {\n [`ak.${ModelAccessKeyFields.access_key_id}`]: \"access_key_id\",\n [`ak.${ModelAccessKeyFields.access_key_status}`]: \"access_key_status\",\n [`ak.${ModelAccessKeyFields.user_id}`]: \"user_id\",\n [`ak.${ModelAccessKeyFields.user_type}`]: \"user_type\",\n [`ak.${ModelAccessKeyFields.key_id}`]: \"key_id\",\n [`ak.${ModelAccessKeyFields.is_default}`]: \"is_default\",\n}\n\nlet mainEncryptedSqlSelect = {\n [`ak.${ModelAccessKeyFields.key_secret_encrypted}`]: \"key_secret_encrypted\",\n}\n\nlet accountSqlSelect = {\n [`acc.${ModelAccountFields.account_code}`]: \"account_code\",\n [`acc.${ModelAccountFields.name}`]: \"account_name\",\n [`acc.${ModelAccountFields.status}`]: \"account_status\"\n}\n\nlet defaultSqlSelect = {\n [`ak.${ModelAccessKeyFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`ak.${ModelAccessKeyFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`ak.${ModelAccessKeyFields.isdelete}`]: \"isdelete\",\n [`ak.${ModelAccessKeyFields.istrash}`]: \"istrash\",\n [`ak.${ModelAccessKeyFields.accountid}`]: \"accountid\",\n}\n\nexport const AccessKeyService = (props: AccessKeyServiceProps) => {\n\n const {\n accessKeyUserType = \"administrator\",\n ...rest\n } = props\n\n const accessKeyModel = AccessKeyModel({ ...rest })\n\n const createAccessKey = async ({ data }: AccessKeyCreateProps) => {\n\n if (allowedAccessUserTypes.includes(accessKeyUserType) === false) {\n throw new Error(`User type is not allowed: ${accessKeyUserType}`);\n }\n\n // retrive core configuration\n const coreConfig = getCoreConfiguration()\n\n // const accessKeyEncryptionSecretKey = config.ACCESS_KEY_ENCRYPTION_SECRET_KEY\n const accessKeyEncryptionSecretKey = coreConfig.accessKeyEncryptionSecretKey\n\n if (!accessKeyEncryptionSecretKey) {\n throw new Error(`ACCESS_KEY_ENCRYPTION_SECRET_KEY is not set`);\n }\n\n const encryptionKey = Buffer.from(accessKeyEncryptionSecretKey!, \"base64\").subarray(0, 32);\n\n const createAccessKeyModel = AccessKeyModel({\n ...rest,\n ...(data?.overrideAccountId ? { accountId: data.overrideAccountId } : {})\n // from the create account using operator token\n })\n const userService = UserService({ ...rest, userType: accessKeyUserType })\n\n // const isOperator = Boolean(rest.isOperator)\n\n // check user id\n const user = await userService.getUser({\n id: Number(data.userId),\n datatypes: [],\n skipFilterAccountId: true\n })\n\n // console.log('data.userId', user)\n\n if (accessKeyUserType === \"administrator\") { // administrator\n\n if (!user?.administrator_id) {\n throw new Error(`User Id is not user administrator: ${data.userId}`);\n }\n\n if (!user?.is_owner) {\n throw new Error(`User Id is not owner of the account: ${data.userId}`);\n }\n\n } else { // operator\n\n if (!user?.operator_id) {\n throw new Error(`User Id is not user operator: ${data.userId}`);\n }\n\n }\n\n // Initialize Access Key\n const keyId = generateAccessKeyId(\"ak\", accessKeyUserType);\n const secret = generateAccessKeySecret();\n const encryptedSecret = encryptAccessKeySecret(encryptionKey, secret);\n\n // Optionally, keep a hash if you need verification\n // const keySecretHash = hashAccessKeySecret(secret);\n\n const _data = getCreatePayload(\n data,\n accessKeyUserType,\n keyId,\n encryptedSecret,\n )\n\n if (!_data) {\n throw new Error(`Invalid create access key payload: ${JSON.stringify(_data)}`);\n }\n\n const response = await createAccessKeyModel.create({ data: _data })\n\n const newAcessKeyId = response?.access_key_id ?? 0\n\n let dataAccessKey = await getAccessKey({ id: Number(newAcessKeyId), datatypes: [], skipFilterAccountId: false, revealEncryption: false })\n\n // direct get from model\n const accessKeyEntity = await createAccessKeyModel.get({ id: Number(newAcessKeyId) })\n\n const newKeyId = accessKeyEntity?.key_id ?? \"\"\n\n const validAccessKey = buildFormattedAccessKey(newKeyId, secret)\n\n dataAccessKey = {\n ...dataAccessKey,\n access_key: `${validAccessKey}`\n }\n\n return dataAccessKey\n }\n\n const buildFormattedAccessKey = (keyId: string, secret: string) => {\n return `${keyId}.${secret}`\n }\n\n const getAccessKey = async ({ id, datatypes = [], skipFilterAccountId = false, revealEncryption = false }: AccessKeyGetProps) => {\n\n let { data } = await listAccessKeys({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelAccessKeyFields.access_key_id}`, operator: \"=\", value: id }],\n sortfield: `${ModelAccessKeyFields.access_key_id}`,\n sortorder: \"ASC\",\n datatypes,\n skipFilterAccountId,\n revealEncryption\n })\n\n return data[0] ?? null;\n\n };\n\n const listAccessKeys = async ({\n limit,\n offset,\n filters = [],\n sortfield,\n sortorder,\n datatypes = [],\n skipFilterAccountId = false,\n revealEncryption = false\n }: AccessKeyListProps) => {\n\n let data = []\n\n let sqlSelect = [\n `COUNT(ak.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, accountSqlSelect),\n ...(revealEncryption ? [buildSqlSelect(``, mainEncryptedSqlSelect)] : []),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"ak\", \"accounts\", \"acc\", [\"ak.accountid = acc.account_id\", \"acc.isdelete = false\", \"acc.istrash = false\"]),\n buildSqlRelation(\"left\", \"ak\", \"users\", \"creator\", [\"ak.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"ak\", \"users\", \"updater\", [\"ak.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(accountSqlSelect),\n ...(revealEncryption ? Object.keys(mainEncryptedSqlSelect) : []),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...accountSqlSelect,\n ...(revealEncryption ? mainEncryptedSqlSelect : {}),\n ...defaultSqlSelect\n }\n\n let sqlWhere = [\n `ak.isdelete = false`,\n `ak.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"access_keys\",\n mainAlias: \"ak\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId\n })\n\n data = await accessKeyModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n const revokeAccessKeys = async ({ accessKeyIds }: AccessKeyRevokeProps) => {\n\n if (!accessKeyIds.length) throwError('accessKeyIds is required');\n\n const isOperator = Boolean(rest.isOperator)\n\n // const _data = getUpdatePayload(data)\n\n // if (!_data) {\n // throw new Error(`Invalid update business payload: ${JSON.stringify(_data)}`);\n // }\n\n // retrieve the accessKeysIds\n const { data: accessKeys } = await listAccessKeys({\n limit: accessKeyIds.length,\n offset: 0,\n filters: [{\n field: `${ModelAccessKeyFields.access_key_id}`,\n operator: \"where_in\",\n value: accessKeyIds\n }],\n sortfield: `${ModelAccessKeyFields.access_key_id}`,\n sortorder: \"ASC\",\n datatypes: [],\n skipFilterAccountId: false,\n revealEncryption: false\n })\n\n // console.log('accessKeys', accessKeys)\n\n // validate access keys is not default\n const validateIsDefault = accessKeys.filter(i => i.is_default === true)\n\n if (validateIsDefault.length > 0) {\n throw new Error(`Found Access keys is default restricted to revoke: ${validateIsDefault.map(i => i.access_key_id)}`)\n }\n\n const accessKeyUserType: AccessKeyUserType = isOperator === true ? \"operator\" : \"administrator\"\n\n let response = await accessKeyModel.update({\n where: {\n [`${ModelAccessKeyFields.access_key_id}`]: {\n in: accessKeyIds\n },\n [`${ModelAccessKeyFields.user_type}`]: accessKeyUserType,\n [`${ModelAccessKeyFields.is_default}`]: false // default must remain\n },\n data: {\n [`${ModelAccessKeyFields.access_key_status}`]: accessKeyStatus.revoked\n }\n })\n\n return response\n\n };\n\n return {\n createAccessKey,\n getAccessKey,\n listAccessKeys,\n revokeAccessKeys,\n buildFormattedAccessKey\n }\n\n}\n\n"]}
1
+ {"version":3,"file":"AccessKeyService.js","sourceRoot":"","sources":["../../../src/services/access_key/AccessKeyService.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultServiceProps, encryptAccessKeySecret, throwError } from \"@/utils\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport { getCoreConfiguration, generateAccessKeyId, generateAccessKeySecret, hashAccessKeySecret } from \"@/utils\"\nimport { ModelUserFields, AccessKeyModel, ModelAccessKeyFields, ModelAccountFields } from \"@/models\";\nimport { UserService } from \"@/services\"\n\n// import { config } from \"@/configs\";\n\nexport const accessKeyUserTypes = {\n operator: \"operator\",\n administrator: \"administrator\",\n // worker: \"worker\",\n // customer: \"customer\",\n} as const\n\nexport const allowedAccessUserTypes: AccessKeyUserType[] = [\n \"administrator\", \"operator\"\n]\n\nexport type AccessKeyUserType = typeof accessKeyUserTypes[keyof typeof accessKeyUserTypes]\n\nexport const accessKeyStatus = {\n active: \"active\",\n revoked: \"revoked\",\n} as const\n\nexport type AccessKeyStatus = typeof accessKeyUserTypes[keyof typeof accessKeyUserTypes]\n\nexport type AccessKeyServiceProps = DefaultServiceProps & {\n accessKeyUserType: AccessKeyUserType,\n};\n\nexport type AccessKeyGetProps = QueryGet & {\n id: number,\n skipFilterAccountId: boolean\n revealEncryption: boolean\n};\n\nexport type AccessKeyListProps = QueryList & {\n skipFilterAccountId: boolean\n revealEncryption: boolean\n};\n\nexport type AccessKeyCreateProps = {\n data: {\n userId: number,\n isDefault: boolean\n overrideAccountId?: number\n }\n}\n\nexport type AccessKeyRevokeProps = {\n accessKeyIds: BigInt[]\n};\n\nconst getCreatePayload = (\n data: AccessKeyCreateProps[\"data\"],\n accessKeyUserType: AccessKeyUserType,\n keyId: string,\n encryptedSecret: string,\n) => {\n\n return {\n [`${ModelAccessKeyFields.access_key_status}`]: accessKeyStatus.active,\n [`${ModelAccessKeyFields.key_id}`]: keyId,\n [`${ModelAccessKeyFields.key_secret_encrypted}`]: encryptedSecret,\n [`${ModelAccessKeyFields.user_id}`]: Number(data.userId),\n [`${ModelAccessKeyFields.user_type}`]: accessKeyUserType,\n [`${ModelAccessKeyFields.is_default}`]: Boolean(data.isDefault ?? false),\n }\n\n}\n\nlet mainSqlSelect = {\n [`ak.${ModelAccessKeyFields.access_key_id}`]: \"access_key_id\",\n [`ak.${ModelAccessKeyFields.access_key_status}`]: \"access_key_status\",\n [`ak.${ModelAccessKeyFields.user_id}`]: \"user_id\",\n [`ak.${ModelAccessKeyFields.user_type}`]: \"user_type\",\n [`ak.${ModelAccessKeyFields.key_id}`]: \"key_id\",\n [`ak.${ModelAccessKeyFields.is_default}`]: \"is_default\",\n}\n\nlet mainEncryptedSqlSelect = {\n [`ak.${ModelAccessKeyFields.key_secret_encrypted}`]: \"key_secret_encrypted\",\n}\n\nlet accountSqlSelect = {\n [`acc.${ModelAccountFields.account_code}`]: \"account_code\",\n [`acc.${ModelAccountFields.name}`]: \"account_name\",\n [`acc.${ModelAccountFields.status}`]: \"account_status\"\n}\n\nlet defaultSqlSelect = {\n [`ak.${ModelAccessKeyFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`ak.${ModelAccessKeyFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`ak.${ModelAccessKeyFields.isdelete}`]: \"isdelete\",\n [`ak.${ModelAccessKeyFields.istrash}`]: \"istrash\",\n [`ak.${ModelAccessKeyFields.accountid}`]: \"accountid\",\n}\n\nexport const AccessKeyService = (props: AccessKeyServiceProps) => {\n\n const {\n accessKeyUserType = \"administrator\",\n ...rest\n } = props\n\n const accessKeyModel = AccessKeyModel({ ...rest })\n\n const createAccessKey = async ({ data }: AccessKeyCreateProps) => {\n\n if (allowedAccessUserTypes.includes(accessKeyUserType) === false) {\n throw new Error(`User type is not allowed: ${accessKeyUserType}`);\n }\n\n // retrive core configuration\n const coreConfig = getCoreConfiguration()\n\n // const accessKeyEncryptionSecretKey = config.ACCESS_KEY_ENCRYPTION_SECRET_KEY\n const accessKeyEncryptionSecretKey = coreConfig.accessKeyEncryptionSecretKey\n\n if (!accessKeyEncryptionSecretKey) {\n throw new Error(`ACCESS_KEY_ENCRYPTION_SECRET_KEY is not set`);\n }\n\n const encryptionKey = Buffer.from(accessKeyEncryptionSecretKey!, \"base64\").subarray(0, 32);\n\n const createAccessKeyModel = AccessKeyModel({\n ...rest,\n ...(data?.overrideAccountId ? { accountId: data.overrideAccountId } : {})\n // from the create account using operator token\n })\n const userService = UserService({ ...rest, userType: accessKeyUserType })\n\n // const isOperator = Boolean(rest.isOperator)\n\n // check user id\n const user = await userService.getUser({\n id: Number(data.userId),\n datatypes: [],\n skipFilterAccountId: true\n })\n\n // console.log('data.userId', user)\n\n if (accessKeyUserType === \"administrator\") { // administrator\n\n if (!user?.administrator_id) {\n throw new Error(`User Id is not user administrator: ${data.userId}`);\n }\n\n if (!user?.is_owner) {\n throw new Error(`User Id is not owner of the account: ${data.userId}`);\n }\n\n } else { // operator\n\n if (!user?.operator_id) {\n throw new Error(`User Id is not user operator: ${data.userId}`);\n }\n\n }\n\n // Initialize Access Key\n const keyId = generateAccessKeyId(\"ak\", accessKeyUserType);\n const secret = generateAccessKeySecret();\n const encryptedSecret = encryptAccessKeySecret(encryptionKey, secret);\n\n // Optionally, keep a hash if you need verification\n // const keySecretHash = hashAccessKeySecret(secret);\n\n const _data = getCreatePayload(\n data,\n accessKeyUserType,\n keyId,\n encryptedSecret,\n )\n\n if (!_data) {\n throw new Error(`Invalid create access key payload: ${JSON.stringify(_data)}`);\n }\n\n const response = await createAccessKeyModel.create({ data: _data })\n\n const newAcessKeyId = response?.access_key_id ?? 0\n\n let dataAccessKey = await getAccessKey({ id: Number(newAcessKeyId), datatypes: [], skipFilterAccountId: false, revealEncryption: false })\n\n // direct get from model\n const accessKeyEntity = await createAccessKeyModel.get({ id: Number(newAcessKeyId) })\n\n const newKeyId = accessKeyEntity?.key_id ?? \"\"\n\n const validAccessKey = buildFormattedAccessKey(newKeyId, secret)\n\n dataAccessKey = {\n ...dataAccessKey,\n access_key: `${validAccessKey}`\n }\n\n return dataAccessKey\n }\n\n const buildFormattedAccessKey = (keyId: string, secret: string) => {\n return `${keyId}.${secret}`\n }\n\n const getAccessKey = async ({ id, datatypes = [], skipFilterAccountId = false, revealEncryption = false }: AccessKeyGetProps) => {\n\n let { data } = await listAccessKeys({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelAccessKeyFields.access_key_id}`, operator: \"=\", value: id }],\n sortfield: `${ModelAccessKeyFields.access_key_id}`,\n sortorder: \"ASC\",\n datatypes,\n skipFilterAccountId,\n revealEncryption\n })\n\n return data[0] ?? null;\n\n };\n\n const listAccessKeys = async ({\n limit,\n offset,\n filters = [],\n sortfield,\n sortorder,\n datatypes = [],\n skipFilterAccountId = false,\n revealEncryption = false\n }: AccessKeyListProps) => {\n\n let data = []\n\n let sqlSelect = [\n `COUNT(*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, accountSqlSelect),\n ...(revealEncryption ? [buildSqlSelect(``, mainEncryptedSqlSelect)] : []),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"ak\", \"accounts\", \"acc\", [\"ak.accountid = acc.account_id\", \"acc.isdelete = false\", \"acc.istrash = false\"]),\n buildSqlRelation(\"left\", \"ak\", \"users\", \"creator\", [\"ak.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"ak\", \"users\", \"updater\", [\"ak.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(accountSqlSelect),\n ...(revealEncryption ? Object.keys(mainEncryptedSqlSelect) : []),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...accountSqlSelect,\n ...(revealEncryption ? mainEncryptedSqlSelect : {}),\n ...defaultSqlSelect\n }\n\n let sqlWhere = [\n `ak.isdelete = false`,\n `ak.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"access_keys\",\n mainAlias: \"ak\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId\n })\n\n data = await accessKeyModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n const revokeAccessKeys = async ({ accessKeyIds }: AccessKeyRevokeProps) => {\n\n if (!accessKeyIds.length) throwError('accessKeyIds is required');\n\n const isOperator = Boolean(rest.isOperator)\n\n // const _data = getUpdatePayload(data)\n\n // if (!_data) {\n // throw new Error(`Invalid update business payload: ${JSON.stringify(_data)}`);\n // }\n\n // retrieve the accessKeysIds\n const { data: accessKeys } = await listAccessKeys({\n limit: accessKeyIds.length,\n offset: 0,\n filters: [{\n field: `${ModelAccessKeyFields.access_key_id}`,\n operator: \"where_in\",\n value: accessKeyIds\n }],\n sortfield: `${ModelAccessKeyFields.access_key_id}`,\n sortorder: \"ASC\",\n datatypes: [],\n skipFilterAccountId: false,\n revealEncryption: false\n })\n\n // console.log('accessKeys', accessKeys)\n\n // validate access keys is not default\n const validateIsDefault = accessKeys.filter(i => i.is_default === true)\n\n if (validateIsDefault.length > 0) {\n throw new Error(`Found Access keys is default restricted to revoke: ${validateIsDefault.map(i => i.access_key_id)}`)\n }\n\n const accessKeyUserType: AccessKeyUserType = isOperator === true ? \"operator\" : \"administrator\"\n\n let response = await accessKeyModel.update({\n where: {\n [`${ModelAccessKeyFields.access_key_id}`]: {\n in: accessKeyIds\n },\n [`${ModelAccessKeyFields.user_type}`]: accessKeyUserType,\n [`${ModelAccessKeyFields.is_default}`]: false // default must remain\n },\n data: {\n [`${ModelAccessKeyFields.access_key_status}`]: accessKeyStatus.revoked\n }\n })\n\n return response\n\n };\n\n return {\n createAccessKey,\n getAccessKey,\n listAccessKeys,\n revokeAccessKeys,\n buildFormattedAccessKey\n }\n\n}\n\n"]}
@@ -307,7 +307,7 @@ const AccountService = (props) => {
307
307
  // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)
308
308
  let data = [];
309
309
  let sqlSelect = [
310
- `COUNT(acc.*) OVER() as filtered_count`,
310
+ `COUNT(*) OVER() as filtered_count`,
311
311
  (0, lib_1.buildSqlSelect)(``, mainSqlSelect),
312
312
  (0, lib_1.buildSqlSelect)(``, businessSqlSelect),
313
313
  (0, lib_1.buildSqlSelect)(``, ownerSqlSelect),
@@ -1 +1 @@
1
- {"version":3,"file":"AccountService.js","sourceRoot":"","sources":["../../../src/services/account/AccountService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport { z } from \"zod\";\n\nimport {\n ModelUserFields,\n ModelAccountFields,\n AccountModel,\n ModelUserBranchFields,\n ModelBusinessFields,\n ModelAreaFields,\n ModelStateFields,\n ModelCountryFields,\n UserModel,\n} from \"@/models\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport { ServiceFactory } from \"@/lib\"\n\nimport {\n BusinessService,\n BusinessCreateProps,\n UserService,\n UserCreateProps,\n AccessKeyService\n} from \"@/services\";\n\nexport type AccountServiceProps = DefaultServiceProps & {};\n\nexport type AccountGetProps = QueryGet & {\n id: number,\n // datatypes: AccountDataType[]\n};\n\nexport type AccountListProps = QueryList & {\n // datatypes: AccountDataType[]\n};\n\nexport type AccountRemoveProps = {\n accountIds: BigInt[]\n};\n\nexport type Account = {\n accountId: number,\n name: string,\n accountCode?: string, // optional - skip for auto generation\n businessId: number,\n ownerUserId: number,\n status: boolean\n}\n\nexport type AccountCreateProps = {\n data: Omit<Account, \"accountId\" | \"businessId\" | \"ownerUserId\"> & {\n administrator: Omit<UserCreateProps[\"data\"][\"user\"], \"status\">,\n business: Omit<BusinessCreateProps[\"data\"], \"status\">\n }\n}\n\nexport type AccountUpdateProps = {\n accountId: number,\n data: Omit<Account, \"accountId\" | \"ownerUserId\">\n}\n\nconst getCreatePayload = (data: AccountCreateProps[\"data\"], accountCode: string = \"\") => {\n\n return {\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.status}`]: Boolean(data.status),\n [`${ModelAccountFields.account_code}`]: accountCode\n }\n\n}\n\nconst getCreateUpdatePayload = (businessId: number, ownerUserId: number) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: data.accountId,\n [`${ModelAccountFields.business_id}`]: businessId,\n [`${ModelAccountFields.owner_user_id}`]: ownerUserId,\n }\n\n}\n\nconst getUpdatePayload = (data: AccountUpdateProps[\"data\"], accountCode: string = \"\") => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: accoundId,\n [`${ModelAccountFields.business_id}`]: data.businessId,\n [`${ModelAccountFields.name}`]: data.name,\n ...(accountCode ? { [`${ModelAccountFields.account_code}`]: data.accountCode } : {}),\n [`${ModelAccountFields.status}`]: Boolean(data.status)\n }\n\n}\n\nlet mainSqlSelect = {\n [`acc.${ModelAccountFields.account_id}`]: \"account_id\",\n [`acc.${ModelAccountFields.business_id}`]: \"business_id\",\n [`acc.${ModelAccountFields.name}`]: \"name\",\n [`acc.${ModelAccountFields.account_code}`]: \"account_code\",\n [`acc.${ModelAccountFields.status}`]: \"account_status\",\n}\n\nlet businessSqlSelect = {\n [`bus.${ModelBusinessFields.address_1}`]: \"address_1\",\n [`bus.${ModelBusinessFields.address_2}`]: \"address_2\",\n [`bus.${ModelBusinessFields.company_contact}`]: \"company_contact\",\n [`bus.${ModelBusinessFields.company_name}`]: \"company_name\",\n [`bus.${ModelBusinessFields.email}`]: \"email\",\n [`bus.${ModelBusinessFields.area_id}`]: \"area_id\",\n [`bussarea.${ModelAreaFields.area_name}`]: \"area_name\",\n [`bus.${ModelBusinessFields.state_id}`]: \"state_id\",\n [`bussstate.${ModelStateFields.state_name}`]: \"state_name\",\n [`busscoun.${ModelCountryFields.country_name}`]: \"country_name\",\n [`bus.${ModelBusinessFields.country_id}`]: \"country_id\",\n [`bus.${ModelBusinessFields.postcode}`]: \"postcode\",\n [`bus.${ModelBusinessFields.registration_number}`]: \"registration_number\",\n [`bus.${ModelBusinessFields.status}`]: \"business_status\",\n [`bus.${ModelBusinessFields.website}`]: \"website\",\n}\n\nlet ownerSqlSelectItem = {\n [`usrowner.${ModelUserFields.user_id}`]: \"user_id\",\n [`usrowner.${ModelUserFields.login_username}`]: \"login_username\",\n [`usrowner.${ModelUserFields.user_type}`]: \"user_type\",\n [`usrowner.${ModelUserFields.firstname}`]: \"firstname\",\n [`usrowner.${ModelUserFields.lastname}`]: \"lastname\",\n [`CONCAT(usrowner.${ModelUserFields.contact_country_code}, usrowner.${ModelUserFields.contact_phone_number})`]: \"contact\",\n [`usrowner.${ModelUserFields.contact_country_code}`]: \"contact_country_code\",\n [`usrowner.${ModelUserFields.contact_phone_number}`]: \"contact_phone_number\",\n [`usrowner.${ModelUserFields.email}`]: \"email\",\n [`usrowner.${ModelUserFields.address}`]: \"address\",\n [`usrowner.${ModelUserFields.status}`]: \"status\",\n}\n\nlet ownerSqlSelect = {\n [`COALESCE(\n JSONB_BUILD_OBJECT(\n ${Object.entries(ownerSqlSelectItem).map(([key, alias]) => `'${alias}', ${key}`).join(\", \")}\n ),\n '{}'::jsonb\n )`]: \"owner\"\n}\n\nlet defaultSqlSelect = {\n [`acc.${ModelAccountFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`acc.${ModelAccountFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`acc.${ModelAccountFields.isdelete}`]: \"isdelete\",\n [`acc.${ModelAccountFields.istrash}`]: \"istrash\",\n [`acc.${ModelAccountFields.accountid}`]: \"accountid\",\n}\n\n// Example reserved words for subdomains (account code)\nexport const accountCodeReservedWords = [\n \"www\", \"web\", \"api\", \"admin\", \"app\", \"mail\", \"support\", \"help\", \"docs\", \"dashboard\",\n \"billing\", \"login\", \"logout\", \"signup\", \"register\", \"auth\", \"account\", \"user\", \"users\", \"team\",\n \"teams\", \"settings\", \"config\", \"configuration\", \"system\", \"internal\", \"status\", \"test\", \"demo\", \"staging\",\n \"dev\", \"development\", \"prod\", \"production\", \"root\", \"home\", \"index\", \"static\", \"assets\", \"public\",\n \"beta\", \"alpha\", \"sandbox\", \"trial\", \"guest\", \"owner\", \"manager\", \"administrator\", \"moderator\", \"operator\",\n \"service\", \"api-docs\", \"portal\", \"console\", \"control\", \"ops\", \"supportdesk\", \"helpdesk\", \"contact\", \"feedback\",\n \"security\", \"privacy\", \"terms\", \"policy\", \"legal\", \"about\", \"company\", \"teaminfo\", \"partners\", \"affiliates\",\n \"news\", \"blog\", \"media\", \"press\", \"events\", \"calendar\", \"forum\", \"community\", \"chat\", \"messaging\",\n \"notifications\", \"alerts\", \"reports\", \"analytics\", \"metrics\", \"logs\", \"history\", \"archive\", \"backup\", \"restore\",\n \"files\", \"documents\", \"resources\", \"library\", \"gallery\", \"images\", \"videos\", \"downloads\", \"uploads\", \"templates\"\n];\n\n// Zod schema for subdomain (account code)\nexport const accountCodeSchema = z\n .string()\n .min(5, { message: \"Account code must be at least 5 characters\" })\n .max(63, { message: \"Account code must be at most 63 characters\" })\n .regex(\n /^[a-z0-9]([a-z0-9-]{3,61}[a-z0-9])$/,\n // Regex explanation:\n // ^[a-z0-9] -> first character must be a lowercase letter or number\n // ([a-z0-9-]{3,61} -> middle characters can be letters, numbers, or hyphens, 3–61 characters\n // [a-z0-9])$ -> last character must be a lowercase letter or number\n // Total length = 5–63 characters, no special symbols except hyphen in the middle\n \"Account code can only contain lowercase letters, numbers, and hyphens, and cannot start or end with a hyphen\"\n )\n .transform((val) => val.toLowerCase().trim()) // normalize\n .refine((val) => !accountCodeReservedWords.includes(val), {\n message: \"This account code is reserved. Please choose another one\",\n });\n\nexport const AccountService = (props: AccountServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const accountModel = AccountModel({ ...rest })\n const accessKeyService = AccessKeyService({ ...rest, accessKeyUserType: \"administrator\" })\n\n // generate account code (`{random 5 digit}{first 7 digit of timestamp}`)\n function generateAccountCode(): string {\n const timestamp = Date.now().toString();\n const last7 = timestamp.slice(-7); // last 7 digits of timestamp\n const prefix = Math.floor(Math.random() * 100000) // 0–99999\n .toString()\n .padStart(5, \"0\"); // ensure 5 digits\n return prefix + last7;\n }\n\n const checkAccoutCodeIsUsed = async (\n accountCode: Account[\"accountCode\"],\n selfAccountId?: Account[\"accountId\"]\n ) => {\n\n const { data } = await listAccounts({\n limit: 1,\n offset: 0,\n sortfield: `${ModelAccountFields.account_id}`,\n sortorder: \"ASC\",\n filters: [{\n field: `${ModelAccountFields.account_code}`,\n operator: \"=\",\n value: accountCode\n }],\n datatypes: []\n })\n\n if (data.length <= 0) return false\n\n if (selfAccountId) {\n\n if (Number(data[0].account_id) === Number(selfAccountId)) {\n return false\n } else {\n return true\n }\n\n } else {\n\n return true\n }\n\n }\n\n const validateAccountCodeIsUsed = async (accountCode: string) => {\n\n const accountCodeIsUsed = await checkAccoutCodeIsUsed(accountCode)\n\n if (accountCodeIsUsed === true) {\n throwError(`Account code has been used: ${accountCode}`)\n }\n\n }\n\n const validateAccountCodeFormat = (accountCode: string) => {\n try {\n return accountCodeSchema.parse(accountCode); // throws if invalid\n } catch (err) {\n if (err instanceof z.ZodError) {\n throw new Error(\n `Invalid account code: \"${accountCode}\". ` +\n err.errors.map((e) => e.message).join(\"; \")\n );\n }\n throw err;\n }\n };\n\n const createAccount = async ({ data }: AccountCreateProps) => {\n\n const administratorData = data?.administrator ?? {}\n\n // pre validation first\n if (administratorData?.contact) {\n\n const validateUserService = UserService({ ...rest, userType: \"administrator\" })\n\n // validate the contact\n await validateUserService.validateUserContact(administratorData.contact.countryCode, administratorData.contact.phoneNumber)\n\n }\n\n let accountCode = data?.accountCode ?? \"\";\n\n // auto generate if not specify\n if (accountCode === \"\") {\n accountCode = generateAccountCode()\n }\n\n // validate the account code format\n validateAccountCodeFormat(accountCode)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(accountCode)\n\n // create account\n const _data = getCreatePayload(data, accountCode)\n\n if (!_data) {\n throw new Error(`Invalid create account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.create({ data: _data })\n\n const newAccountId = response?.account_id ?? 0\n\n const businessService = BusinessService({ ...rest, accountId: Number(newAccountId) })\n const userService = UserService({ ...rest, accountId: Number(newAccountId), userType: \"administrator\" })\n\n let accountBusinessId = 0\n let accountUserId = 0\n let accountId = 0\n\n // create user(administrator)\n if (administratorData?.loginUsername) {\n\n let userData = administratorData\n\n let userPayload: UserCreateProps = {\n userType: \"administrator\",\n data: {\n user: {\n address: userData.address,\n contact: {\n countryCode: userData.contact.countryCode,\n phoneNumber: userData.contact.phoneNumber\n },\n email: userData.email,\n firstname: userData.firstname,\n lastname: userData.lastname,\n loginPassword: userData.loginPassword,\n loginUsername: userData.loginUsername,\n status: true // always true for first time\n },\n administrator: {\n isOwner: true // first create must be owner\n },\n props: {\n locationIds: []\n }\n }\n }\n\n const responseOwner = await userService.createUser(userPayload)\n\n accountUserId = Number(responseOwner?.user_id) ?? 0\n accountId = Number(responseOwner?.accountid) ?? 0\n\n }\n\n // create default administrator access key\n await accessKeyService.createAccessKey({\n data: {\n userId: accountUserId,\n isDefault: true,\n overrideAccountId: accountId\n }\n })\n\n // create business\n if (data?.business) {\n\n let businessData = data?.business ?? {}\n\n let businessPayload: BusinessCreateProps = {\n data: {\n address1: businessData.address1,\n address2: businessData.address2,\n areaId: businessData.areaId,\n companyContact: businessData.companyContact,\n companyName: businessData.companyName,\n countryId: businessData.countryId,\n email: businessData.email,\n postcode: businessData.postcode,\n registrationNumber: businessData.registrationNumber,\n stateId: businessData.stateId,\n website: businessData.website,\n status: true // always true for first time\n }\n }\n\n const responseBusiness = await businessService.createBusiness(businessPayload)\n\n accountBusinessId = Number(responseBusiness?.business_id) ?? 0\n\n }\n\n // update account for additional info\n const createUpdatedata = getCreateUpdatePayload(accountBusinessId, accountUserId)\n\n if (!createUpdatedata) {\n throw new Error(`Invalid create update account payload: ${JSON.stringify(_data)}`);\n }\n\n await accountModel.update({ id: Number(newAccountId), data: createUpdatedata })\n\n return await getAccount({ id: Number(newAccountId), datatypes: [] })\n }\n\n const updateAccount = async ({ accountId, data }: AccountUpdateProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let accountCode = data?.accountCode ?? \"\";\n\n // check the override account code needed\n if (accountCode) {\n\n // validate the account code format\n validateAccountCodeFormat(accountCode)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(accountCode)\n }\n\n // const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode, accountId)\n\n // if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n const _data = getUpdatePayload(data, accountCode)\n\n if (!_data) {\n throw new Error(`Invalid update account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.update({ where: { [`${ModelAccountFields.account_id}`]: accountId }, data: _data })\n\n return await getAccount({ id: accountId, datatypes: [] })\n }\n\n const getAccount = async ({ id, datatypes = [] }: AccountGetProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let { data } = await listAccounts({\n limit: 1,\n offset: 0,\n filters: [{ field: \"account_id\", operator: \"=\", value: id }],\n sortfield: \"account_id\",\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n };\n\n const listAccounts = async ({ limit, offset, filters = [], sortfield, sortorder, datatypes = [] }: AccountListProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let data = []\n\n let sqlSelect = [\n `COUNT(acc.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, businessSqlSelect),\n buildSqlSelect(``, ownerSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"acc\", \"businesses\", \"bus\", [\"acc.business_id = bus.business_id\", \"bus.isdelete = false\", \"bus.istrash = false\"]),\n buildSqlRelation(\"left\", \"bus\", \"states\", \"bussstate\", [\"bus.state_id = bussstate.state_id\", \"bussstate.isdelete = false\", \"bussstate.istrash = false\"]),\n buildSqlRelation(\"left\", \"bus\", \"countries\", \"busscoun\", [\"bus.country_id = busscoun.country_id\", \"busscoun.isdelete = false\", \"busscoun.istrash = false\"]),\n buildSqlRelation(\"left\", \"bus\", \"areas\", \"bussarea\", [\"bus.area_id = bussarea.area_id\", \"bussarea.isdelete = false\", \"bussarea.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"usrowner\", [\"acc.owner_user_id = usrowner.user_id\", \"usrowner.isdelete = false\", \"usrowner.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"creator\", [\"acc.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"updater\", [\"acc.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(businessSqlSelect),\n ...Object.keys(ownerSqlSelectItem),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = { ...mainSqlSelect, ...businessSqlSelect, ...ownerSqlSelectItem, ...defaultSqlSelect }\n\n let sqlWhere = [\n `acc.isdelete = false`,\n `acc.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"accounts\",\n mainAlias: \"acc\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId: Boolean(rest.isOperator === true)\n })\n\n data = await accountModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n const removeAccounts = async ({ accountIds }: AccountRemoveProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n if (!accountIds.length) throwError('accountIds is required');\n\n let accountResponse = await accountModel.remove({ where: { [`${ModelAccountFields.account_id}`]: { in: accountIds } } });\n\n let response: any[] = []\n\n await Promise.all(\n accountResponse.map(async (item) => {\n\n const accountId = item?.account_id ?? 0;\n // const ownerUserId = item?.owner_user_id ?? 0;\n const businessId = item?.business_id ?? 0;\n\n const businessService = BusinessService({ ...rest, accountId: Number(accountId) })\n // const userService = UserService({ ...rest, accountId: Number(accountId), userType: \"administrator\" })\n\n const userModel = UserModel({ ...rest })\n\n let responseBusiness: any[] = []\n let responseUser: any[] = []\n\n // remove business\n if (businessId) {\n responseBusiness = await businessService.removeBusinesses({ businessIds: [BigInt(businessId)] });\n }\n\n // remove all users (administrator, etc...)\n // if (ownerUserId) {\n const responseUsers = await userModel.remove({\n // ids: [Number(ownerUserId)]\n where: {\n [`${ModelUserFields.accountid}`]: accountId\n }\n })\n\n responseUser = responseUsers.map((i: any) => {\n delete i.login_password\n return i\n })\n // }\n\n response.push({\n ...item,\n business: responseBusiness.length > 0 ? responseBusiness[0] : {},\n users: responseUser\n })\n\n })\n );\n\n return response\n\n };\n\n // const getDataTypes = () => {\n // return Object.values(accountDataTypes);\n // }\n\n // return {\n // // getAccount,\n // // createAccount,\n // // updateAccount,\n // // removeAccounts,\n // // listAccounts\n // // validateAccountCodeIsUsed: ServiceFactory(validateAccountCodeIsUsed, rest, \"validate account code is used\"),\n // getAccount: ServiceFactory([\"operator\"], \"AccountService\", getAccount, rest, \"get account\"),\n // createAccount: ServiceFactory([\"operator\"], \"AccountService\", createAccount, rest, \"create account\"),\n // updateAccount: ServiceFactory([\"operator\"], \"AccountService\", updateAccount, rest, \"update account\"),\n // removeAccounts: ServiceFactory([\"operator\"], \"AccountService\", removeAccounts, rest, \"remove accounts\"),\n // listAccounts: ServiceFactory([\"operator\"], \"AccountService\", listAccounts, rest, \"list accounts\"),\n // }\n\n const methodConfigs = {\n getAccount: { fn: getAccount, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"get account\" },\n listAccounts: { fn: listAccounts, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"list accounts\" },\n createAccount: { fn: createAccount, allowUserTypes: [\"operator\"] as const, actionName: \"create account\" },\n updateAccount: { fn: updateAccount, allowUserTypes: [\"operator\"] as const, actionName: \"update account\" },\n removeAccounts: { fn: removeAccounts, allowUserTypes: [\"operator\"] as const, actionName: \"remove accounts\" },\n };\n\n return ServiceFactory(\"AccountService\", rest, methodConfigs);\n\n}\n\n"]}
1
+ {"version":3,"file":"AccountService.js","sourceRoot":"","sources":["../../../src/services/account/AccountService.ts"],"names":[],"mappings":";;;AAAA,mCAA+C;AAE/C,6BAAwB;AAExB,qCAUkB;AAMlB,+BAAiI;AAEjI,+BAAsC;AAEtC,yCAMoB;AAsCpB,MAAM,gBAAgB,GAAG,CAAC,IAAgC,EAAE,cAAsB,EAAE,EAAE,EAAE;IAEpF,OAAO;QACH,CAAC,GAAG,2BAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI;QACzC,CAAC,GAAG,2BAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QACtD,CAAC,GAAG,2BAAkB,CAAC,YAAY,EAAE,CAAC,EAAE,WAAW;KACtD,CAAA;AAEL,CAAC,CAAA;AAED,MAAM,sBAAsB,GAAG,CAAC,UAAkB,EAAE,WAAmB,EAAE,EAAE;IAEvE,OAAO;QACH,wDAAwD;QACxD,CAAC,GAAG,2BAAkB,CAAC,WAAW,EAAE,CAAC,EAAE,UAAU;QACjD,CAAC,GAAG,2BAAkB,CAAC,aAAa,EAAE,CAAC,EAAE,WAAW;KACvD,CAAA;AAEL,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,IAAgC,EAAE,cAAsB,EAAE,EAAE,EAAE;IAEpF,OAAO;QACH,mDAAmD;QACnD,CAAC,GAAG,2BAAkB,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU;QACtD,CAAC,GAAG,2BAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI;QACzC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,2BAAkB,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,CAAC,GAAG,2BAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;KACzD,CAAA;AAEL,CAAC,CAAA;AAED,IAAI,aAAa,GAAG;IAChB,CAAC,OAAO,2BAAkB,CAAC,UAAU,EAAE,CAAC,EAAE,YAAY;IACtD,CAAC,OAAO,2BAAkB,CAAC,WAAW,EAAE,CAAC,EAAE,aAAa;IACxD,CAAC,OAAO,2BAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM;IAC1C,CAAC,OAAO,2BAAkB,CAAC,YAAY,EAAE,CAAC,EAAE,cAAc;IAC1D,CAAC,OAAO,2BAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,gBAAgB;CACzD,CAAA;AAED,IAAI,iBAAiB,GAAG;IACpB,CAAC,OAAO,4BAAmB,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;IACrD,CAAC,OAAO,4BAAmB,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;IACrD,CAAC,OAAO,4BAAmB,CAAC,eAAe,EAAE,CAAC,EAAE,iBAAiB;IACjE,CAAC,OAAO,4BAAmB,CAAC,YAAY,EAAE,CAAC,EAAE,cAAc;IAC3D,CAAC,OAAO,4BAAmB,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO;IAC7C,CAAC,OAAO,4BAAmB,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS;IACjD,CAAC,YAAY,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;IACtD,CAAC,OAAO,4BAAmB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU;IACnD,CAAC,aAAa,yBAAgB,CAAC,UAAU,EAAE,CAAC,EAAE,YAAY;IAC1D,CAAC,YAAY,2BAAkB,CAAC,YAAY,EAAE,CAAC,EAAE,cAAc;IAC/D,CAAC,OAAO,4BAAmB,CAAC,UAAU,EAAE,CAAC,EAAE,YAAY;IACvD,CAAC,OAAO,4BAAmB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU;IACnD,CAAC,OAAO,4BAAmB,CAAC,mBAAmB,EAAE,CAAC,EAAE,qBAAqB;IACzE,CAAC,OAAO,4BAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,iBAAiB;IACxD,CAAC,OAAO,4BAAmB,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS;CACpD,CAAA;AAED,IAAI,kBAAkB,GAAG;IACrB,CAAC,YAAY,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS;IAClD,CAAC,YAAY,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAChE,CAAC,YAAY,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;IACtD,CAAC,YAAY,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;IACtD,CAAC,YAAY,wBAAe,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU;IACpD,CAAC,mBAAmB,wBAAe,CAAC,oBAAoB,cAAc,wBAAe,CAAC,oBAAoB,GAAG,CAAC,EAAE,SAAS;IACzH,CAAC,YAAY,wBAAe,CAAC,oBAAoB,EAAE,CAAC,EAAE,sBAAsB;IAC5E,CAAC,YAAY,wBAAe,CAAC,oBAAoB,EAAE,CAAC,EAAE,sBAAsB;IAC5E,CAAC,YAAY,wBAAe,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO;IAC9C,CAAC,YAAY,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS;IAClD,CAAC,YAAY,wBAAe,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ;CACnD,CAAA;AAED,IAAI,cAAc,GAAG;IACjB,CAAC;;cAES,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;MAGjG,CAAC,EAAE,OAAO;CACf,CAAA;AAED,IAAI,gBAAgB,GAAG;IACnB,CAAC,OAAO,2BAAkB,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAC9D,CAAC,WAAW,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAC/D,CAAC,OAAO,2BAAkB,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAC9D,CAAC,WAAW,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAC/D,CAAC,OAAO,2BAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU;IAClD,CAAC,OAAO,2BAAkB,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS;IAChD,CAAC,OAAO,2BAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;CACvD,CAAA;AAED,uDAAuD;AAC1C,QAAA,wBAAwB,GAAG;IACpC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IACnF,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAC9F,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;IACzG,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IACjG,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU;IAC1G,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU;IAC9G,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY;IAC3G,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW;IACjG,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;IAC/G,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW;CACnH,CAAC;AAEF,0CAA0C;AAC7B,QAAA,iBAAiB,GAAG,OAAC;KAC7B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC;KACjE,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC;KAClE,KAAK,CACF,qCAAqC;AACrC,qBAAqB;AACrB,2EAA2E;AAC3E,6FAA6F;AAC7F,0EAA0E;AAC1E,iFAAiF;AACjF,8GAA8G,CACjH;KACA,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY;KACzD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,gCAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACtD,OAAO,EAAE,0DAA0D;CACtE,CAAC,CAAC;AAEA,MAAM,cAAc,GAAG,CAAC,KAA0B,EAAE,EAAE;IAEzD,MAAM,EACF,GAAG,IAAI,EACV,GAAG,KAAK,CAAA;IAET,MAAM,YAAY,GAAG,IAAA,qBAAY,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAC9C,MAAM,gBAAgB,GAAG,IAAA,2BAAgB,EAAC,EAAE,GAAG,IAAI,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC,CAAA;IAE1F,yEAAyE;IACzE,SAAS,mBAAmB;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAA6B;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,UAAU;aACvD,QAAQ,EAAE;aACV,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,kBAAkB;QACzC,OAAO,MAAM,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,MAAM,qBAAqB,GAAG,KAAK,EAC/B,WAAmC,EACnC,aAAoC,EACtC,EAAE;QAEA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;YAChC,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,GAAG,2BAAkB,CAAC,UAAU,EAAE;YAC7C,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,CAAC;oBACN,KAAK,EAAE,GAAG,2BAAkB,CAAC,YAAY,EAAE;oBAC3C,QAAQ,EAAE,GAAG;oBACb,KAAK,EAAE,WAAW;iBACrB,CAAC;YACF,SAAS,EAAE,EAAE;SAChB,CAAC,CAAA;QAEF,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,KAAK,CAAA;QAElC,IAAI,aAAa,EAAE,CAAC;YAEhB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;gBACvD,OAAO,KAAK,CAAA;YAChB,CAAC;iBAAM,CAAC;gBACJ,OAAO,IAAI,CAAA;YACf,CAAC;QAEL,CAAC;aAAM,CAAC;YAEJ,OAAO,IAAI,CAAA;QACf,CAAC;IAEL,CAAC,CAAA;IAED,MAAM,yBAAyB,GAAG,KAAK,EAAE,WAAmB,EAAE,EAAE;QAE5D,MAAM,iBAAiB,GAAG,MAAM,qBAAqB,CAAC,WAAW,CAAC,CAAA;QAElE,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;YAC7B,IAAA,kBAAU,EAAC,+BAA+B,WAAW,EAAE,CAAC,CAAA;QAC5D,CAAC;IAEL,CAAC,CAAA;IAED,MAAM,yBAAyB,GAAG,CAAC,WAAmB,EAAE,EAAE;QACtD,IAAI,CAAC;YACD,OAAO,yBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB;QACrE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,GAAG,YAAY,OAAC,CAAC,QAAQ,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACX,0BAA0B,WAAW,KAAK;oBAC1C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9C,CAAC;YACN,CAAC;YACD,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,EAAE,EAAE,IAAI,EAAsB,EAAE,EAAE;QAEzD,MAAM,iBAAiB,GAAG,IAAI,EAAE,aAAa,IAAI,EAAE,CAAA;QAEnD,uBAAuB;QACvB,IAAI,iBAAiB,EAAE,OAAO,EAAE,CAAC;YAE7B,MAAM,mBAAmB,GAAG,IAAA,sBAAW,EAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAA;YAE/E,uBAAuB;YACvB,MAAM,mBAAmB,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAE/H,CAAC;QAED,IAAI,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;QAE1C,+BAA+B;QAC/B,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;YACrB,WAAW,GAAG,mBAAmB,EAAE,CAAA;QACvC,CAAC;QAED,mCAAmC;QACnC,yBAAyB,CAAC,WAAW,CAAC,CAAA;QAEtC,uCAAuC;QACvC,MAAM,yBAAyB,CAAC,WAAW,CAAC,CAAA;QAE5C,iBAAiB;QACjB,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;QAEjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAEzD,MAAM,YAAY,GAAG,QAAQ,EAAE,UAAU,IAAI,CAAC,CAAA;QAE9C,MAAM,eAAe,GAAG,IAAA,0BAAe,EAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;QACrF,MAAM,WAAW,GAAG,IAAA,sBAAW,EAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAA;QAExG,IAAI,iBAAiB,GAAG,CAAC,CAAA;QACzB,IAAI,aAAa,GAAG,CAAC,CAAA;QACrB,IAAI,SAAS,GAAG,CAAC,CAAA;QAEjB,6BAA6B;QAC7B,IAAI,iBAAiB,EAAE,aAAa,EAAE,CAAC;YAEnC,IAAI,QAAQ,GAAG,iBAAiB,CAAA;YAEhC,IAAI,WAAW,GAAoB;gBAC/B,QAAQ,EAAE,eAAe;gBACzB,IAAI,EAAE;oBACF,IAAI,EAAE;wBACF,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,OAAO,EAAE;4BACL,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW;4BACzC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW;yBAC5C;wBACD,KAAK,EAAE,QAAQ,CAAC,KAAK;wBACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;wBAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,aAAa,EAAE,QAAQ,CAAC,aAAa;wBACrC,aAAa,EAAE,QAAQ,CAAC,aAAa;wBACrC,MAAM,EAAE,IAAI,CAAC,6BAA6B;qBAC7C;oBACD,aAAa,EAAE;wBACX,OAAO,EAAE,IAAI,CAAC,6BAA6B;qBAC9C;oBACD,KAAK,EAAE;wBACH,WAAW,EAAE,EAAE;qBAClB;iBACJ;aACJ,CAAA;YAED,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;YAE/D,aAAa,GAAG,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;YACnD,SAAS,GAAG,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;QAErD,CAAC;QAED,0CAA0C;QAC1C,MAAM,gBAAgB,CAAC,eAAe,CAAC;YACnC,IAAI,EAAE;gBACF,MAAM,EAAE,aAAa;gBACrB,SAAS,EAAE,IAAI;gBACf,iBAAiB,EAAE,SAAS;aAC/B;SACJ,CAAC,CAAA;QAEF,kBAAkB;QAClB,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;YAEjB,IAAI,YAAY,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAA;YAEvC,IAAI,eAAe,GAAwB;gBACvC,IAAI,EAAE;oBACF,QAAQ,EAAE,YAAY,CAAC,QAAQ;oBAC/B,QAAQ,EAAE,YAAY,CAAC,QAAQ;oBAC/B,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,cAAc,EAAE,YAAY,CAAC,cAAc;oBAC3C,WAAW,EAAE,YAAY,CAAC,WAAW;oBACrC,SAAS,EAAE,YAAY,CAAC,SAAS;oBACjC,KAAK,EAAE,YAAY,CAAC,KAAK;oBACzB,QAAQ,EAAE,YAAY,CAAC,QAAQ;oBAC/B,kBAAkB,EAAE,YAAY,CAAC,kBAAkB;oBACnD,OAAO,EAAE,YAAY,CAAC,OAAO;oBAC7B,OAAO,EAAE,YAAY,CAAC,OAAO;oBAC7B,MAAM,EAAE,IAAI,CAAC,6BAA6B;iBAC7C;aACJ,CAAA;YAED,MAAM,gBAAgB,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;YAE9E,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;QAElE,CAAC;QAED,qCAAqC;QACrC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAA;QAEjF,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,MAAM,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAA;QAE/E,OAAO,MAAM,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;IACxE,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAsB,EAAE,EAAE;QAEpE,mDAAmD;QACnD,gGAAgG;QAEhG,IAAI,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;QAE1C,yCAAyC;QACzC,IAAI,WAAW,EAAE,CAAC;YAEd,mCAAmC;YACnC,yBAAyB,CAAC,WAAW,CAAC,CAAA;YAEtC,uCAAuC;YACvC,MAAM,yBAAyB,CAAC,WAAW,CAAC,CAAA;QAChD,CAAC;QAED,qFAAqF;QAErF,gGAAgG;QAEhG,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;QAEjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,2BAAkB,CAAC,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAErH,OAAO,MAAM,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;IAC7D,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,SAAS,GAAG,EAAE,EAAmB,EAAE,EAAE;QAEjE,mDAAmD;QACnD,gGAAgG;QAEhG,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;YAC9B,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAC5D,SAAS,EAAE,YAAY;YACvB,SAAS,EAAE,KAAK;YAChB,SAAS;SACZ,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAE3B,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,EAAE,EAAoB,EAAE,EAAE;QAEnH,mDAAmD;QACnD,gGAAgG;QAEhG,IAAI,IAAI,GAAG,EAAE,CAAA;QAEb,IAAI,SAAS,GAAG;YACZ,mCAAmC;YACnC,IAAA,oBAAc,EAAC,EAAE,EAAE,aAAa,CAAC;YACjC,IAAA,oBAAc,EAAC,EAAE,EAAE,iBAAiB,CAAC;YACrC,IAAA,oBAAc,EAAC,EAAE,EAAE,cAAc,CAAC;YAClC,IAAA,oBAAc,EAAC,EAAE,EAAE,gBAAgB,CAAC;SACvC,CAAA;QAED,IAAI,WAAW,GAAG;YACd,IAAA,sBAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,mCAAmC,EAAE,sBAAsB,EAAE,qBAAqB,CAAC,CAAC;YAC1I,IAAA,sBAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,mCAAmC,EAAE,4BAA4B,EAAE,2BAA2B,CAAC,CAAC;YACxJ,IAAA,sBAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,sCAAsC,EAAE,2BAA2B,EAAE,0BAA0B,CAAC,CAAC;YAC3J,IAAA,sBAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,gCAAgC,EAAE,2BAA2B,EAAE,0BAA0B,CAAC,CAAC;YACjJ,IAAA,sBAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,sCAAsC,EAAE,2BAA2B,EAAE,0BAA0B,CAAC,CAAC;YACvJ,IAAA,sBAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,oCAAoC,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;YAClJ,IAAA,sBAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,oCAAoC,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;SACrJ,CAAA;QAED,IAAI,UAAU,GAAa;YACvB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;YAC7B,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACjC,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAClC,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;SACnC,CAAA;QAED,IAAI,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,iBAAiB,EAAE,GAAG,kBAAkB,EAAE,GAAG,gBAAgB,EAAE,CAAA;QAE1G,IAAI,QAAQ,GAAG;YACX,sBAAsB;YACtB,qBAAqB;YACrB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAA,mBAAa,EAAC,OAAO,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAA;QAED,IAAI,UAAU,GAAG,IAAA,qBAAe,EAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QACtD,IAAI,cAAc,GAAG,IAAA,yBAAmB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAEvD,MAAM,MAAM,GAAG,IAAA,uBAAiB,EAAC;YAC7B,SAAS,EAAE,UAAU;YACrB,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS;YACT,WAAW;YACX,QAAQ;YACR,UAAU;YACV,UAAU;YACV,cAAc;YACd,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC;SACzD,CAAC,CAAA;QAEF,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAErC,MAAM,QAAQ,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;YACrD,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1D,CAAA;QAED,OAAO,QAAQ,CAAA;IAEnB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,EAAE,EAAE,UAAU,EAAsB,EAAE,EAAE;QAEhE,mDAAmD;QACnD,gGAAgG;QAEhG,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,IAAA,kBAAU,EAAC,wBAAwB,CAAC,CAAC;QAE7D,IAAI,eAAe,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,2BAAkB,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAEzH,IAAI,QAAQ,GAAU,EAAE,CAAA;QAExB,MAAM,OAAO,CAAC,GAAG,CACb,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAE/B,MAAM,SAAS,GAAG,IAAI,EAAE,UAAU,IAAI,CAAC,CAAC;YACxC,gDAAgD;YAChD,MAAM,UAAU,GAAG,IAAI,EAAE,WAAW,IAAI,CAAC,CAAC;YAE1C,MAAM,eAAe,GAAG,IAAA,0BAAe,EAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YAClF,wGAAwG;YAExG,MAAM,SAAS,GAAG,IAAA,kBAAS,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;YAExC,IAAI,gBAAgB,GAAU,EAAE,CAAA;YAChC,IAAI,YAAY,GAAU,EAAE,CAAA;YAE5B,kBAAkB;YAClB,IAAI,UAAU,EAAE,CAAC;gBACb,gBAAgB,GAAG,MAAM,eAAe,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;YACrG,CAAC;YAED,2CAA2C;YAC3C,qBAAqB;YACrB,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC;gBACzC,6BAA6B;gBAC7B,KAAK,EAAE;oBACH,CAAC,GAAG,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,SAAS;iBAC9C;aACJ,CAAC,CAAA;YAEF,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;gBACxC,OAAO,CAAC,CAAC,cAAc,CAAA;gBACvB,OAAO,CAAC,CAAA;YACZ,CAAC,CAAC,CAAA;YACF,IAAI;YAEJ,QAAQ,CAAC,IAAI,CAAC;gBACV,GAAG,IAAI;gBACP,QAAQ,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBAChE,KAAK,EAAE,YAAY;aACtB,CAAC,CAAA;QAEN,CAAC,CAAC,CACL,CAAC;QAEF,OAAO,QAAQ,CAAA;IAEnB,CAAC,CAAC;IAEF,+BAA+B;IAC/B,8CAA8C;IAC9C,IAAI;IAEJ,WAAW;IACX,qBAAqB;IACrB,wBAAwB;IACxB,wBAAwB;IACxB,yBAAyB;IACzB,sBAAsB;IACtB,sHAAsH;IACtH,mGAAmG;IACnG,4GAA4G;IAC5G,4GAA4G;IAC5G,+GAA+G;IAC/G,yGAAyG;IACzG,IAAI;IAEJ,MAAM,aAAa,GAAG;QAClB,UAAU,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,UAAU,EAAE,eAAe,CAAU,EAAE,UAAU,EAAE,aAAa,EAAE;QACjH,YAAY,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,UAAU,EAAE,eAAe,CAAU,EAAE,UAAU,EAAE,eAAe,EAAE;QACvH,aAAa,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,UAAU,CAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE;QACzG,aAAa,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,UAAU,CAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE;QACzG,cAAc,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,UAAU,CAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE;KAC/G,CAAC;IAEF,OAAO,IAAA,oBAAc,EAAC,gBAAgB,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;AAEjE,CAAC,CAAA;AA7ZY,QAAA,cAAc,kBA6Z1B","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport { z } from \"zod\";\n\nimport {\n ModelUserFields,\n ModelAccountFields,\n AccountModel,\n ModelUserBranchFields,\n ModelBusinessFields,\n ModelAreaFields,\n ModelStateFields,\n ModelCountryFields,\n UserModel,\n} from \"@/models\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport { ServiceFactory } from \"@/lib\"\n\nimport {\n BusinessService,\n BusinessCreateProps,\n UserService,\n UserCreateProps,\n AccessKeyService\n} from \"@/services\";\n\nexport type AccountServiceProps = DefaultServiceProps & {};\n\nexport type AccountGetProps = QueryGet & {\n id: number,\n // datatypes: AccountDataType[]\n};\n\nexport type AccountListProps = QueryList & {\n // datatypes: AccountDataType[]\n};\n\nexport type AccountRemoveProps = {\n accountIds: BigInt[]\n};\n\nexport type Account = {\n accountId: number,\n name: string,\n accountCode?: string, // optional - skip for auto generation\n businessId: number,\n ownerUserId: number,\n status: boolean\n}\n\nexport type AccountCreateProps = {\n data: Omit<Account, \"accountId\" | \"businessId\" | \"ownerUserId\"> & {\n administrator: Omit<UserCreateProps[\"data\"][\"user\"], \"status\">,\n business: Omit<BusinessCreateProps[\"data\"], \"status\">\n }\n}\n\nexport type AccountUpdateProps = {\n accountId: number,\n data: Omit<Account, \"accountId\" | \"ownerUserId\">\n}\n\nconst getCreatePayload = (data: AccountCreateProps[\"data\"], accountCode: string = \"\") => {\n\n return {\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.status}`]: Boolean(data.status),\n [`${ModelAccountFields.account_code}`]: accountCode\n }\n\n}\n\nconst getCreateUpdatePayload = (businessId: number, ownerUserId: number) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: data.accountId,\n [`${ModelAccountFields.business_id}`]: businessId,\n [`${ModelAccountFields.owner_user_id}`]: ownerUserId,\n }\n\n}\n\nconst getUpdatePayload = (data: AccountUpdateProps[\"data\"], accountCode: string = \"\") => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: accoundId,\n [`${ModelAccountFields.business_id}`]: data.businessId,\n [`${ModelAccountFields.name}`]: data.name,\n ...(accountCode ? { [`${ModelAccountFields.account_code}`]: data.accountCode } : {}),\n [`${ModelAccountFields.status}`]: Boolean(data.status)\n }\n\n}\n\nlet mainSqlSelect = {\n [`acc.${ModelAccountFields.account_id}`]: \"account_id\",\n [`acc.${ModelAccountFields.business_id}`]: \"business_id\",\n [`acc.${ModelAccountFields.name}`]: \"name\",\n [`acc.${ModelAccountFields.account_code}`]: \"account_code\",\n [`acc.${ModelAccountFields.status}`]: \"account_status\",\n}\n\nlet businessSqlSelect = {\n [`bus.${ModelBusinessFields.address_1}`]: \"address_1\",\n [`bus.${ModelBusinessFields.address_2}`]: \"address_2\",\n [`bus.${ModelBusinessFields.company_contact}`]: \"company_contact\",\n [`bus.${ModelBusinessFields.company_name}`]: \"company_name\",\n [`bus.${ModelBusinessFields.email}`]: \"email\",\n [`bus.${ModelBusinessFields.area_id}`]: \"area_id\",\n [`bussarea.${ModelAreaFields.area_name}`]: \"area_name\",\n [`bus.${ModelBusinessFields.state_id}`]: \"state_id\",\n [`bussstate.${ModelStateFields.state_name}`]: \"state_name\",\n [`busscoun.${ModelCountryFields.country_name}`]: \"country_name\",\n [`bus.${ModelBusinessFields.country_id}`]: \"country_id\",\n [`bus.${ModelBusinessFields.postcode}`]: \"postcode\",\n [`bus.${ModelBusinessFields.registration_number}`]: \"registration_number\",\n [`bus.${ModelBusinessFields.status}`]: \"business_status\",\n [`bus.${ModelBusinessFields.website}`]: \"website\",\n}\n\nlet ownerSqlSelectItem = {\n [`usrowner.${ModelUserFields.user_id}`]: \"user_id\",\n [`usrowner.${ModelUserFields.login_username}`]: \"login_username\",\n [`usrowner.${ModelUserFields.user_type}`]: \"user_type\",\n [`usrowner.${ModelUserFields.firstname}`]: \"firstname\",\n [`usrowner.${ModelUserFields.lastname}`]: \"lastname\",\n [`CONCAT(usrowner.${ModelUserFields.contact_country_code}, usrowner.${ModelUserFields.contact_phone_number})`]: \"contact\",\n [`usrowner.${ModelUserFields.contact_country_code}`]: \"contact_country_code\",\n [`usrowner.${ModelUserFields.contact_phone_number}`]: \"contact_phone_number\",\n [`usrowner.${ModelUserFields.email}`]: \"email\",\n [`usrowner.${ModelUserFields.address}`]: \"address\",\n [`usrowner.${ModelUserFields.status}`]: \"status\",\n}\n\nlet ownerSqlSelect = {\n [`COALESCE(\n JSONB_BUILD_OBJECT(\n ${Object.entries(ownerSqlSelectItem).map(([key, alias]) => `'${alias}', ${key}`).join(\", \")}\n ),\n '{}'::jsonb\n )`]: \"owner\"\n}\n\nlet defaultSqlSelect = {\n [`acc.${ModelAccountFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`acc.${ModelAccountFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`acc.${ModelAccountFields.isdelete}`]: \"isdelete\",\n [`acc.${ModelAccountFields.istrash}`]: \"istrash\",\n [`acc.${ModelAccountFields.accountid}`]: \"accountid\",\n}\n\n// Example reserved words for subdomains (account code)\nexport const accountCodeReservedWords = [\n \"www\", \"web\", \"api\", \"admin\", \"app\", \"mail\", \"support\", \"help\", \"docs\", \"dashboard\",\n \"billing\", \"login\", \"logout\", \"signup\", \"register\", \"auth\", \"account\", \"user\", \"users\", \"team\",\n \"teams\", \"settings\", \"config\", \"configuration\", \"system\", \"internal\", \"status\", \"test\", \"demo\", \"staging\",\n \"dev\", \"development\", \"prod\", \"production\", \"root\", \"home\", \"index\", \"static\", \"assets\", \"public\",\n \"beta\", \"alpha\", \"sandbox\", \"trial\", \"guest\", \"owner\", \"manager\", \"administrator\", \"moderator\", \"operator\",\n \"service\", \"api-docs\", \"portal\", \"console\", \"control\", \"ops\", \"supportdesk\", \"helpdesk\", \"contact\", \"feedback\",\n \"security\", \"privacy\", \"terms\", \"policy\", \"legal\", \"about\", \"company\", \"teaminfo\", \"partners\", \"affiliates\",\n \"news\", \"blog\", \"media\", \"press\", \"events\", \"calendar\", \"forum\", \"community\", \"chat\", \"messaging\",\n \"notifications\", \"alerts\", \"reports\", \"analytics\", \"metrics\", \"logs\", \"history\", \"archive\", \"backup\", \"restore\",\n \"files\", \"documents\", \"resources\", \"library\", \"gallery\", \"images\", \"videos\", \"downloads\", \"uploads\", \"templates\"\n];\n\n// Zod schema for subdomain (account code)\nexport const accountCodeSchema = z\n .string()\n .min(5, { message: \"Account code must be at least 5 characters\" })\n .max(63, { message: \"Account code must be at most 63 characters\" })\n .regex(\n /^[a-z0-9]([a-z0-9-]{3,61}[a-z0-9])$/,\n // Regex explanation:\n // ^[a-z0-9] -> first character must be a lowercase letter or number\n // ([a-z0-9-]{3,61} -> middle characters can be letters, numbers, or hyphens, 3–61 characters\n // [a-z0-9])$ -> last character must be a lowercase letter or number\n // Total length = 5–63 characters, no special symbols except hyphen in the middle\n \"Account code can only contain lowercase letters, numbers, and hyphens, and cannot start or end with a hyphen\"\n )\n .transform((val) => val.toLowerCase().trim()) // normalize\n .refine((val) => !accountCodeReservedWords.includes(val), {\n message: \"This account code is reserved. Please choose another one\",\n });\n\nexport const AccountService = (props: AccountServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const accountModel = AccountModel({ ...rest })\n const accessKeyService = AccessKeyService({ ...rest, accessKeyUserType: \"administrator\" })\n\n // generate account code (`{random 5 digit}{first 7 digit of timestamp}`)\n function generateAccountCode(): string {\n const timestamp = Date.now().toString();\n const last7 = timestamp.slice(-7); // last 7 digits of timestamp\n const prefix = Math.floor(Math.random() * 100000) // 0–99999\n .toString()\n .padStart(5, \"0\"); // ensure 5 digits\n return prefix + last7;\n }\n\n const checkAccoutCodeIsUsed = async (\n accountCode: Account[\"accountCode\"],\n selfAccountId?: Account[\"accountId\"]\n ) => {\n\n const { data } = await listAccounts({\n limit: 1,\n offset: 0,\n sortfield: `${ModelAccountFields.account_id}`,\n sortorder: \"ASC\",\n filters: [{\n field: `${ModelAccountFields.account_code}`,\n operator: \"=\",\n value: accountCode\n }],\n datatypes: []\n })\n\n if (data.length <= 0) return false\n\n if (selfAccountId) {\n\n if (Number(data[0].account_id) === Number(selfAccountId)) {\n return false\n } else {\n return true\n }\n\n } else {\n\n return true\n }\n\n }\n\n const validateAccountCodeIsUsed = async (accountCode: string) => {\n\n const accountCodeIsUsed = await checkAccoutCodeIsUsed(accountCode)\n\n if (accountCodeIsUsed === true) {\n throwError(`Account code has been used: ${accountCode}`)\n }\n\n }\n\n const validateAccountCodeFormat = (accountCode: string) => {\n try {\n return accountCodeSchema.parse(accountCode); // throws if invalid\n } catch (err) {\n if (err instanceof z.ZodError) {\n throw new Error(\n `Invalid account code: \"${accountCode}\". ` +\n err.errors.map((e) => e.message).join(\"; \")\n );\n }\n throw err;\n }\n };\n\n const createAccount = async ({ data }: AccountCreateProps) => {\n\n const administratorData = data?.administrator ?? {}\n\n // pre validation first\n if (administratorData?.contact) {\n\n const validateUserService = UserService({ ...rest, userType: \"administrator\" })\n\n // validate the contact\n await validateUserService.validateUserContact(administratorData.contact.countryCode, administratorData.contact.phoneNumber)\n\n }\n\n let accountCode = data?.accountCode ?? \"\";\n\n // auto generate if not specify\n if (accountCode === \"\") {\n accountCode = generateAccountCode()\n }\n\n // validate the account code format\n validateAccountCodeFormat(accountCode)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(accountCode)\n\n // create account\n const _data = getCreatePayload(data, accountCode)\n\n if (!_data) {\n throw new Error(`Invalid create account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.create({ data: _data })\n\n const newAccountId = response?.account_id ?? 0\n\n const businessService = BusinessService({ ...rest, accountId: Number(newAccountId) })\n const userService = UserService({ ...rest, accountId: Number(newAccountId), userType: \"administrator\" })\n\n let accountBusinessId = 0\n let accountUserId = 0\n let accountId = 0\n\n // create user(administrator)\n if (administratorData?.loginUsername) {\n\n let userData = administratorData\n\n let userPayload: UserCreateProps = {\n userType: \"administrator\",\n data: {\n user: {\n address: userData.address,\n contact: {\n countryCode: userData.contact.countryCode,\n phoneNumber: userData.contact.phoneNumber\n },\n email: userData.email,\n firstname: userData.firstname,\n lastname: userData.lastname,\n loginPassword: userData.loginPassword,\n loginUsername: userData.loginUsername,\n status: true // always true for first time\n },\n administrator: {\n isOwner: true // first create must be owner\n },\n props: {\n locationIds: []\n }\n }\n }\n\n const responseOwner = await userService.createUser(userPayload)\n\n accountUserId = Number(responseOwner?.user_id) ?? 0\n accountId = Number(responseOwner?.accountid) ?? 0\n\n }\n\n // create default administrator access key\n await accessKeyService.createAccessKey({\n data: {\n userId: accountUserId,\n isDefault: true,\n overrideAccountId: accountId\n }\n })\n\n // create business\n if (data?.business) {\n\n let businessData = data?.business ?? {}\n\n let businessPayload: BusinessCreateProps = {\n data: {\n address1: businessData.address1,\n address2: businessData.address2,\n areaId: businessData.areaId,\n companyContact: businessData.companyContact,\n companyName: businessData.companyName,\n countryId: businessData.countryId,\n email: businessData.email,\n postcode: businessData.postcode,\n registrationNumber: businessData.registrationNumber,\n stateId: businessData.stateId,\n website: businessData.website,\n status: true // always true for first time\n }\n }\n\n const responseBusiness = await businessService.createBusiness(businessPayload)\n\n accountBusinessId = Number(responseBusiness?.business_id) ?? 0\n\n }\n\n // update account for additional info\n const createUpdatedata = getCreateUpdatePayload(accountBusinessId, accountUserId)\n\n if (!createUpdatedata) {\n throw new Error(`Invalid create update account payload: ${JSON.stringify(_data)}`);\n }\n\n await accountModel.update({ id: Number(newAccountId), data: createUpdatedata })\n\n return await getAccount({ id: Number(newAccountId), datatypes: [] })\n }\n\n const updateAccount = async ({ accountId, data }: AccountUpdateProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let accountCode = data?.accountCode ?? \"\";\n\n // check the override account code needed\n if (accountCode) {\n\n // validate the account code format\n validateAccountCodeFormat(accountCode)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(accountCode)\n }\n\n // const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode, accountId)\n\n // if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n const _data = getUpdatePayload(data, accountCode)\n\n if (!_data) {\n throw new Error(`Invalid update account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.update({ where: { [`${ModelAccountFields.account_id}`]: accountId }, data: _data })\n\n return await getAccount({ id: accountId, datatypes: [] })\n }\n\n const getAccount = async ({ id, datatypes = [] }: AccountGetProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let { data } = await listAccounts({\n limit: 1,\n offset: 0,\n filters: [{ field: \"account_id\", operator: \"=\", value: id }],\n sortfield: \"account_id\",\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n };\n\n const listAccounts = async ({ limit, offset, filters = [], sortfield, sortorder, datatypes = [] }: AccountListProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let data = []\n\n let sqlSelect = [\n `COUNT(*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, businessSqlSelect),\n buildSqlSelect(``, ownerSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"acc\", \"businesses\", \"bus\", [\"acc.business_id = bus.business_id\", \"bus.isdelete = false\", \"bus.istrash = false\"]),\n buildSqlRelation(\"left\", \"bus\", \"states\", \"bussstate\", [\"bus.state_id = bussstate.state_id\", \"bussstate.isdelete = false\", \"bussstate.istrash = false\"]),\n buildSqlRelation(\"left\", \"bus\", \"countries\", \"busscoun\", [\"bus.country_id = busscoun.country_id\", \"busscoun.isdelete = false\", \"busscoun.istrash = false\"]),\n buildSqlRelation(\"left\", \"bus\", \"areas\", \"bussarea\", [\"bus.area_id = bussarea.area_id\", \"bussarea.isdelete = false\", \"bussarea.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"usrowner\", [\"acc.owner_user_id = usrowner.user_id\", \"usrowner.isdelete = false\", \"usrowner.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"creator\", [\"acc.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"updater\", [\"acc.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(businessSqlSelect),\n ...Object.keys(ownerSqlSelectItem),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = { ...mainSqlSelect, ...businessSqlSelect, ...ownerSqlSelectItem, ...defaultSqlSelect }\n\n let sqlWhere = [\n `acc.isdelete = false`,\n `acc.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"accounts\",\n mainAlias: \"acc\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId: Boolean(rest.isOperator === true)\n })\n\n data = await accountModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n const removeAccounts = async ({ accountIds }: AccountRemoveProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n if (!accountIds.length) throwError('accountIds is required');\n\n let accountResponse = await accountModel.remove({ where: { [`${ModelAccountFields.account_id}`]: { in: accountIds } } });\n\n let response: any[] = []\n\n await Promise.all(\n accountResponse.map(async (item) => {\n\n const accountId = item?.account_id ?? 0;\n // const ownerUserId = item?.owner_user_id ?? 0;\n const businessId = item?.business_id ?? 0;\n\n const businessService = BusinessService({ ...rest, accountId: Number(accountId) })\n // const userService = UserService({ ...rest, accountId: Number(accountId), userType: \"administrator\" })\n\n const userModel = UserModel({ ...rest })\n\n let responseBusiness: any[] = []\n let responseUser: any[] = []\n\n // remove business\n if (businessId) {\n responseBusiness = await businessService.removeBusinesses({ businessIds: [BigInt(businessId)] });\n }\n\n // remove all users (administrator, etc...)\n // if (ownerUserId) {\n const responseUsers = await userModel.remove({\n // ids: [Number(ownerUserId)]\n where: {\n [`${ModelUserFields.accountid}`]: accountId\n }\n })\n\n responseUser = responseUsers.map((i: any) => {\n delete i.login_password\n return i\n })\n // }\n\n response.push({\n ...item,\n business: responseBusiness.length > 0 ? responseBusiness[0] : {},\n users: responseUser\n })\n\n })\n );\n\n return response\n\n };\n\n // const getDataTypes = () => {\n // return Object.values(accountDataTypes);\n // }\n\n // return {\n // // getAccount,\n // // createAccount,\n // // updateAccount,\n // // removeAccounts,\n // // listAccounts\n // // validateAccountCodeIsUsed: ServiceFactory(validateAccountCodeIsUsed, rest, \"validate account code is used\"),\n // getAccount: ServiceFactory([\"operator\"], \"AccountService\", getAccount, rest, \"get account\"),\n // createAccount: ServiceFactory([\"operator\"], \"AccountService\", createAccount, rest, \"create account\"),\n // updateAccount: ServiceFactory([\"operator\"], \"AccountService\", updateAccount, rest, \"update account\"),\n // removeAccounts: ServiceFactory([\"operator\"], \"AccountService\", removeAccounts, rest, \"remove accounts\"),\n // listAccounts: ServiceFactory([\"operator\"], \"AccountService\", listAccounts, rest, \"list accounts\"),\n // }\n\n const methodConfigs = {\n getAccount: { fn: getAccount, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"get account\" },\n listAccounts: { fn: listAccounts, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"list accounts\" },\n createAccount: { fn: createAccount, allowUserTypes: [\"operator\"] as const, actionName: \"create account\" },\n updateAccount: { fn: updateAccount, allowUserTypes: [\"operator\"] as const, actionName: \"update account\" },\n removeAccounts: { fn: removeAccounts, allowUserTypes: [\"operator\"] as const, actionName: \"remove accounts\" },\n };\n\n return ServiceFactory(\"AccountService\", rest, methodConfigs);\n\n}\n\n"]}
@@ -100,7 +100,7 @@ const BusinessService = (props) => {
100
100
  const listBusinesses = async ({ limit, offset, filters = [], sortfield, sortorder, datatypes = [] }) => {
101
101
  let data = [];
102
102
  let sqlSelect = [
103
- `COUNT(buss.*) OVER() as filtered_count`,
103
+ `COUNT(*) OVER() as filtered_count`,
104
104
  (0, lib_1.buildSqlSelect)(``, mainSqlSelect),
105
105
  (0, lib_1.buildSqlSelect)(``, regionSqlSelect),
106
106
  (0, lib_1.buildSqlSelect)(``, defaultSqlSelect)