storemw-core-api 1.0.108 → 1.0.110

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 (45) hide show
  1. package/dist/lib/index.d.ts +2 -0
  2. package/dist/lib/index.js +5 -1
  3. package/dist/lib/index.js.map +1 -1
  4. package/dist/lib/service_factory/ServiceFactory.d.ts +18 -0
  5. package/dist/lib/service_factory/ServiceFactory.js +67 -0
  6. package/dist/lib/service_factory/ServiceFactory.js.map +1 -0
  7. package/dist/services/access_key/AccessKeyService.js +1 -1
  8. package/dist/services/access_key/AccessKeyService.js.map +1 -1
  9. package/dist/services/account/AccountService.js +9 -9
  10. package/dist/services/account/AccountService.js.map +1 -1
  11. package/dist/services/branch/UserBranchService.js +1 -1
  12. package/dist/services/branch/UserBranchService.js.map +1 -1
  13. package/dist/services/branch_user/BranchUserService.js +1 -1
  14. package/dist/services/branch_user/BranchUserService.js.map +1 -1
  15. package/dist/services/business/BusinessService.js +1 -1
  16. package/dist/services/business/BusinessService.js.map +1 -1
  17. package/dist/services/document/DocumentService.js +1 -1
  18. package/dist/services/document/DocumentService.js.map +1 -1
  19. package/dist/services/file/FileService.d.ts +1 -1
  20. package/dist/services/file/FileService.js +1 -1
  21. package/dist/services/file/FileService.js.map +1 -1
  22. package/dist/services/injection_field/InjectionFieldService.js +1 -1
  23. package/dist/services/injection_field/InjectionFieldService.js.map +1 -1
  24. package/dist/services/item/ItemService.js +1 -1
  25. package/dist/services/item/ItemService.js.map +1 -1
  26. package/dist/services/location/LocationService.js +1 -1
  27. package/dist/services/location/LocationService.js.map +1 -1
  28. package/dist/services/one_time_code/OneTimeCodeService.js +1 -1
  29. package/dist/services/one_time_code/OneTimeCodeService.js.map +1 -1
  30. package/dist/services/region/RegionService.d.ts +5 -13
  31. package/dist/services/region/RegionService.js +12 -10
  32. package/dist/services/region/RegionService.js.map +1 -1
  33. package/dist/services/user/OperatorService.js +2 -2
  34. package/dist/services/user/OperatorService.js.map +1 -1
  35. package/dist/services/user/UserService.js +5 -4
  36. package/dist/services/user/UserService.js.map +1 -1
  37. package/dist/services/utils/AccessKeyUtilService.js +5 -4
  38. package/dist/services/utils/AccessKeyUtilService.js.map +1 -1
  39. package/dist/utils/index.d.ts +1 -3
  40. package/dist/utils/index.js +2 -6
  41. package/dist/utils/index.js.map +1 -1
  42. package/dist/utils/serviceUtils.d.ts +5 -1
  43. package/dist/utils/serviceUtils.js +17 -6
  44. package/dist/utils/serviceUtils.js.map +1 -1
  45. package/package.json +1 -1
@@ -1,6 +1,8 @@
1
1
  export { prisma } from "./prisma/prisma";
2
2
  export { ModelFactory } from "./model_factory/ModelFactory";
3
3
  export type { DefaultOmitFields } from "./model_factory/default";
4
+ export { ServiceFactory, serviceFactoryNames, serviceFactoryAllowUserTypes } from "./service_factory/ServiceFactory";
5
+ export type { ServiceFactoryName, ServiceFactoryAllowUserType } from "./service_factory/ServiceFactory";
4
6
  export { CustomizeTransform } from "./customize/CustomizeTransform";
5
7
  export type { CustomizeTransformProps } from "./customize/CustomizeTransform";
6
8
  export { toFieldMap, buildSqlRawSelect, buildSqlRawSelectCount, buildSqlRelation, buildSqlSelect, buildSqlWhere, buildSqlLimitOffset, buildSqlOrderBy, getFieldsByType, buildInjectionFieldsSqlSelect, getListWithCount } from "./query_builder/queryBuilder";
package/dist/lib/index.js CHANGED
@@ -1,10 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildFileDefaultSqlSelect = exports.buildFileMainSqlSelect = exports.getFileSqlRelationMaps = exports.buildDocumentDocumentSqlSelect = exports.buildDocumentDocumentSqlSelectAgg = exports.buildDocumentItemSqlSelect = exports.buildDocumentItemSqlSelectAgg = exports.buildDocumentTotalSqlSelect = exports.buildDocumentLocationSqlSelect = exports.buildDocumentProfileSqlSelect = exports.buildDocumentDefaultSqlSelect = exports.buildDocumentMainSqlSelect = exports.getDocumentSqlRelationMaps = exports.getListWithCount = exports.buildInjectionFieldsSqlSelect = exports.getFieldsByType = exports.buildSqlOrderBy = exports.buildSqlLimitOffset = exports.buildSqlWhere = exports.buildSqlSelect = exports.buildSqlRelation = exports.buildSqlRawSelectCount = exports.buildSqlRawSelect = exports.toFieldMap = exports.CustomizeTransform = exports.ModelFactory = exports.prisma = void 0;
3
+ exports.buildFileDefaultSqlSelect = exports.buildFileMainSqlSelect = exports.getFileSqlRelationMaps = exports.buildDocumentDocumentSqlSelect = exports.buildDocumentDocumentSqlSelectAgg = exports.buildDocumentItemSqlSelect = exports.buildDocumentItemSqlSelectAgg = exports.buildDocumentTotalSqlSelect = exports.buildDocumentLocationSqlSelect = exports.buildDocumentProfileSqlSelect = exports.buildDocumentDefaultSqlSelect = exports.buildDocumentMainSqlSelect = exports.getDocumentSqlRelationMaps = exports.getListWithCount = exports.buildInjectionFieldsSqlSelect = exports.getFieldsByType = exports.buildSqlOrderBy = exports.buildSqlLimitOffset = exports.buildSqlWhere = exports.buildSqlSelect = exports.buildSqlRelation = exports.buildSqlRawSelectCount = exports.buildSqlRawSelect = exports.toFieldMap = exports.CustomizeTransform = exports.serviceFactoryAllowUserTypes = exports.serviceFactoryNames = exports.ServiceFactory = exports.ModelFactory = exports.prisma = void 0;
4
4
  var prisma_1 = require("./prisma/prisma");
5
5
  Object.defineProperty(exports, "prisma", { enumerable: true, get: function () { return prisma_1.prisma; } });
6
6
  var ModelFactory_1 = require("./model_factory/ModelFactory");
7
7
  Object.defineProperty(exports, "ModelFactory", { enumerable: true, get: function () { return ModelFactory_1.ModelFactory; } });
8
+ var ServiceFactory_1 = require("./service_factory/ServiceFactory");
9
+ Object.defineProperty(exports, "ServiceFactory", { enumerable: true, get: function () { return ServiceFactory_1.ServiceFactory; } });
10
+ Object.defineProperty(exports, "serviceFactoryNames", { enumerable: true, get: function () { return ServiceFactory_1.serviceFactoryNames; } });
11
+ Object.defineProperty(exports, "serviceFactoryAllowUserTypes", { enumerable: true, get: function () { return ServiceFactory_1.serviceFactoryAllowUserTypes; } });
8
12
  var CustomizeTransform_1 = require("./customize/CustomizeTransform");
9
13
  Object.defineProperty(exports, "CustomizeTransform", { enumerable: true, get: function () { return CustomizeTransform_1.CustomizeTransform; } });
10
14
  var queryBuilder_1 = require("./query_builder/queryBuilder");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":";;;AAAA,0CAAwC;AAA/B,gGAAA,MAAM,OAAA;AAEf,6DAA2D;AAAlD,4GAAA,YAAY,OAAA;AAGrB,qEAAmE;AAA1D,wHAAA,kBAAkB,OAAA;AAG3B,6DAA6P;AAApP,0GAAA,UAAU,OAAA;AAAE,iHAAA,iBAAiB,OAAA;AAAE,sHAAA,sBAAsB,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAAE,8GAAA,cAAc,OAAA;AAAE,6GAAA,aAAa,OAAA;AAAE,mHAAA,mBAAmB,OAAA;AAAE,+GAAA,eAAe,OAAA;AAAE,+GAAA,eAAe,OAAA;AAAE,6HAAA,6BAA6B,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAEvN,+DAYsC;AAXlC,2HAAA,0BAA0B,OAAA;AAC1B,2HAAA,0BAA0B,OAAA;AAC1B,8HAAA,6BAA6B,OAAA;AAC7B,8HAAA,6BAA6B,OAAA;AAC7B,gCAAgC;AAChC,+HAAA,8BAA8B,OAAA;AAC9B,4HAAA,2BAA2B,OAAA;AAC3B,8HAAA,6BAA6B,OAAA;AAC7B,2HAAA,0BAA0B,OAAA;AAC1B,kIAAA,iCAAiC,OAAA;AACjC,+HAAA,8BAA8B,OAAA;AAGlC,uDAIkC;AAH9B,mHAAA,sBAAsB,OAAA;AACtB,mHAAA,sBAAsB,OAAA;AACtB,sHAAA,yBAAyB,OAAA","sourcesContent":["export { prisma } from \"./prisma/prisma\"\n\nexport { ModelFactory } from \"./model_factory/ModelFactory\"\nexport type { DefaultOmitFields } from \"./model_factory/default\"\n\nexport { CustomizeTransform } from \"./customize/CustomizeTransform\"\nexport type { CustomizeTransformProps } from \"./customize/CustomizeTransform\"\n\nexport { toFieldMap, buildSqlRawSelect, buildSqlRawSelectCount, buildSqlRelation, buildSqlSelect, buildSqlWhere, buildSqlLimitOffset, buildSqlOrderBy, getFieldsByType, buildInjectionFieldsSqlSelect, getListWithCount } from \"./query_builder/queryBuilder\"\n\nexport {\n getDocumentSqlRelationMaps,\n buildDocumentMainSqlSelect,\n buildDocumentDefaultSqlSelect,\n buildDocumentProfileSqlSelect,\n // buildDocumentAmountSqlSelect,\n buildDocumentLocationSqlSelect,\n buildDocumentTotalSqlSelect,\n buildDocumentItemSqlSelectAgg,\n buildDocumentItemSqlSelect,\n buildDocumentDocumentSqlSelectAgg,\n buildDocumentDocumentSqlSelect\n} from \"./query_builder/queryDocument\"\n\nexport {\n getFileSqlRelationMaps,\n buildFileMainSqlSelect,\n buildFileDefaultSqlSelect,\n} from \"./query_builder/queryFile\""]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":";;;AAAA,0CAAwC;AAA/B,gGAAA,MAAM,OAAA;AAEf,6DAA2D;AAAlD,4GAAA,YAAY,OAAA;AAGrB,mEAAoH;AAA3G,gHAAA,cAAc,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAAE,8HAAA,4BAA4B,OAAA;AAG1E,qEAAmE;AAA1D,wHAAA,kBAAkB,OAAA;AAG3B,6DAA6P;AAApP,0GAAA,UAAU,OAAA;AAAE,iHAAA,iBAAiB,OAAA;AAAE,sHAAA,sBAAsB,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAAE,8GAAA,cAAc,OAAA;AAAE,6GAAA,aAAa,OAAA;AAAE,mHAAA,mBAAmB,OAAA;AAAE,+GAAA,eAAe,OAAA;AAAE,+GAAA,eAAe,OAAA;AAAE,6HAAA,6BAA6B,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAEvN,+DAYsC;AAXlC,2HAAA,0BAA0B,OAAA;AAC1B,2HAAA,0BAA0B,OAAA;AAC1B,8HAAA,6BAA6B,OAAA;AAC7B,8HAAA,6BAA6B,OAAA;AAC7B,gCAAgC;AAChC,+HAAA,8BAA8B,OAAA;AAC9B,4HAAA,2BAA2B,OAAA;AAC3B,8HAAA,6BAA6B,OAAA;AAC7B,2HAAA,0BAA0B,OAAA;AAC1B,kIAAA,iCAAiC,OAAA;AACjC,+HAAA,8BAA8B,OAAA;AAGlC,uDAIkC;AAH9B,mHAAA,sBAAsB,OAAA;AACtB,mHAAA,sBAAsB,OAAA;AACtB,sHAAA,yBAAyB,OAAA","sourcesContent":["export { prisma } from \"./prisma/prisma\"\n\nexport { ModelFactory } from \"./model_factory/ModelFactory\"\nexport type { DefaultOmitFields } from \"./model_factory/default\"\n\nexport { ServiceFactory, serviceFactoryNames, serviceFactoryAllowUserTypes } from \"./service_factory/ServiceFactory\"\nexport type { ServiceFactoryName, ServiceFactoryAllowUserType } from \"./service_factory/ServiceFactory\"\n\nexport { CustomizeTransform } from \"./customize/CustomizeTransform\"\nexport type { CustomizeTransformProps } from \"./customize/CustomizeTransform\"\n\nexport { toFieldMap, buildSqlRawSelect, buildSqlRawSelectCount, buildSqlRelation, buildSqlSelect, buildSqlWhere, buildSqlLimitOffset, buildSqlOrderBy, getFieldsByType, buildInjectionFieldsSqlSelect, getListWithCount } from \"./query_builder/queryBuilder\"\n\nexport {\n getDocumentSqlRelationMaps,\n buildDocumentMainSqlSelect,\n buildDocumentDefaultSqlSelect,\n buildDocumentProfileSqlSelect,\n // buildDocumentAmountSqlSelect,\n buildDocumentLocationSqlSelect,\n buildDocumentTotalSqlSelect,\n buildDocumentItemSqlSelectAgg,\n buildDocumentItemSqlSelect,\n buildDocumentDocumentSqlSelectAgg,\n buildDocumentDocumentSqlSelect\n} from \"./query_builder/queryDocument\"\n\nexport {\n getFileSqlRelationMaps,\n buildFileMainSqlSelect,\n buildFileDefaultSqlSelect,\n} from \"./query_builder/queryFile\""]}
@@ -0,0 +1,18 @@
1
+ import { DefaultServiceProps } from "../../utils";
2
+ export declare const serviceFactoryAllowUserTypes: {
3
+ readonly any: "any";
4
+ readonly operator: "operator";
5
+ readonly administrator: "administrator";
6
+ };
7
+ export type ServiceFactoryAllowUserType = typeof serviceFactoryAllowUserTypes[keyof typeof serviceFactoryAllowUserTypes];
8
+ export declare const serviceFactoryNames: {
9
+ readonly AccountService: "AccountService";
10
+ readonly RegionService: "RegionService";
11
+ readonly OperatorService: "OperatorService";
12
+ };
13
+ export type ServiceFactoryName = typeof serviceFactoryNames[keyof typeof serviceFactoryNames];
14
+ export declare const ServiceFactory: <T extends Record<string, {
15
+ fn: (...args: any[]) => unknown;
16
+ allowUserTypes: readonly ServiceFactoryAllowUserType[];
17
+ actionName?: string;
18
+ }>>(serviceName: ServiceFactoryName, auth: DefaultServiceProps, methodConfigs: T) => { [K in keyof T]: (...args: Parameters<T[K]["fn"]>) => ReturnType<T[K]["fn"]>; };
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServiceFactory = exports.serviceFactoryNames = exports.serviceFactoryAllowUserTypes = void 0;
4
+ const utils_1 = require("../../utils");
5
+ // import { AccessKeyUserType } from "../../services";
6
+ exports.serviceFactoryAllowUserTypes = {
7
+ any: "any", // public
8
+ operator: "operator",
9
+ administrator: "administrator",
10
+ };
11
+ exports.serviceFactoryNames = {
12
+ AccountService: "AccountService",
13
+ RegionService: "RegionService",
14
+ OperatorService: "OperatorService",
15
+ };
16
+ // type FnWithSingleArg<Args extends object, Ret> = (args: Args) => Promise<Ret>;
17
+ // export type RegisterServiceConfig<
18
+ // Fn extends (...args: any[]) => Promise<any> = (...args: any[]) => Promise<any>
19
+ // > = {
20
+ // // fn: Fn;
21
+ // fn: FnWithSingleArg<any, any>;
22
+ // allowUserTypes?: readonly ServiceFactoryAllowUserType[];
23
+ // actionName?: string;
24
+ // };
25
+ // export type RegisterServiceConfigs = Record<string, RegisterServiceConfig>;
26
+ const ServiceFactory = (serviceName, auth, methodConfigs) => {
27
+ const wrapped = {};
28
+ for (const key in methodConfigs) {
29
+ const { fn, allowUserTypes, actionName } = methodConfigs[key];
30
+ if (allowUserTypes.includes("any") === false) {
31
+ // wrap with access control
32
+ wrapped[key] = ((...args) => {
33
+ // if (!allowUserTypes.includes(auth.accessKeyUserType as ServiceFactoryAllowUserType)) {
34
+ // throw new Error(
35
+ // `[${serviceName}] ${auth.accessKeyUserType} not allowed to ${actionName ?? key}`
36
+ // );
37
+ // }
38
+ const callerUserType = auth.isOperator === true ? "operator" : "administrator";
39
+ if (allowUserTypes.includes(callerUserType) === false) {
40
+ (0, utils_1.throwError)(`Access denied: ${serviceName}:${key}, Required: ${allowUserTypes.join(', ')}, Provided: ${callerUserType}`);
41
+ }
42
+ return fn(...args);
43
+ });
44
+ }
45
+ else {
46
+ // public method
47
+ wrapped[key] = fn;
48
+ }
49
+ }
50
+ return wrapped;
51
+ };
52
+ exports.ServiceFactory = ServiceFactory;
53
+ // export const protectServiceOnlyOperator = <T extends (...args: any[]) => Promise<any>>(
54
+ // fn: T,
55
+ // auth: DefaultServiceProps,
56
+ // actionName?: string
57
+ // ) => {
58
+ // return async (...args: Parameters<T>): Promise<ReturnType<T>> => {
59
+ // if (!auth.isOperator) {
60
+ // throw new Error(
61
+ // `Only operator token/access key allowed to ${actionName ?? "perform this action"}`
62
+ // );
63
+ // }
64
+ // return fn(...args);
65
+ // };
66
+ // };
67
+ //# sourceMappingURL=ServiceFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceFactory.js","sourceRoot":"","sources":["../../../src/lib/service_factory/ServiceFactory.ts"],"names":[],"mappings":";;;AAAA,mCAA0D;AAE1D,kDAAkD;AAErC,QAAA,4BAA4B,GAAG;IACxC,GAAG,EAAE,KAAK,EAAE,UAAU;IACtB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;CACxB,CAAA;AAIG,QAAA,mBAAmB,GAAG;IAC/B,cAAc,EAAE,gBAAgB;IAChC,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,iBAAiB;CAC5B,CAAA;AAIV,iFAAiF;AAEjF,qCAAqC;AACrC,qFAAqF;AACrF,QAAQ;AACR,iBAAiB;AACjB,qCAAqC;AACrC,+DAA+D;AAC/D,2BAA2B;AAC3B,KAAK;AAEL,8EAA8E;AAEvE,MAAM,cAAc,GAAG,CAU1B,WAA+B,EAC/B,IAAyB,EACzB,aAAgB,EAGd,EAAE;IACJ,MAAM,OAAO,GAAG,EAEf,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAC9B,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAE9D,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;YAC3C,2BAA2B;YAC3B,OAAO,CAAC,GAAc,CAAC,GAAG,CAAC,CAAC,GAAG,IAA2B,EAAE,EAAE;gBAC1D,yFAAyF;gBACzF,uBAAuB;gBACvB,2FAA2F;gBAC3F,SAAS;gBACT,IAAI;gBAEJ,MAAM,cAAc,GAAgC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAA;gBAE3G,IAAI,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,KAAK,EAAE,CAAC;oBACpD,IAAA,kBAAU,EAAC,kBAAkB,WAAW,IAAI,GAAG,eAAe,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,cAAc,EAAE,CAAC,CAAA;gBAC3H,CAAC;gBAED,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YACvB,CAAC,CAAkF,CAAC;QACxF,CAAC;aAAM,CAAC;YACJ,gBAAgB;YAChB,OAAO,CAAC,GAAc,CAAC,GAAG,EAAmF,CAAC;QAClH,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AA/CW,QAAA,cAAc,kBA+CzB;AAEF,0FAA0F;AAC1F,aAAa;AACb,iCAAiC;AACjC,0BAA0B;AAC1B,SAAS;AACT,yEAAyE;AACzE,kCAAkC;AAClC,+BAA+B;AAC/B,qGAAqG;AACrG,iBAAiB;AACjB,YAAY;AACZ,8BAA8B;AAC9B,SAAS;AACT,KAAK","sourcesContent":["import { throwError, DefaultServiceProps } from \"@/utils\";\n\n// import { AccessKeyUserType } from \"@/services\";\n\nexport const serviceFactoryAllowUserTypes = {\n any: \"any\", // public \n operator: \"operator\",\n administrator: \"administrator\",\n} as const\n\nexport type ServiceFactoryAllowUserType = typeof serviceFactoryAllowUserTypes[keyof typeof serviceFactoryAllowUserTypes];\n\nexport const serviceFactoryNames = {\n AccountService: \"AccountService\",\n RegionService: \"RegionService\",\n OperatorService: \"OperatorService\",\n} as const\n\nexport type ServiceFactoryName = typeof serviceFactoryNames[keyof typeof serviceFactoryNames];\n\n// type FnWithSingleArg<Args extends object, Ret> = (args: Args) => Promise<Ret>;\n\n// export type RegisterServiceConfig<\n// Fn extends (...args: any[]) => Promise<any> = (...args: any[]) => Promise<any>\n// > = {\n// // fn: Fn;\n// fn: FnWithSingleArg<any, any>;\n// allowUserTypes?: readonly ServiceFactoryAllowUserType[];\n// actionName?: string;\n// };\n\n// export type RegisterServiceConfigs = Record<string, RegisterServiceConfig>;\n\nexport const ServiceFactory = <\n T extends Record<\n string,\n {\n fn: (...args: any[]) => unknown;\n allowUserTypes: readonly ServiceFactoryAllowUserType[];\n actionName?: string;\n }\n >\n>(\n serviceName: ServiceFactoryName,\n auth: DefaultServiceProps,\n methodConfigs: T\n): {\n [K in keyof T]: (...args: Parameters<T[K][\"fn\"]>) => ReturnType<T[K][\"fn\"]>;\n } => {\n const wrapped = {} as {\n [K in keyof T]: (...args: Parameters<T[K][\"fn\"]>) => ReturnType<T[K][\"fn\"]>;\n };\n\n for (const key in methodConfigs) {\n const { fn, allowUserTypes, actionName } = methodConfigs[key];\n\n if (allowUserTypes.includes(\"any\") === false) {\n // wrap with access control\n wrapped[key as keyof T] = ((...args: Parameters<typeof fn>) => {\n // if (!allowUserTypes.includes(auth.accessKeyUserType as ServiceFactoryAllowUserType)) {\n // throw new Error(\n // `[${serviceName}] ${auth.accessKeyUserType} not allowed to ${actionName ?? key}`\n // );\n // }\n\n const callerUserType: ServiceFactoryAllowUserType = auth.isOperator === true ? \"operator\" : \"administrator\"\n\n if (allowUserTypes.includes(callerUserType) === false) {\n throwError(`Access denied: ${serviceName}:${key}, Required: ${allowUserTypes.join(', ')}, Provided: ${callerUserType}`)\n }\n\n return fn(...args);\n }) as (...args: Parameters<T[typeof key][\"fn\"]>) => ReturnType<T[typeof key][\"fn\"]>;\n } else {\n // public method\n wrapped[key as keyof T] = fn as (...args: Parameters<T[typeof key][\"fn\"]>) => ReturnType<T[typeof key][\"fn\"]>;\n }\n }\n\n return wrapped;\n};\n\n// export const protectServiceOnlyOperator = <T extends (...args: any[]) => Promise<any>>(\n// fn: T,\n// auth: DefaultServiceProps,\n// actionName?: string\n// ) => {\n// return async (...args: Parameters<T>): Promise<ReturnType<T>> => {\n// if (!auth.isOperator) {\n// throw new Error(\n// `Only operator token/access key allowed to ${actionName ?? \"perform this action\"}`\n// );\n// }\n// return fn(...args);\n// };\n// };"]}
@@ -136,7 +136,7 @@ const AccessKeyService = (props) => {
136
136
  });
137
137
  return data[0] ?? null;
138
138
  };
139
- const listAccessKeys = async ({ limit, offset, filters, sortfield, sortorder, datatypes = [], skipFilterAccountId = false, revealEncryption = false }) => {
139
+ const listAccessKeys = async ({ limit, offset, filters = [], sortfield, sortorder, datatypes = [], skipFilterAccountId = false, revealEncryption = false }) => {
140
140
  let data = [];
141
141
  let sqlSelect = [
142
142
  `COUNT(ak.*) OVER() as filtered_count`,
@@ -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\n// retrive core configuration\nconst coreConfig = getCoreConfiguration()\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 // 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\n// retrive core configuration\nconst coreConfig = getCoreConfiguration()\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 // 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"]}
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AccountService = void 0;
4
4
  const utils_1 = require("../../utils");
5
5
  const models_1 = require("../../models");
6
- const utils_2 = require("../../utils");
7
6
  const lib_1 = require("../../lib");
7
+ const lib_2 = require("../../lib");
8
8
  const services_1 = require("../../services");
9
9
  const getCreatePayload = (data) => {
10
10
  return {
@@ -229,7 +229,7 @@ const AccountService = (props) => {
229
229
  });
230
230
  return data[0] ?? null;
231
231
  };
232
- const listAccounts = async ({ limit, offset, filters, sortfield, sortorder, datatypes = [] }) => {
232
+ const listAccounts = async ({ limit, offset, filters = [], sortfield, sortorder, datatypes = [] }) => {
233
233
  // only operator token/access key allowed to access
234
234
  // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)
235
235
  let data = [];
@@ -319,12 +319,12 @@ const AccountService = (props) => {
319
319
  // // updateAccount,
320
320
  // // removeAccounts,
321
321
  // // listAccounts
322
- // // validateAccountCodeIsUsed: registerService(validateAccountCodeIsUsed, rest, "validate account code is used"),
323
- // getAccount: registerService(["operator"], "AccountService", getAccount, rest, "get account"),
324
- // createAccount: registerService(["operator"], "AccountService", createAccount, rest, "create account"),
325
- // updateAccount: registerService(["operator"], "AccountService", updateAccount, rest, "update account"),
326
- // removeAccounts: registerService(["operator"], "AccountService", removeAccounts, rest, "remove accounts"),
327
- // listAccounts: registerService(["operator"], "AccountService", listAccounts, rest, "list accounts"),
322
+ // // validateAccountCodeIsUsed: ServiceFactory(validateAccountCodeIsUsed, rest, "validate account code is used"),
323
+ // getAccount: ServiceFactory(["operator"], "AccountService", getAccount, rest, "get account"),
324
+ // createAccount: ServiceFactory(["operator"], "AccountService", createAccount, rest, "create account"),
325
+ // updateAccount: ServiceFactory(["operator"], "AccountService", updateAccount, rest, "update account"),
326
+ // removeAccounts: ServiceFactory(["operator"], "AccountService", removeAccounts, rest, "remove accounts"),
327
+ // listAccounts: ServiceFactory(["operator"], "AccountService", listAccounts, rest, "list accounts"),
328
328
  // }
329
329
  const methodConfigs = {
330
330
  getAccount: { fn: getAccount, allowUserTypes: ["operator", "administrator"], actionName: "get account" },
@@ -333,7 +333,7 @@ const AccountService = (props) => {
333
333
  updateAccount: { fn: updateAccount, allowUserTypes: ["operator"], actionName: "update account" },
334
334
  removeAccounts: { fn: removeAccounts, allowUserTypes: ["operator"], actionName: "remove accounts" },
335
335
  };
336
- return (0, utils_2.registerService)("AccountService", rest, methodConfigs);
336
+ return (0, lib_2.ServiceFactory)("AccountService", rest, methodConfigs);
337
337
  };
338
338
  exports.AccountService = AccountService;
339
339
  //# sourceMappingURL=AccountService.js.map
@@ -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 {\n ModelUserFields,\n ModelAccountFields,\n AccountModel,\n ModelUserBranchFields,\n ModelBusinessFields,\n} from \"@/models\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps, registerService } from \"@/utils\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } 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,\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\"]) => {\n\n return {\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.status}`]: Boolean(data.status),\n [`${ModelAccountFields.account_code}`]: data.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\"]) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: accoundId,\n [`${ModelAccountFields.business_id}`]: data.businessId,\n [`${ModelAccountFields.name}`]: data.name,\n [`${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 [`bus.${ModelBusinessFields.state_id}`]: \"state_id\",\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 [`usrowner.${ModelUserFields.contact}`]: \"contact\",\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\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 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 createAccount = async ({ data }: AccountCreateProps) => {\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 // check account code cannot duplicated\n await validateAccountCodeIsUsed(data.accountCode)\n\n // const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode)\n\n // if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n // have to check the administrator allowed to create\n // if failed throw error\n\n // create account\n const _data = getCreatePayload(data)\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 (data?.administrator) {\n\n let userData = data?.administrator ?? {}\n\n let userPayload: UserCreateProps = {\n userType: \"administrator\",\n data: {\n user: {\n address: userData.address,\n contact: userData.contact,\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 // check account code cannot duplicated\n await validateAccountCodeIsUsed(data.accountCode)\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)\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 ({\n limit,\n offset,\n filters,\n sortfield,\n sortorder,\n datatypes = []\n }: 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\", \"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 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 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 user administrator\n if (ownerUserId) {\n responseUser = await userService.removeUsers({ ids: [BigInt(ownerUserId)] });\n }\n\n response.push({\n ...item,\n business: responseBusiness.length > 0 ? responseBusiness[0] : {},\n user: responseUser.length > 0 ? responseUser[0] : {}\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: registerService(validateAccountCodeIsUsed, rest, \"validate account code is used\"),\n // getAccount: registerService([\"operator\"], \"AccountService\", getAccount, rest, \"get account\"),\n // createAccount: registerService([\"operator\"], \"AccountService\", createAccount, rest, \"create account\"),\n // updateAccount: registerService([\"operator\"], \"AccountService\", updateAccount, rest, \"update account\"),\n // removeAccounts: registerService([\"operator\"], \"AccountService\", removeAccounts, rest, \"remove accounts\"),\n // listAccounts: registerService([\"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 registerService(\"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,qCAMkB;AAMlB,+BAAiI;AAEjI,+BAAsC;AAEtC,yCAMoB;AAsCpB,MAAM,gBAAgB,GAAG,CAAC,IAAgC,EAAE,EAAE;IAE1D,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,IAAI,CAAC,WAAW;KAC3D,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,EAAE;IAE1D,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,CAAC,GAAG,2BAAkB,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW;QACxD,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,OAAO,4BAAmB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU;IACnD,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,YAAY,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS;IAClD,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;AAEM,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,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,aAAa,GAAG,KAAK,EAAE,EAAE,IAAI,EAAsB,EAAE,EAAE;QAEzD,mDAAmD;QACnD,gGAAgG;QAEhG,uCAAuC;QACvC,MAAM,yBAAyB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEjD,0EAA0E;QAE1E,gGAAgG;QAEhG,oDAAoD;QACpD,wBAAwB;QAExB,iBAAiB;QACjB,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAEpC,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,IAAI,EAAE,aAAa,EAAE,CAAC;YAEtB,IAAI,QAAQ,GAAG,IAAI,EAAE,aAAa,IAAI,EAAE,CAAA;YAExC,IAAI,WAAW,GAAoB;gBAC/B,QAAQ,EAAE,eAAe;gBACzB,IAAI,EAAE;oBACF,IAAI,EAAE;wBACF,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,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,uCAAuC;QACvC,MAAM,yBAAyB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEjD,qFAAqF;QAErF,gGAAgG;QAEhG,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAEpC,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,uCAAuC;YACvC,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,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;YAC/B,MAAM,SAAS,GAAG,IAAI,EAAE,UAAU,IAAI,CAAC,CAAC;YACxC,MAAM,WAAW,GAAG,IAAI,EAAE,aAAa,IAAI,CAAC,CAAC;YAC7C,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,MAAM,WAAW,GAAG,IAAA,sBAAW,EAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAA;YAErG,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,4BAA4B;YAC5B,IAAI,WAAW,EAAE,CAAC;gBACd,YAAY,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;YACjF,CAAC;YAED,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,IAAI,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;aACvD,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;AA7VY,QAAA,cAAc,kBA6V1B","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport {\n ModelUserFields,\n ModelAccountFields,\n AccountModel,\n ModelUserBranchFields,\n ModelBusinessFields,\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,\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\"]) => {\n\n return {\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.status}`]: Boolean(data.status),\n [`${ModelAccountFields.account_code}`]: data.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\"]) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: accoundId,\n [`${ModelAccountFields.business_id}`]: data.businessId,\n [`${ModelAccountFields.name}`]: data.name,\n [`${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 [`bus.${ModelBusinessFields.state_id}`]: \"state_id\",\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 [`usrowner.${ModelUserFields.contact}`]: \"contact\",\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\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 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 createAccount = async ({ data }: AccountCreateProps) => {\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 // check account code cannot duplicated\n await validateAccountCodeIsUsed(data.accountCode)\n\n // const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode)\n\n // if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n // have to check the administrator allowed to create\n // if failed throw error\n\n // create account\n const _data = getCreatePayload(data)\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 (data?.administrator) {\n\n let userData = data?.administrator ?? {}\n\n let userPayload: UserCreateProps = {\n userType: \"administrator\",\n data: {\n user: {\n address: userData.address,\n contact: userData.contact,\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 // check account code cannot duplicated\n await validateAccountCodeIsUsed(data.accountCode)\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)\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\", \"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 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 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 user administrator\n if (ownerUserId) {\n responseUser = await userService.removeUsers({ ids: [BigInt(ownerUserId)] });\n }\n\n response.push({\n ...item,\n business: responseBusiness.length > 0 ? responseBusiness[0] : {},\n user: responseUser.length > 0 ? responseUser[0] : {}\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"]}
@@ -132,7 +132,7 @@ const UserBranchService = (props) => {
132
132
  });
133
133
  return data;
134
134
  };
135
- const listUserBranches = async ({ limit, offset, filters, sortfield, sortorder, datatypes = [] }) => {
135
+ const listUserBranches = async ({ limit, offset, filters = [], sortfield, sortorder, datatypes = [] }) => {
136
136
  let sqlSelect = [];
137
137
  let sqlRelation = [];
138
138
  let sqlGroupBy = [];
@@ -1 +1 @@
1
- {"version":3,"file":"UserBranchService.js","sourceRoot":"","sources":["../../../src/services/branch/UserBranchService.ts"],"names":[],"mappings":";;;AAEA,qCAOkB;AAElB,+BAAwL;AAK3K,QAAA,mBAAmB,GAAG;IAC/B,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;CACvB,CAAA;AAEY,QAAA,eAAe,GAAG;IAC3B,MAAM,EAAE,QAAQ;IAChB,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;CAC9B,CAAA;AA2FV,8FAA8F;AAE9F,uEAAuE;AAEvE,mBAAmB;AACnB,qCAAqC;AACrC,uDAAuD;AACvD,6DAA6D;AAC7D,2DAA2D;AAC3D,yDAAyD;AACzD,mEAAmE;AACnE,qEAAqE;AACrE,iEAAiE;AACjE,2DAA2D;AAC3D,oEAAoE;AACpE,uDAAuD;AACvD,6DAA6D;AAC7D,mEAAmE;AACnE,iEAAiE;AACjE,iEAAiE;AACjE,kEAAkE;AAClE,4EAA4E;AAC5E,iFAAiF;AACjF,sEAAsE;AACtE,+DAA+D;AAC/D,qEAAqE;AACrE,mEAAmE;AACnE,YAAY;AACZ,QAAQ;AAER,mBAAmB;AAEnB,IAAI;AAEJ,IAAI,aAAa,GAAG;IAChB,CAAC,OAAO,8BAAqB,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;IACvD,CAAC,OAAO,8BAAqB,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS;IACnD,CAAC,OAAO,8BAAqB,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS;IACnD,CAAC,OAAO,8BAAqB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU;IACrD,CAAC,OAAO,8BAAqB,CAAC,UAAU,EAAE,CAAC,EAAE,YAAY;IACzD,CAAC,OAAO,8BAAqB,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;IACvD,CAAC,OAAO,8BAAqB,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;IACvD,CAAC,OAAO,8BAAqB,CAAC,WAAW,EAAE,CAAC,EAAE,aAAa;IAC3D,CAAC,OAAO,8BAAqB,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IACjE,CAAC,OAAO,8BAAqB,CAAC,YAAY,EAAE,CAAC,EAAE,cAAc;IAC7D,CAAC,OAAO,8BAAqB,CAAC,WAAW,EAAE,CAAC,EAAE,aAAa;IAC3D,CAAC,OAAO,8BAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ;IACjD,CAAC,OAAO,8BAAqB,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO;IAC/C,CAAC,OAAO,8BAAqB,CAAC,WAAW,EAAE,CAAC,EAAE,aAAa;IAC3D,CAAC,OAAO,8BAAqB,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;IACvD,CAAC,OAAO,8BAAqB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU;IACrD,CAAC,OAAO,8BAAqB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU;IACrD,CAAC,OAAO,8BAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ;IACjD,CAAC,OAAO,8BAAqB,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM;CAChD,CAAA;AAED,IAAI,eAAe,GAAG;IAClB,CAAC,OAAO,2BAAkB,CAAC,YAAY,EAAE,CAAC,EAAE,cAAc;IAC1D,CAAC,SAAS,yBAAgB,CAAC,UAAU,EAAE,CAAC,EAAE,YAAY;IACtD,CAAC,QAAQ,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;CACrD,CAAA;AAED,IAAI,gBAAgB,GAAG;IACnB,CAAC,OAAO,8BAAqB,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IACjE,CAAC,WAAW,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAC/D,CAAC,OAAO,8BAAqB,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IACjE,CAAC,WAAW,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAC/D,CAAC,OAAO,8BAAqB,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU;IACrD,CAAC,OAAO,8BAAqB,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS;IACnD,CAAC,OAAO,8BAAqB,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;CAC1D,CAAA;AAEM,MAAM,iBAAiB,GAAG,CAAC,KAA6B,EAAE,EAAE;IAE/D,MAAM,EACF,cAAc,GAAG,QAAQ,EACzB,GAAG,IAAI,EACV,GAAG,KAAK,CAAA;IAET,MAAM,eAAe,GAAG,IAAA,wBAAe,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAEpD,wGAAwG;IAExG,2DAA2D;IAE3D,wDAAwD;IAExD,oBAAoB;IACpB,+EAA+E;IAC/E,QAAQ;IAER,gFAAgF;IAEhF,sBAAsB;IACtB,IAAI;IAEJ,MAAM,aAAa,GAAG,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,GAAG,EAAE,EAAsB,EAAE,EAAE;QAEjF,qBAAqB;QAErB,iCAAiC;QACjC,iHAAiH;QACjH,IAAI;QAEJ,0CAA0C;QAC1C,sEAAsE;QACtE,IAAI;QAEJ,2CAA2C;QAC3C,sEAAsE;QACtE,IAAI;QAEJ,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CAAC;YAClC,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,8BAAqB,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YAC9F,SAAS,EAAE,GAAG,8BAAqB,CAAC,SAAS,EAAE;YAC/C,SAAS,EAAE,KAAK;YAChB,SAAS;SACZ,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAEvB,eAAe;QACf,4CAA4C;QAC5C,IAAI;QAEJ,OAAO,IAAI,CAAA;IACf,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,SAAS,GAAG,EAAE,EAA8B,EAAE,EAAE;QAExH,IAAI,OAAO,GAAG;YACV,EAAE,KAAK,EAAE,GAAG,8BAAqB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;SACvE,CAAA;QAER,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,GAAG,8BAAqB,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;aACnE,CAAC,CAAA;QACN,CAAC;QAED,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CAAC;YAClC,KAAK;YACL,MAAM,EAAE,CAAC;YACT,OAAO;YACP,SAAS,EAAE,GAAG,8BAAqB,CAAC,OAAO,EAAE;YAC7C,SAAS,EAAE,KAAK;YAChB,SAAS;SACZ,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACf,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,EAAE,EAC5B,KAAK,EACL,MAAM,EACN,OAAO,EACP,SAAS,EACT,SAAS,EACT,SAAS,GAAG,EAAE,EACI,EAAE,EAAE;QAEtB,IAAI,SAAS,GAAa,EAAE,CAAA;QAC5B,IAAI,WAAW,GAAa,EAAE,CAAA;QAC9B,IAAI,UAAU,GAAa,EAAE,CAAA;QAE7B,IAAI,YAAY,GAAa,EAAE,CAAA;QAC/B,IAAI,cAAc,GAAa,EAAE,CAAA;QAEjC,SAAS,GAAG;YACR,IAAA,oBAAc,EAAC,EAAE,EAAE,aAAa,CAAC;YACjC,IAAA,oBAAc,EAAC,EAAE,EAAE,eAAe,CAAC;YACnC,IAAA,oBAAc,EAAC,EAAE,EAAE,gBAAgB,CAAC;SACvC,CAAA;QAED,WAAW,GAAG;YACV,IAAA,sBAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,iCAAiC,EAAE,sBAAsB,EAAE,qBAAqB,CAAC,CAAC;YACvI,IAAA,sBAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,+BAA+B,EAAE,wBAAwB,EAAE,uBAAuB,CAAC,CAAC;YACxI,IAAA,sBAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,4BAA4B,EAAE,uBAAuB,EAAE,sBAAsB,CAAC,CAAC;YACjI,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,qBAAqB;QACrB,kKAAkK;QAClK,IAAI;QAEJ,UAAU,GAAG;YACT,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;YAC7B,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;YAC/B,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;SACnC,CAAA;QAED,IAAI,aAAa,GAAG;YAChB,GAAG,aAAa;YAChB,GAAG,eAAe;YAClB,GAAG,gBAAgB;SACtB,CAAA;QAED,2EAA2E;QAE3E,0IAA0I;QAE1I,4GAA4G;QAE5G,iFAAiF;QAEjF,uIAAuI;QACvI,uRAAuR;QACvR,sFAAsF;QACtF,IAAI;QAEJ,yDAAyD;QAEzD,+EAA+E;QAE/E,+IAA+I;QAE/I,iHAAiH;QAEjH,8EAA8E;QAC9E,wFAAwF;QACxF,0DAA0D;QAC1D,aAAa;QACb,QAAQ;QAER,wTAAwT;QAExT,IAAI;QAEJ,mEAAmE;QAEnE,2EAA2E;QAE3E,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,4BAA4B;QAC5B,MAAM,MAAM,GAAG,IAAA,uBAAiB,EAAC;YAC7B,SAAS,EAAE,UAAU;YACrB,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,YAAY,CAAC;YAC1C,WAAW,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,cAAc,CAAC;YAChD,QAAQ;YACR,UAAU;YACV,UAAU;YACV,cAAc;SACjB,CAAC,CAAA;QAEF,IAAI,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAE5C,gBAAgB;QAChB,MAAM,WAAW,GAAG,IAAA,4BAAsB,EAAC;YACvC,SAAS,EAAE,UAAU;YACrB,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS;YACT,WAAW;YACX,QAAQ;YACR,UAAU;YACV,UAAU;SACb,CAAC,CAAA;QAEF,IAAI,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAElD,MAAM,QAAQ,GAAG;YACb,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3D,CAAA;QAED,OAAO,QAAQ,CAAA;IAEnB,CAAC,CAAC;IAEF,2GAA2G;IAE3G,+DAA+D;IAE/D,6FAA6F;IAE7F,sBAAsB;IACtB,KAAK;IAEL,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAEhC,IAAI,IAAI,GAAU,EAAE,CAAC;QACrB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,IAAI,cAAc,KAAK,QAAQ,EAAE,CAAC;YAC9B,wCAAwC;QAC5C,CAAC;QAED,8CAA8C;QAE9C,wBAAwB;QACxB,4CAA4C;QAC5C,IAAI;QAEJ,OAAO,IAAI,CAAA;IACf,CAAC,CAAC;IAEF,OAAO;QACH,sBAAsB;QACtB,aAAa;QACb,qBAAqB;QACrB,gBAAgB;QAChB,eAAe;QACf,sBAAsB;KACzB,CAAA;AAEL,CAAC,CAAA;AAtPY,QAAA,iBAAiB,qBAsP7B","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport {\n UserBranchModel,\n ModelUserFields,\n ModelUserBranchFields,\n ModelCountryFields,\n ModelStateFields,\n ModelAreaFields\n} from \"@/models\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, buildInjectionFieldsSqlSelect, buildSqlRawSelectCount } from \"@/lib\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\nimport { DefaultServiceProps } from \"@/utils\";\n\nexport const userBranchUserTypes = {\n customer: \"customer\",\n retailer: \"retailer\"\n}\n\nexport const userBranchTypes = {\n branch: \"branch\",\n branch_shipping: \"branch_shipping\",\n shipping_address: \"shipping_address\"\n} as const\n\nexport type UserBranchType = typeof userBranchTypes[keyof typeof userBranchTypes]\n\nexport type UserBranchUserType = typeof userBranchUserTypes[keyof typeof userBranchUserTypes]\n\nexport type UserBranchServiceProps = DefaultServiceProps & {\n userBranchUserType: UserBranchUserType,\n userBranchType: UserBranchType,\n};\n\nexport type UserBranchGetProps = QueryGet & {\n userBranchId: number,\n};\n\nexport type UserBranchByUserIdGetProps = QueryGet & {\n userId: number,\n onlyHQ?: boolean\n limit?: number\n};\n\nexport type UserBranchListProps = QueryList & {\n // id: number,\n};\n\nexport type UserBranchRemoveProps = {\n userBranchIds: number[]\n};\n\nexport type UserBranchCreateProps = {\n userBranchType?: UserBranchType,\n data:\n // driver_image\n {\n administrator: {\n filename: string;\n // contentType: string;\n // bucketName: string;\n // projectId: string;\n // foldernameYear: string;\n // foldernameMonth: string;\n // foldernameDay: string;\n // uploadType: FileUploadType,\n // bufferFilename: string,\n // assetUrl: string,\n // referenceId: string,\n // referenceLabel: string,\n // referenceType: string,\n // batchCode?: string,\n // fileSizeBytes: number,\n // fileCompressFormat: FileCompressFormat,\n // requestFileSizeBytes: number,\n // requestFilename: string,\n // reference2Id: string,\n // reference2Label: string,\n // reference2Type: string,\n }\n }\n}\n\nexport type UserBranchUpdateProps = {\n userBranchType?: UserBranchType,\n data:\n // driver_image\n {\n administrator: {\n filename: string;\n // contentType: string;\n // bucketName: string;\n // projectId: string;\n // foldernameYear: string;\n // foldernameMonth: string;\n // foldernameDay: string;\n // uploadType: FileUploadType,\n // bufferFilename: string,\n // assetUrl: string,\n // referenceId: string,\n // referenceLabel: string,\n // referenceType: string,\n // batchCode?: string,\n // fileSizeBytes: number,\n // fileCompressFormat: FileCompressFormat,\n // requestFileSizeBytes: number,\n // requestFilename: string,\n // reference2Id: string,\n // reference2Label: string,\n // reference2Type: string,\n }\n }\n}\n\n// const getCreatePayload = (branchType: BranchType, data: UserBranchCreateProps[\"data\"]) => {\n\n// if (branchType === \"administrator\" && \"administrator\" in data) {\n\n// return {\n// user_type: branchType,\n// // file_name: data.driverImage.filename,\n// // content_type: data.driverImage.contentType,\n// // bucket_name: data.driverImage.bucketName,\n// // project_id: data.driverImage.projectId,\n// // foldername_year: data.driverImage.foldernameYear,\n// // foldername_month: data.driverImage.foldernameMonth,\n// // foldername_day: data.driverImage.foldernameDay,\n// // upload_type: data.driverImage.uploadType,\n// // buffer_file_name: data.driverImage.bufferFilename,\n// // asset_url: data.driverImage.assetUrl,\n// // reference_id: data.driverImage.referenceId,\n// // reference_label: data.driverImage.referenceLabel,\n// // reference_type: data.driverImage.referenceType,\n// // batch_code: data?.driverImage?.batchCode ?? \"\",\n// // file_size_bytes: data.driverImage.fileSizeBytes,\n// // file_compress_format: data.driverImage.fileCompressFormat,\n// // request_file_size_bytes: data.driverImage.requestFileSizeBytes,\n// // request_file_name: data.driverImage.requestFilename,\n// // reference2_id: data.driverImage.reference2Id,\n// // reference2_label: data.driverImage.reference2Label,\n// // reference2_type: data.driverImage.reference2Type,\n// }\n// }\n\n// return false\n\n// }\n\nlet mainSqlSelect = {\n [`brn.${ModelUserBranchFields.branch_id}`]: \"branch_id\",\n [`brn.${ModelUserBranchFields.user_id}`]: \"user_id\",\n [`brn.${ModelUserBranchFields.area_id}`]: \"area_id\",\n [`brn.${ModelUserBranchFields.state_id}`]: \"state_id\",\n [`brn.${ModelUserBranchFields.country_id}`]: \"country_id\",\n [`brn.${ModelUserBranchFields.address_1}`]: \"address_1\",\n [`brn.${ModelUserBranchFields.address_2}`]: \"address_2\",\n [`brn.${ModelUserBranchFields.branch_code}`]: \"branch_code\",\n [`brn.${ModelUserBranchFields.branch_contact}`]: \"branch_contact\",\n [`brn.${ModelUserBranchFields.branch_email}`]: \"branch_email\",\n [`brn.${ModelUserBranchFields.branch_name}`]: \"branch_name\",\n [`brn.${ModelUserBranchFields.status}`]: \"status\",\n [`brn.${ModelUserBranchFields.is_hq}`]: \"is_hq\",\n [`brn.${ModelUserBranchFields.pic_contact}`]: \"pic_contact\",\n [`brn.${ModelUserBranchFields.pic_email}`]: \"pic_email\",\n [`brn.${ModelUserBranchFields.pic_name}`]: \"pic_name\",\n [`brn.${ModelUserBranchFields.postcode}`]: \"postcode\",\n [`brn.${ModelUserBranchFields.remark}`]: \"remark\",\n [`brn.${ModelUserBranchFields.type}`]: \"type\",\n}\n\nlet regionSqlSelect = {\n [`cou.${ModelCountryFields.country_name}`]: \"country_name\",\n [`state.${ModelStateFields.state_name}`]: \"state_name\",\n [`area.${ModelAreaFields.area_name}`]: \"area_name\",\n}\n\nlet defaultSqlSelect = {\n [`brn.${ModelUserBranchFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`brn.${ModelUserBranchFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`brn.${ModelUserBranchFields.isdelete}`]: \"isdelete\",\n [`brn.${ModelUserBranchFields.istrash}`]: \"istrash\",\n [`brn.${ModelUserBranchFields.accountid}`]: \"accountid\",\n}\n\nexport const UserBranchService = (props: UserBranchServiceProps) => {\n\n const {\n userBranchType = \"branch\",\n ...rest\n } = props\n\n const userBranchModel = UserBranchModel({ ...rest })\n\n // const createUserBranch = async ({ data, branchType: overrideBranchType }: UserBranchCreateProps) => {\n\n // const _branchType = overrideBranchType || branchType\n\n // const _data = getCreatePayload(_branchType, data)\n\n // if (!_data) {\n // throw new Error(`Invalid create payload: ${JSON.stringify(_data)}`);\n // }\n\n // const response = await userModel.create({ data: _data, createUserId: 0 })\n\n // return response\n // }\n\n const getUserBranch = async ({ userBranchId, datatypes = [] }: UserBranchGetProps) => {\n\n // let data: any = {}\n\n // if (branchType === \"branch\") {\n // // data = await customerService.getCustomer({ id, datatypes: datatypes as CustomerGetProps[\"datatypes\"] })\n // }\n\n // if (branchType === \"branch_shipping\") {\n // // data = await administratorService.getAdministrator({ id, })\n // }\n\n // if (branchType === \"shipping_address\") {\n // // data = await administratorService.getAdministrator({ id, })\n // }\n\n let { data } = await listUserBranches({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelUserBranchFields.branch_id}`, operator: \"=\", value: userBranchId }],\n sortfield: `${ModelUserBranchFields.branch_id}`,\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n // if (!data) {\n // throw new Error(`Invalid id: ${id}`);\n // }\n\n return data\n };\n\n const getUserBranchByUserId = async ({ userId, onlyHQ = false, limit = 100, datatypes = [] }: UserBranchByUserIdGetProps) => {\n\n let filters = [\n { field: `${ModelUserBranchFields.user_id}`, operator: \"=\", value: userId }\n ] as any\n\n if (onlyHQ === true) {\n filters.push({\n field: `${ModelUserBranchFields.is_hq}`, operator: \"=\", value: 1\n })\n }\n\n let { data } = await listUserBranches({\n limit,\n offset: 0,\n filters,\n sortfield: `${ModelUserBranchFields.user_id}`,\n sortorder: \"ASC\",\n datatypes\n })\n\n return data\n };\n\n const listUserBranches = async ({\n limit,\n offset,\n filters,\n sortfield,\n sortorder,\n datatypes = []\n }: UserBranchListProps) => {\n\n let sqlSelect: string[] = []\n let sqlRelation: string[] = []\n let sqlGroupBy: string[] = []\n\n let sqlSelectAgg: string[] = []\n let sqlRelationAgg: string[] = []\n\n sqlSelect = [\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, regionSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n sqlRelation = [\n buildSqlRelation(\"left\", \"brn\", \"countries\", \"cou\", [\"brn.country_id = cou.country_id\", \"cou.isdelete = false\", \"cou.istrash = false\"]),\n buildSqlRelation(\"left\", \"brn\", \"states\", \"state\", [\"brn.state_id = state.state_id\", \"state.isdelete = false\", \"state.istrash = false\"]),\n buildSqlRelation(\"left\", \"brn\", \"areas\", \"area\", [\"brn.area_id = area.area_id\", \"area.isdelete = false\", \"area.istrash = false\"]),\n buildSqlRelation(\"left\", \"brn\", \"users\", \"creator\", [\"brn.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"brn\", \"users\", \"updater\", [\"brn.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n // sqlRelationAgg = [\n // buildSqlRelation(\"left\", \"brn\", \"document_items\", \"docitm\", [\"brn.document_id = docitm.document_id\", \"docitm.isdelete = false\", \"docitm.istrash = false\"]),\n // ]\n\n sqlGroupBy = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(regionSqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...regionSqlSelect,\n ...defaultSqlSelect\n }\n\n // if (datatypes.includes(salesOrderDataTypes.salesOrderInjectionFields)) {\n\n // let activeInjectionFields = await injectionFieldService.listActiveInjectionFields(\"document\", documentTypeKey.toLowerCase() as any)\n\n // const salesOrderInjectionFieldSqlSelect = buildInjectionFieldsSqlSelect(\"dif\", activeInjectionFields)\n\n // filterColumns = { ...filterColumns, ...salesOrderInjectionFieldSqlSelect }\n\n // sqlSelect = [...sqlSelect, ...(activeInjectionFields.length > 0 ? [buildSqlSelect(``, salesOrderInjectionFieldSqlSelect)] : [])]\n // sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"brn\", \"document_injection_fields\", \"dif\", [\"brn.document_id = dif.document_id\", \"dif.field_ref = 'document'\", `dif.field_module = '${documentTypeKey.toLowerCase()}'`, \"dif.isdelete = false\", \"dif.istrash = false\"])]\n // sqlGroupBy = [...sqlGroupBy, ...Object.keys(salesOrderInjectionFieldSqlSelect)]\n // }\n\n // let itemSqlSelectAgg = buildDocumentItemSqlSelectAgg()\n\n // if (datatypes.includes(salesOrderDataTypes.salesOrderItemInjectionFields)) {\n\n // let activeInjectionFields = await injectionFieldService.listActiveInjectionFields(\"document_item\", documentTypeKey.toLowerCase() as any)\n\n // const salesOrderItemInjectionFieldSqlSelect = buildInjectionFieldsSqlSelect(\"difi\", activeInjectionFields)\n\n // if (Object.entries(salesOrderItemInjectionFieldSqlSelect).length > 0) {\n // Object.entries(salesOrderItemInjectionFieldSqlSelect).map(([col, alias]) => {\n // itemSqlSelectAgg.push(`'${alias}', ${col}`)\n // })\n // }\n\n // sqlRelationAgg = [...sqlRelationAgg, buildSqlRelation(\"left\", \"docitm\", \"document_injection_fields\", \"difi\", [\"docitm.document_item_id = difi.document_item_id\", \"difi.field_ref = 'document_item'\", `difi.field_module = '${documentTypeKey.toLowerCase()}'`, \"difi.isdelete = false\", \"difi.istrash = false\"])]\n\n // }\n\n // let itemSqlSelect = buildDocumentItemSqlSelect(itemSqlSelectAgg)\n\n // sqlSelectAgg = [...sqlSelectAgg, ...[buildSqlSelect(``, itemSqlSelect)]]\n\n let sqlWhere = [\n `brn.isdelete = false`,\n `brn.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 // get the data (pagination)\n const sqlRaw = buildSqlRawSelect({\n tableName: \"branches\",\n mainAlias: \"brn\",\n accountId: rest.accountId,\n sqlSelect: [...sqlSelect, ...sqlSelectAgg],\n sqlRelation: [...sqlRelation, ...sqlRelationAgg],\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n let data = await userBranchModel.raw(sqlRaw)\n\n // get the count\n const sqlRawCount = buildSqlRawSelectCount({\n tableName: \"branches\",\n mainAlias: \"brn\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby\n })\n\n let count = await userBranchModel.raw(sqlRawCount)\n\n const response = {\n data,\n total: data.length ? Number(count[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n // const removeUserBranches = async ({ userBranchIds }: UserBranchRemoveProps): Promise<User[] | null> => {\n\n // if (!userBranchIds.length) throwError('id is required');\n\n // const response = await userModel.trash({ userBranchIds, updateUserId: actionUserId });\n\n // return response\n // };\n\n const getUserBranchDataTypes = () => {\n\n let data: any[] = [];\n let total = 0;\n\n if (userBranchType === \"branch\") {\n // data = customerService.getDataTypes()\n }\n\n // const data = await userModel.list(payload);\n\n // if (!data?.file_id) {\n // throw new Error(`Invalid id: ${id}`);\n // }\n\n return data\n };\n\n return {\n // uploadFileByBuffer,\n getUserBranch,\n getUserBranchByUserId,\n listUserBranches,\n // removeUsers,\n getUserBranchDataTypes\n }\n\n}\n\n"]}
1
+ {"version":3,"file":"UserBranchService.js","sourceRoot":"","sources":["../../../src/services/branch/UserBranchService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport {\n UserBranchModel,\n ModelUserFields,\n ModelUserBranchFields,\n ModelCountryFields,\n ModelStateFields,\n ModelAreaFields\n} from \"@/models\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, buildInjectionFieldsSqlSelect, buildSqlRawSelectCount } from \"@/lib\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\nimport { DefaultServiceProps } from \"@/utils\";\n\nexport const userBranchUserTypes = {\n customer: \"customer\",\n retailer: \"retailer\"\n}\n\nexport const userBranchTypes = {\n branch: \"branch\",\n branch_shipping: \"branch_shipping\",\n shipping_address: \"shipping_address\"\n} as const\n\nexport type UserBranchType = typeof userBranchTypes[keyof typeof userBranchTypes]\n\nexport type UserBranchUserType = typeof userBranchUserTypes[keyof typeof userBranchUserTypes]\n\nexport type UserBranchServiceProps = DefaultServiceProps & {\n userBranchUserType: UserBranchUserType,\n userBranchType: UserBranchType,\n};\n\nexport type UserBranchGetProps = QueryGet & {\n userBranchId: number,\n};\n\nexport type UserBranchByUserIdGetProps = QueryGet & {\n userId: number,\n onlyHQ?: boolean\n limit?: number\n};\n\nexport type UserBranchListProps = QueryList & {\n // id: number,\n};\n\nexport type UserBranchRemoveProps = {\n userBranchIds: number[]\n};\n\nexport type UserBranchCreateProps = {\n userBranchType?: UserBranchType,\n data:\n // driver_image\n {\n administrator: {\n filename: string;\n // contentType: string;\n // bucketName: string;\n // projectId: string;\n // foldernameYear: string;\n // foldernameMonth: string;\n // foldernameDay: string;\n // uploadType: FileUploadType,\n // bufferFilename: string,\n // assetUrl: string,\n // referenceId: string,\n // referenceLabel: string,\n // referenceType: string,\n // batchCode?: string,\n // fileSizeBytes: number,\n // fileCompressFormat: FileCompressFormat,\n // requestFileSizeBytes: number,\n // requestFilename: string,\n // reference2Id: string,\n // reference2Label: string,\n // reference2Type: string,\n }\n }\n}\n\nexport type UserBranchUpdateProps = {\n userBranchType?: UserBranchType,\n data:\n // driver_image\n {\n administrator: {\n filename: string;\n // contentType: string;\n // bucketName: string;\n // projectId: string;\n // foldernameYear: string;\n // foldernameMonth: string;\n // foldernameDay: string;\n // uploadType: FileUploadType,\n // bufferFilename: string,\n // assetUrl: string,\n // referenceId: string,\n // referenceLabel: string,\n // referenceType: string,\n // batchCode?: string,\n // fileSizeBytes: number,\n // fileCompressFormat: FileCompressFormat,\n // requestFileSizeBytes: number,\n // requestFilename: string,\n // reference2Id: string,\n // reference2Label: string,\n // reference2Type: string,\n }\n }\n}\n\n// const getCreatePayload = (branchType: BranchType, data: UserBranchCreateProps[\"data\"]) => {\n\n// if (branchType === \"administrator\" && \"administrator\" in data) {\n\n// return {\n// user_type: branchType,\n// // file_name: data.driverImage.filename,\n// // content_type: data.driverImage.contentType,\n// // bucket_name: data.driverImage.bucketName,\n// // project_id: data.driverImage.projectId,\n// // foldername_year: data.driverImage.foldernameYear,\n// // foldername_month: data.driverImage.foldernameMonth,\n// // foldername_day: data.driverImage.foldernameDay,\n// // upload_type: data.driverImage.uploadType,\n// // buffer_file_name: data.driverImage.bufferFilename,\n// // asset_url: data.driverImage.assetUrl,\n// // reference_id: data.driverImage.referenceId,\n// // reference_label: data.driverImage.referenceLabel,\n// // reference_type: data.driverImage.referenceType,\n// // batch_code: data?.driverImage?.batchCode ?? \"\",\n// // file_size_bytes: data.driverImage.fileSizeBytes,\n// // file_compress_format: data.driverImage.fileCompressFormat,\n// // request_file_size_bytes: data.driverImage.requestFileSizeBytes,\n// // request_file_name: data.driverImage.requestFilename,\n// // reference2_id: data.driverImage.reference2Id,\n// // reference2_label: data.driverImage.reference2Label,\n// // reference2_type: data.driverImage.reference2Type,\n// }\n// }\n\n// return false\n\n// }\n\nlet mainSqlSelect = {\n [`brn.${ModelUserBranchFields.branch_id}`]: \"branch_id\",\n [`brn.${ModelUserBranchFields.user_id}`]: \"user_id\",\n [`brn.${ModelUserBranchFields.area_id}`]: \"area_id\",\n [`brn.${ModelUserBranchFields.state_id}`]: \"state_id\",\n [`brn.${ModelUserBranchFields.country_id}`]: \"country_id\",\n [`brn.${ModelUserBranchFields.address_1}`]: \"address_1\",\n [`brn.${ModelUserBranchFields.address_2}`]: \"address_2\",\n [`brn.${ModelUserBranchFields.branch_code}`]: \"branch_code\",\n [`brn.${ModelUserBranchFields.branch_contact}`]: \"branch_contact\",\n [`brn.${ModelUserBranchFields.branch_email}`]: \"branch_email\",\n [`brn.${ModelUserBranchFields.branch_name}`]: \"branch_name\",\n [`brn.${ModelUserBranchFields.status}`]: \"status\",\n [`brn.${ModelUserBranchFields.is_hq}`]: \"is_hq\",\n [`brn.${ModelUserBranchFields.pic_contact}`]: \"pic_contact\",\n [`brn.${ModelUserBranchFields.pic_email}`]: \"pic_email\",\n [`brn.${ModelUserBranchFields.pic_name}`]: \"pic_name\",\n [`brn.${ModelUserBranchFields.postcode}`]: \"postcode\",\n [`brn.${ModelUserBranchFields.remark}`]: \"remark\",\n [`brn.${ModelUserBranchFields.type}`]: \"type\",\n}\n\nlet regionSqlSelect = {\n [`cou.${ModelCountryFields.country_name}`]: \"country_name\",\n [`state.${ModelStateFields.state_name}`]: \"state_name\",\n [`area.${ModelAreaFields.area_name}`]: \"area_name\",\n}\n\nlet defaultSqlSelect = {\n [`brn.${ModelUserBranchFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`brn.${ModelUserBranchFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`brn.${ModelUserBranchFields.isdelete}`]: \"isdelete\",\n [`brn.${ModelUserBranchFields.istrash}`]: \"istrash\",\n [`brn.${ModelUserBranchFields.accountid}`]: \"accountid\",\n}\n\nexport const UserBranchService = (props: UserBranchServiceProps) => {\n\n const {\n userBranchType = \"branch\",\n ...rest\n } = props\n\n const userBranchModel = UserBranchModel({ ...rest })\n\n // const createUserBranch = async ({ data, branchType: overrideBranchType }: UserBranchCreateProps) => {\n\n // const _branchType = overrideBranchType || branchType\n\n // const _data = getCreatePayload(_branchType, data)\n\n // if (!_data) {\n // throw new Error(`Invalid create payload: ${JSON.stringify(_data)}`);\n // }\n\n // const response = await userModel.create({ data: _data, createUserId: 0 })\n\n // return response\n // }\n\n const getUserBranch = async ({ userBranchId, datatypes = [] }: UserBranchGetProps) => {\n\n // let data: any = {}\n\n // if (branchType === \"branch\") {\n // // data = await customerService.getCustomer({ id, datatypes: datatypes as CustomerGetProps[\"datatypes\"] })\n // }\n\n // if (branchType === \"branch_shipping\") {\n // // data = await administratorService.getAdministrator({ id, })\n // }\n\n // if (branchType === \"shipping_address\") {\n // // data = await administratorService.getAdministrator({ id, })\n // }\n\n let { data } = await listUserBranches({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelUserBranchFields.branch_id}`, operator: \"=\", value: userBranchId }],\n sortfield: `${ModelUserBranchFields.branch_id}`,\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n // if (!data) {\n // throw new Error(`Invalid id: ${id}`);\n // }\n\n return data\n };\n\n const getUserBranchByUserId = async ({ userId, onlyHQ = false, limit = 100, datatypes = [] }: UserBranchByUserIdGetProps) => {\n\n let filters = [\n { field: `${ModelUserBranchFields.user_id}`, operator: \"=\", value: userId }\n ] as any\n\n if (onlyHQ === true) {\n filters.push({\n field: `${ModelUserBranchFields.is_hq}`, operator: \"=\", value: 1\n })\n }\n\n let { data } = await listUserBranches({\n limit,\n offset: 0,\n filters,\n sortfield: `${ModelUserBranchFields.user_id}`,\n sortorder: \"ASC\",\n datatypes\n })\n\n return data\n };\n\n const listUserBranches = async ({\n limit,\n offset,\n filters = [],\n sortfield,\n sortorder,\n datatypes = []\n }: UserBranchListProps) => {\n\n let sqlSelect: string[] = []\n let sqlRelation: string[] = []\n let sqlGroupBy: string[] = []\n\n let sqlSelectAgg: string[] = []\n let sqlRelationAgg: string[] = []\n\n sqlSelect = [\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, regionSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n sqlRelation = [\n buildSqlRelation(\"left\", \"brn\", \"countries\", \"cou\", [\"brn.country_id = cou.country_id\", \"cou.isdelete = false\", \"cou.istrash = false\"]),\n buildSqlRelation(\"left\", \"brn\", \"states\", \"state\", [\"brn.state_id = state.state_id\", \"state.isdelete = false\", \"state.istrash = false\"]),\n buildSqlRelation(\"left\", \"brn\", \"areas\", \"area\", [\"brn.area_id = area.area_id\", \"area.isdelete = false\", \"area.istrash = false\"]),\n buildSqlRelation(\"left\", \"brn\", \"users\", \"creator\", [\"brn.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"brn\", \"users\", \"updater\", [\"brn.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n // sqlRelationAgg = [\n // buildSqlRelation(\"left\", \"brn\", \"document_items\", \"docitm\", [\"brn.document_id = docitm.document_id\", \"docitm.isdelete = false\", \"docitm.istrash = false\"]),\n // ]\n\n sqlGroupBy = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(regionSqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...regionSqlSelect,\n ...defaultSqlSelect\n }\n\n // if (datatypes.includes(salesOrderDataTypes.salesOrderInjectionFields)) {\n\n // let activeInjectionFields = await injectionFieldService.listActiveInjectionFields(\"document\", documentTypeKey.toLowerCase() as any)\n\n // const salesOrderInjectionFieldSqlSelect = buildInjectionFieldsSqlSelect(\"dif\", activeInjectionFields)\n\n // filterColumns = { ...filterColumns, ...salesOrderInjectionFieldSqlSelect }\n\n // sqlSelect = [...sqlSelect, ...(activeInjectionFields.length > 0 ? [buildSqlSelect(``, salesOrderInjectionFieldSqlSelect)] : [])]\n // sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"brn\", \"document_injection_fields\", \"dif\", [\"brn.document_id = dif.document_id\", \"dif.field_ref = 'document'\", `dif.field_module = '${documentTypeKey.toLowerCase()}'`, \"dif.isdelete = false\", \"dif.istrash = false\"])]\n // sqlGroupBy = [...sqlGroupBy, ...Object.keys(salesOrderInjectionFieldSqlSelect)]\n // }\n\n // let itemSqlSelectAgg = buildDocumentItemSqlSelectAgg()\n\n // if (datatypes.includes(salesOrderDataTypes.salesOrderItemInjectionFields)) {\n\n // let activeInjectionFields = await injectionFieldService.listActiveInjectionFields(\"document_item\", documentTypeKey.toLowerCase() as any)\n\n // const salesOrderItemInjectionFieldSqlSelect = buildInjectionFieldsSqlSelect(\"difi\", activeInjectionFields)\n\n // if (Object.entries(salesOrderItemInjectionFieldSqlSelect).length > 0) {\n // Object.entries(salesOrderItemInjectionFieldSqlSelect).map(([col, alias]) => {\n // itemSqlSelectAgg.push(`'${alias}', ${col}`)\n // })\n // }\n\n // sqlRelationAgg = [...sqlRelationAgg, buildSqlRelation(\"left\", \"docitm\", \"document_injection_fields\", \"difi\", [\"docitm.document_item_id = difi.document_item_id\", \"difi.field_ref = 'document_item'\", `difi.field_module = '${documentTypeKey.toLowerCase()}'`, \"difi.isdelete = false\", \"difi.istrash = false\"])]\n\n // }\n\n // let itemSqlSelect = buildDocumentItemSqlSelect(itemSqlSelectAgg)\n\n // sqlSelectAgg = [...sqlSelectAgg, ...[buildSqlSelect(``, itemSqlSelect)]]\n\n let sqlWhere = [\n `brn.isdelete = false`,\n `brn.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 // get the data (pagination)\n const sqlRaw = buildSqlRawSelect({\n tableName: \"branches\",\n mainAlias: \"brn\",\n accountId: rest.accountId,\n sqlSelect: [...sqlSelect, ...sqlSelectAgg],\n sqlRelation: [...sqlRelation, ...sqlRelationAgg],\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n let data = await userBranchModel.raw(sqlRaw)\n\n // get the count\n const sqlRawCount = buildSqlRawSelectCount({\n tableName: \"branches\",\n mainAlias: \"brn\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby\n })\n\n let count = await userBranchModel.raw(sqlRawCount)\n\n const response = {\n data,\n total: data.length ? Number(count[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n // const removeUserBranches = async ({ userBranchIds }: UserBranchRemoveProps): Promise<User[] | null> => {\n\n // if (!userBranchIds.length) throwError('id is required');\n\n // const response = await userModel.trash({ userBranchIds, updateUserId: actionUserId });\n\n // return response\n // };\n\n const getUserBranchDataTypes = () => {\n\n let data: any[] = [];\n let total = 0;\n\n if (userBranchType === \"branch\") {\n // data = customerService.getDataTypes()\n }\n\n // const data = await userModel.list(payload);\n\n // if (!data?.file_id) {\n // throw new Error(`Invalid id: ${id}`);\n // }\n\n return data\n };\n\n return {\n // uploadFileByBuffer,\n getUserBranch,\n getUserBranchByUserId,\n listUserBranches,\n // removeUsers,\n getUserBranchDataTypes\n }\n\n}\n\n"]}