storemw-core-api 1.0.139 → 1.0.141

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 (105) hide show
  1. package/dist/app.js +1 -1
  2. package/dist/app.js.map +1 -1
  3. package/dist/controllers/index.d.ts +1 -2
  4. package/dist/controllers/index.js +5 -4
  5. package/dist/controllers/index.js.map +1 -1
  6. package/dist/controllers/user/userController.js +8 -4
  7. package/dist/controllers/user/userController.js.map +1 -1
  8. package/dist/controllers/user/userMeController.d.ts +3 -0
  9. package/dist/controllers/user/userMeController.js +52 -361
  10. package/dist/controllers/user/userMeController.js.map +1 -1
  11. package/dist/controllers/utils/unuse/changePasswordUtilController.d.ts +1 -0
  12. package/dist/controllers/utils/unuse/changePasswordUtilController.js +55 -0
  13. package/dist/controllers/utils/unuse/changePasswordUtilController.js.map +1 -0
  14. package/dist/middlewares/route/index.d.ts +1 -1
  15. package/dist/middlewares/route/index.js +4 -2
  16. package/dist/middlewares/route/index.js.map +1 -1
  17. package/dist/middlewares/route/validateUserMe.d.ts +2 -0
  18. package/dist/middlewares/route/validateUserMe.js +9 -1
  19. package/dist/middlewares/route/validateUserMe.js.map +1 -1
  20. package/dist/models/account/AccountModel.d.ts +13 -13
  21. package/dist/models/branch_user/BranchUserModel.d.ts +13 -13
  22. package/dist/models/user/AgentModel.d.ts +2 -24
  23. package/dist/models/user/MemberModel.d.ts +2 -24
  24. package/dist/models/user/UserModel.d.ts +13 -2
  25. package/dist/routes/index.d.ts +0 -1
  26. package/dist/routes/index.js +2 -3
  27. package/dist/routes/index.js.map +1 -1
  28. package/dist/routes/user/userMeRoutes.js +4 -0
  29. package/dist/routes/user/userMeRoutes.js.map +1 -1
  30. package/dist/routes/utils/unuse/changePasswordUtilRoutes.d.ts +1 -0
  31. package/dist/routes/utils/unuse/changePasswordUtilRoutes.js +10 -0
  32. package/dist/routes/utils/unuse/changePasswordUtilRoutes.js.map +1 -0
  33. package/dist/schema/payload/account/schemaAccount.d.ts +7 -0
  34. package/dist/schema/payload/index.d.ts +2 -2
  35. package/dist/schema/payload/index.js +7 -4
  36. package/dist/schema/payload/index.js.map +1 -1
  37. package/dist/schema/payload/user/schemaUser.d.ts +3 -0
  38. package/dist/schema/payload/user/schemaUser.js +1 -0
  39. package/dist/schema/payload/user/schemaUser.js.map +1 -1
  40. package/dist/schema/payload/user/schemaUserAdministrator.d.ts +14 -0
  41. package/dist/schema/payload/user/schemaUserAgent.d.ts +15 -12
  42. package/dist/schema/payload/user/schemaUserAgent.js +2 -2
  43. package/dist/schema/payload/user/schemaUserAgent.js.map +1 -1
  44. package/dist/schema/payload/user/schemaUserCustomer.d.ts +14 -0
  45. package/dist/schema/payload/user/schemaUserDriver.d.ts +14 -0
  46. package/dist/schema/payload/user/schemaUserMe.d.ts +31 -0
  47. package/dist/schema/payload/user/schemaUserMe.js +17 -0
  48. package/dist/schema/payload/user/schemaUserMe.js.map +1 -0
  49. package/dist/schema/payload/user/schemaUserMember.d.ts +15 -12
  50. package/dist/schema/payload/user/schemaUserMember.js +2 -2
  51. package/dist/schema/payload/user/schemaUserMember.js.map +1 -1
  52. package/dist/schema/payload/user/schemaUserOperator.d.ts +14 -0
  53. package/dist/schema/payload/user/schemaUserRetailer.d.ts +14 -0
  54. package/dist/schema/payload/user/schemaUserWorker.d.ts +14 -0
  55. package/dist/schema/payload/utils/unuse/schemaChangePasswordUtil.d.ts +53 -0
  56. package/dist/schema/payload/utils/unuse/schemaChangePasswordUtil.js +18 -0
  57. package/dist/schema/payload/utils/unuse/schemaChangePasswordUtil.js.map +1 -0
  58. package/dist/services/account/AccountService.js +14 -4
  59. package/dist/services/account/AccountService.js.map +1 -1
  60. package/dist/services/auth/AuthService.js +4 -1
  61. package/dist/services/auth/AuthService.js.map +1 -1
  62. package/dist/services/index.d.ts +2 -4
  63. package/dist/services/index.js +4 -3
  64. package/dist/services/index.js.map +1 -1
  65. package/dist/services/user/AdministratorService.d.ts +1 -0
  66. package/dist/services/user/AdministratorService.js +7 -0
  67. package/dist/services/user/AdministratorService.js.map +1 -1
  68. package/dist/services/user/AgentService.d.ts +2 -12
  69. package/dist/services/user/AgentService.js +35 -26
  70. package/dist/services/user/AgentService.js.map +1 -1
  71. package/dist/services/user/CustomerService.d.ts +1 -0
  72. package/dist/services/user/CustomerService.js +7 -0
  73. package/dist/services/user/CustomerService.js.map +1 -1
  74. package/dist/services/user/DriverService.d.ts +1 -0
  75. package/dist/services/user/DriverService.js +7 -0
  76. package/dist/services/user/DriverService.js.map +1 -1
  77. package/dist/services/user/MemberService.d.ts +2 -12
  78. package/dist/services/user/MemberService.js +35 -26
  79. package/dist/services/user/MemberService.js.map +1 -1
  80. package/dist/services/user/OperatorService.d.ts +4 -2
  81. package/dist/services/user/OperatorService.js +11 -3
  82. package/dist/services/user/OperatorService.js.map +1 -1
  83. package/dist/services/user/RetailerService.d.ts +1 -0
  84. package/dist/services/user/RetailerService.js +7 -0
  85. package/dist/services/user/RetailerService.js.map +1 -1
  86. package/dist/services/user/UserMeService.d.ts +31 -7
  87. package/dist/services/user/UserMeService.js +71 -3
  88. package/dist/services/user/UserMeService.js.map +1 -1
  89. package/dist/services/user/UserService.d.ts +27 -1
  90. package/dist/services/user/UserService.js +54 -38
  91. package/dist/services/user/UserService.js.map +1 -1
  92. package/dist/services/user/WorkerService.d.ts +1 -0
  93. package/dist/services/user/WorkerService.js +52 -44
  94. package/dist/services/user/WorkerService.js.map +1 -1
  95. package/dist/services/utils/unuse/ChangePasswordUtilService.d.ts +13 -0
  96. package/dist/services/utils/unuse/ChangePasswordUtilService.js +78 -0
  97. package/dist/services/utils/unuse/ChangePasswordUtilService.js.map +1 -0
  98. package/dist/utils/index.d.ts +1 -1
  99. package/dist/utils/index.js +3 -1
  100. package/dist/utils/index.js.map +1 -1
  101. package/dist/utils/passwordUtils.d.ts +3 -0
  102. package/dist/utils/passwordUtils.js +22 -0
  103. package/dist/utils/passwordUtils.js.map +1 -1
  104. package/package.json +1 -1
  105. package/prisma/schema.prisma +44 -47
@@ -29,6 +29,7 @@ export declare const schemaUserRetailerCreatePayload: z.ZodObject<{
29
29
  }>;
30
30
  address: z.ZodOptional<z.ZodString>;
31
31
  email: z.ZodUnion<[z.ZodString, z.ZodLiteral<"">]>;
32
+ parentUserId: z.ZodOptional<z.ZodNumber>;
32
33
  status: z.ZodBoolean;
33
34
  }, "strip", z.ZodTypeAny, {
34
35
  status: boolean;
@@ -42,6 +43,7 @@ export declare const schemaUserRetailerCreatePayload: z.ZodObject<{
42
43
  username: string;
43
44
  password: string;
44
45
  address?: string | undefined;
46
+ parentUserId?: number | undefined;
45
47
  }, {
46
48
  status: boolean;
47
49
  firstname: string;
@@ -54,6 +56,7 @@ export declare const schemaUserRetailerCreatePayload: z.ZodObject<{
54
56
  username: string;
55
57
  password: string;
56
58
  address?: string | undefined;
59
+ parentUserId?: number | undefined;
57
60
  }>;
58
61
  retailer: z.ZodObject<{
59
62
  code: z.ZodString;
@@ -108,6 +111,7 @@ export declare const schemaUserRetailerCreatePayload: z.ZodObject<{
108
111
  username: string;
109
112
  password: string;
110
113
  address?: string | undefined;
114
+ parentUserId?: number | undefined;
111
115
  };
112
116
  }, {
113
117
  retailer: {
@@ -133,6 +137,7 @@ export declare const schemaUserRetailerCreatePayload: z.ZodObject<{
133
137
  username: string;
134
138
  password: string;
135
139
  address?: string | undefined;
140
+ parentUserId?: number | undefined;
136
141
  };
137
142
  }>;
138
143
  }, "strip", z.ZodTypeAny, {
@@ -164,6 +169,7 @@ export declare const schemaUserRetailerCreatePayload: z.ZodObject<{
164
169
  username: string;
165
170
  password: string;
166
171
  address?: string | undefined;
172
+ parentUserId?: number | undefined;
167
173
  };
168
174
  };
169
175
  }, {
@@ -195,6 +201,7 @@ export declare const schemaUserRetailerCreatePayload: z.ZodObject<{
195
201
  username: string;
196
202
  password: string;
197
203
  address?: string | undefined;
204
+ parentUserId?: number | undefined;
198
205
  };
199
206
  };
200
207
  }>;
@@ -229,6 +236,7 @@ export declare const schemaUserRetailerUpdatePayload: z.ZodObject<{
229
236
  phoneNumber: string;
230
237
  }>;
231
238
  username: z.ZodString;
239
+ parentUserId: z.ZodOptional<z.ZodNumber>;
232
240
  password: z.ZodOptional<z.ZodString>;
233
241
  }, "strip", z.ZodTypeAny, {
234
242
  status: boolean;
@@ -241,6 +249,7 @@ export declare const schemaUserRetailerUpdatePayload: z.ZodObject<{
241
249
  };
242
250
  username: string;
243
251
  address?: string | undefined;
252
+ parentUserId?: number | undefined;
244
253
  password?: string | undefined;
245
254
  }, {
246
255
  status: boolean;
@@ -253,6 +262,7 @@ export declare const schemaUserRetailerUpdatePayload: z.ZodObject<{
253
262
  };
254
263
  username: string;
255
264
  address?: string | undefined;
265
+ parentUserId?: number | undefined;
256
266
  password?: string | undefined;
257
267
  }>;
258
268
  retailer: z.ZodObject<{
@@ -307,6 +317,7 @@ export declare const schemaUserRetailerUpdatePayload: z.ZodObject<{
307
317
  };
308
318
  username: string;
309
319
  address?: string | undefined;
320
+ parentUserId?: number | undefined;
310
321
  password?: string | undefined;
311
322
  };
312
323
  }, {
@@ -332,6 +343,7 @@ export declare const schemaUserRetailerUpdatePayload: z.ZodObject<{
332
343
  };
333
344
  username: string;
334
345
  address?: string | undefined;
346
+ parentUserId?: number | undefined;
335
347
  password?: string | undefined;
336
348
  };
337
349
  }>;
@@ -363,6 +375,7 @@ export declare const schemaUserRetailerUpdatePayload: z.ZodObject<{
363
375
  };
364
376
  username: string;
365
377
  address?: string | undefined;
378
+ parentUserId?: number | undefined;
366
379
  password?: string | undefined;
367
380
  };
368
381
  };
@@ -394,6 +407,7 @@ export declare const schemaUserRetailerUpdatePayload: z.ZodObject<{
394
407
  };
395
408
  username: string;
396
409
  address?: string | undefined;
410
+ parentUserId?: number | undefined;
397
411
  password?: string | undefined;
398
412
  };
399
413
  };
@@ -29,6 +29,7 @@ export declare const schemaUserWorkerCreatePayload: z.ZodObject<{
29
29
  }>;
30
30
  address: z.ZodOptional<z.ZodString>;
31
31
  email: z.ZodUnion<[z.ZodString, z.ZodLiteral<"">]>;
32
+ parentUserId: z.ZodOptional<z.ZodNumber>;
32
33
  status: z.ZodBoolean;
33
34
  }, "strip", z.ZodTypeAny, {
34
35
  status: boolean;
@@ -42,6 +43,7 @@ export declare const schemaUserWorkerCreatePayload: z.ZodObject<{
42
43
  username: string;
43
44
  password: string;
44
45
  address?: string | undefined;
46
+ parentUserId?: number | undefined;
45
47
  }, {
46
48
  status: boolean;
47
49
  firstname: string;
@@ -54,6 +56,7 @@ export declare const schemaUserWorkerCreatePayload: z.ZodObject<{
54
56
  username: string;
55
57
  password: string;
56
58
  address?: string | undefined;
59
+ parentUserId?: number | undefined;
57
60
  }>;
58
61
  worker: z.ZodObject<{
59
62
  remark: z.ZodString;
@@ -88,6 +91,7 @@ export declare const schemaUserWorkerCreatePayload: z.ZodObject<{
88
91
  username: string;
89
92
  password: string;
90
93
  address?: string | undefined;
94
+ parentUserId?: number | undefined;
91
95
  };
92
96
  }, {
93
97
  worker: {
@@ -108,6 +112,7 @@ export declare const schemaUserWorkerCreatePayload: z.ZodObject<{
108
112
  username: string;
109
113
  password: string;
110
114
  address?: string | undefined;
115
+ parentUserId?: number | undefined;
111
116
  };
112
117
  }>;
113
118
  }, "strip", z.ZodTypeAny, {
@@ -134,6 +139,7 @@ export declare const schemaUserWorkerCreatePayload: z.ZodObject<{
134
139
  username: string;
135
140
  password: string;
136
141
  address?: string | undefined;
142
+ parentUserId?: number | undefined;
137
143
  };
138
144
  };
139
145
  }, {
@@ -160,6 +166,7 @@ export declare const schemaUserWorkerCreatePayload: z.ZodObject<{
160
166
  username: string;
161
167
  password: string;
162
168
  address?: string | undefined;
169
+ parentUserId?: number | undefined;
163
170
  };
164
171
  };
165
172
  }>;
@@ -194,6 +201,7 @@ export declare const schemaUserWorkerUpdatePayload: z.ZodObject<{
194
201
  phoneNumber: string;
195
202
  }>;
196
203
  username: z.ZodString;
204
+ parentUserId: z.ZodOptional<z.ZodNumber>;
197
205
  password: z.ZodOptional<z.ZodString>;
198
206
  }, "strip", z.ZodTypeAny, {
199
207
  status: boolean;
@@ -206,6 +214,7 @@ export declare const schemaUserWorkerUpdatePayload: z.ZodObject<{
206
214
  };
207
215
  username: string;
208
216
  address?: string | undefined;
217
+ parentUserId?: number | undefined;
209
218
  password?: string | undefined;
210
219
  }, {
211
220
  status: boolean;
@@ -218,6 +227,7 @@ export declare const schemaUserWorkerUpdatePayload: z.ZodObject<{
218
227
  };
219
228
  username: string;
220
229
  address?: string | undefined;
230
+ parentUserId?: number | undefined;
221
231
  password?: string | undefined;
222
232
  }>;
223
233
  worker: z.ZodObject<{
@@ -252,6 +262,7 @@ export declare const schemaUserWorkerUpdatePayload: z.ZodObject<{
252
262
  };
253
263
  username: string;
254
264
  address?: string | undefined;
265
+ parentUserId?: number | undefined;
255
266
  password?: string | undefined;
256
267
  };
257
268
  }, {
@@ -272,6 +283,7 @@ export declare const schemaUserWorkerUpdatePayload: z.ZodObject<{
272
283
  };
273
284
  username: string;
274
285
  address?: string | undefined;
286
+ parentUserId?: number | undefined;
275
287
  password?: string | undefined;
276
288
  };
277
289
  }>;
@@ -298,6 +310,7 @@ export declare const schemaUserWorkerUpdatePayload: z.ZodObject<{
298
310
  };
299
311
  username: string;
300
312
  address?: string | undefined;
313
+ parentUserId?: number | undefined;
301
314
  password?: string | undefined;
302
315
  };
303
316
  };
@@ -324,6 +337,7 @@ export declare const schemaUserWorkerUpdatePayload: z.ZodObject<{
324
337
  };
325
338
  username: string;
326
339
  address?: string | undefined;
340
+ parentUserId?: number | undefined;
327
341
  password?: string | undefined;
328
342
  };
329
343
  };
@@ -0,0 +1,53 @@
1
+ import { z } from "zod";
2
+ /** Utils: Change Password */
3
+ export declare const schemaChangePasswordUtilPayload: z.ZodObject<{
4
+ scope: z.ZodObject<{
5
+ target: z.ZodEnum<["change_password"]>;
6
+ action: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ target: "change_password";
9
+ action: string;
10
+ }, {
11
+ target: "change_password";
12
+ action: string;
13
+ }>;
14
+ payload: z.ZodObject<{
15
+ authToken: z.ZodString;
16
+ currentPassword: z.ZodString;
17
+ newPassword: z.ZodString;
18
+ confirmPassword: z.ZodString;
19
+ }, "strip", z.ZodTypeAny, {
20
+ authToken: string;
21
+ currentPassword: string;
22
+ confirmPassword: string;
23
+ newPassword: string;
24
+ }, {
25
+ authToken: string;
26
+ currentPassword: string;
27
+ confirmPassword: string;
28
+ newPassword: string;
29
+ }>;
30
+ }, "strip", z.ZodTypeAny, {
31
+ scope: {
32
+ target: "change_password";
33
+ action: string;
34
+ };
35
+ payload: {
36
+ authToken: string;
37
+ currentPassword: string;
38
+ confirmPassword: string;
39
+ newPassword: string;
40
+ };
41
+ }, {
42
+ scope: {
43
+ target: "change_password";
44
+ action: string;
45
+ };
46
+ payload: {
47
+ authToken: string;
48
+ currentPassword: string;
49
+ confirmPassword: string;
50
+ newPassword: string;
51
+ };
52
+ }>;
53
+ export type SchemaChangePasswordUtilPayload = z.infer<typeof schemaChangePasswordUtilPayload>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.schemaChangePasswordUtilPayload = void 0;
4
+ const zod_1 = require("zod");
5
+ /** Utils: Change Password */
6
+ exports.schemaChangePasswordUtilPayload = zod_1.z.object({
7
+ scope: zod_1.z.object({
8
+ target: zod_1.z.enum(["change_password"]),
9
+ action: zod_1.z.string(), // can be "" if you want to allow empty string
10
+ }),
11
+ payload: zod_1.z.object({
12
+ authToken: zod_1.z.string().min(1),
13
+ currentPassword: zod_1.z.string().min(1),
14
+ newPassword: zod_1.z.string().min(1),
15
+ confirmPassword: zod_1.z.string().min(1),
16
+ })
17
+ });
18
+ //# sourceMappingURL=schemaChangePasswordUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaChangePasswordUtil.js","sourceRoot":"","sources":["../../../../../src/schema/payload/utils/unuse/schemaChangePasswordUtil.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAIxB,6BAA6B;AAChB,QAAA,+BAA+B,GAAG,OAAC,CAAC,MAAM,CAAC;IACpD,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC;QACZ,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACnC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,8CAA8C;KACrE,CAAC;IACF,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KACrC,CAAC;CACL,CAAC,CAAC","sourcesContent":["import { z } from \"zod\";\n\nimport { _, dayjs } from \"@/utils\";\n\n/** Utils: Change Password */\nexport const schemaChangePasswordUtilPayload = z.object({\n scope: z.object({\n target: z.enum([\"change_password\"]),\n action: z.string(), // can be \"\" if you want to allow empty string\n }),\n payload: z.object({\n authToken: z.string().min(1),\n currentPassword: z.string().min(1),\n newPassword: z.string().min(1),\n confirmPassword: z.string().min(1),\n })\n});\n\nexport type SchemaChangePasswordUtilPayload = z.infer<typeof schemaChangePasswordUtilPayload>;"]}
@@ -367,21 +367,31 @@ const AccountService = (props) => {
367
367
  const ownerUserId = item?.owner_user_id ?? 0;
368
368
  const businessId = item?.business_id ?? 0;
369
369
  const businessService = (0, services_1.BusinessService)({ ...rest, accountId: Number(accountId) });
370
- const userService = (0, services_1.UserService)({ ...rest, accountId: Number(accountId), userType: "administrator" });
370
+ // const userService = UserService({ ...rest, accountId: Number(accountId), userType: "administrator" })
371
+ const userModel = (0, models_1.UserModel)({ ...rest });
371
372
  let responseBusiness = [];
372
373
  let responseUser = [];
373
374
  // remove business
374
375
  if (businessId) {
375
376
  responseBusiness = await businessService.removeBusinesses({ businessIds: [BigInt(businessId)] });
376
377
  }
377
- // remove user administrator
378
+ // remove all users (administrator, etc...)
378
379
  if (ownerUserId) {
379
- responseUser = await userService.removeUsers({ ids: [BigInt(ownerUserId)] });
380
+ const responseUsers = await userModel.remove({
381
+ // ids: [Number(ownerUserId)]
382
+ where: {
383
+ [`${models_1.ModelUserFields.accountid}`]: accountId
384
+ }
385
+ });
386
+ responseUser = responseUsers.map((i) => {
387
+ delete i.login_password;
388
+ return i;
389
+ });
380
390
  }
381
391
  response.push({
382
392
  ...item,
383
393
  business: responseBusiness.length > 0 ? responseBusiness[0] : {},
384
- user: responseUser.length > 0 ? responseUser[0] : {}
394
+ users: responseUser
385
395
  });
386
396
  }));
387
397
  return response;
@@ -1 +1 @@
1
- {"version":3,"file":"AccountService.js","sourceRoot":"","sources":["../../../src/services/account/AccountService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport { z } from \"zod\";\n\nimport {\n ModelUserFields,\n ModelAccountFields,\n AccountModel,\n ModelUserBranchFields,\n ModelBusinessFields,\n ModelAreaFields,\n ModelStateFields,\n ModelCountryFields,\n} from \"@/models\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport { ServiceFactory } from \"@/lib\"\n\nimport {\n BusinessService,\n BusinessCreateProps,\n UserService,\n UserCreateProps,\n AccessKeyService\n} from \"@/services\";\n\nexport type AccountServiceProps = DefaultServiceProps & {};\n\nexport type AccountGetProps = QueryGet & {\n id: number,\n // datatypes: AccountDataType[]\n};\n\nexport type AccountListProps = QueryList & {\n // datatypes: AccountDataType[]\n};\n\nexport type AccountRemoveProps = {\n accountIds: BigInt[]\n};\n\nexport type Account = {\n accountId: number,\n name: string,\n accountCode?: string, // optional - skip for auto generation\n businessId: number,\n ownerUserId: number,\n status: boolean\n}\n\nexport type AccountCreateProps = {\n data: Omit<Account, \"accountId\" | \"businessId\" | \"ownerUserId\"> & {\n administrator: Omit<UserCreateProps[\"data\"][\"user\"], \"status\">,\n business: Omit<BusinessCreateProps[\"data\"], \"status\">\n }\n}\n\nexport type AccountUpdateProps = {\n accountId: number,\n data: Omit<Account, \"accountId\" | \"ownerUserId\">\n}\n\nconst getCreatePayload = (data: AccountCreateProps[\"data\"], accountCode: string = \"\") => {\n\n return {\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.status}`]: Boolean(data.status),\n [`${ModelAccountFields.account_code}`]: accountCode\n }\n\n}\n\nconst getCreateUpdatePayload = (businessId: number, ownerUserId: number) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: data.accountId,\n [`${ModelAccountFields.business_id}`]: businessId,\n [`${ModelAccountFields.owner_user_id}`]: ownerUserId,\n }\n\n}\n\nconst getUpdatePayload = (data: AccountUpdateProps[\"data\"], accountCode: string = \"\") => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: accoundId,\n [`${ModelAccountFields.business_id}`]: data.businessId,\n [`${ModelAccountFields.name}`]: data.name,\n ...(accountCode ? { [`${ModelAccountFields.account_code}`]: data.accountCode } : {}),\n [`${ModelAccountFields.status}`]: Boolean(data.status)\n }\n\n}\n\nlet mainSqlSelect = {\n [`acc.${ModelAccountFields.account_id}`]: \"account_id\",\n [`acc.${ModelAccountFields.business_id}`]: \"business_id\",\n [`acc.${ModelAccountFields.name}`]: \"name\",\n [`acc.${ModelAccountFields.account_code}`]: \"account_code\",\n [`acc.${ModelAccountFields.status}`]: \"account_status\",\n}\n\nlet businessSqlSelect = {\n [`bus.${ModelBusinessFields.address_1}`]: \"address_1\",\n [`bus.${ModelBusinessFields.address_2}`]: \"address_2\",\n [`bus.${ModelBusinessFields.company_contact}`]: \"company_contact\",\n [`bus.${ModelBusinessFields.company_name}`]: \"company_name\",\n [`bus.${ModelBusinessFields.email}`]: \"email\",\n [`bus.${ModelBusinessFields.area_id}`]: \"area_id\",\n [`bussarea.${ModelAreaFields.area_name}`]: \"area_name\",\n [`bus.${ModelBusinessFields.state_id}`]: \"state_id\",\n [`bussstate.${ModelStateFields.state_name}`]: \"state_name\",\n [`busscoun.${ModelCountryFields.country_name}`]: \"country_name\",\n [`bus.${ModelBusinessFields.country_id}`]: \"country_id\",\n [`bus.${ModelBusinessFields.postcode}`]: \"postcode\",\n [`bus.${ModelBusinessFields.registration_number}`]: \"registration_number\",\n [`bus.${ModelBusinessFields.status}`]: \"business_status\",\n [`bus.${ModelBusinessFields.website}`]: \"website\",\n}\n\nlet ownerSqlSelectItem = {\n [`usrowner.${ModelUserFields.user_id}`]: \"user_id\",\n [`usrowner.${ModelUserFields.login_username}`]: \"login_username\",\n [`usrowner.${ModelUserFields.user_type}`]: \"user_type\",\n [`usrowner.${ModelUserFields.firstname}`]: \"firstname\",\n [`usrowner.${ModelUserFields.lastname}`]: \"lastname\",\n [`CONCAT(usrowner.${ModelUserFields.contact_country_code}, usrowner.${ModelUserFields.contact_phone_number})`]: \"contact\",\n [`usrowner.${ModelUserFields.contact_country_code}`]: \"contact_country_code\",\n [`usrowner.${ModelUserFields.contact_phone_number}`]: \"contact_phone_number\",\n [`usrowner.${ModelUserFields.email}`]: \"email\",\n [`usrowner.${ModelUserFields.address}`]: \"address\",\n [`usrowner.${ModelUserFields.status}`]: \"status\",\n}\n\nlet ownerSqlSelect = {\n [`COALESCE(\n JSONB_BUILD_OBJECT(\n ${Object.entries(ownerSqlSelectItem).map(([key, alias]) => `'${alias}', ${key}`).join(\", \")}\n ),\n '{}'::jsonb\n )`]: \"owner\"\n}\n\nlet defaultSqlSelect = {\n [`acc.${ModelAccountFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`acc.${ModelAccountFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`acc.${ModelAccountFields.isdelete}`]: \"isdelete\",\n [`acc.${ModelAccountFields.istrash}`]: \"istrash\",\n [`acc.${ModelAccountFields.accountid}`]: \"accountid\",\n}\n\n// Example reserved words for subdomains (account code)\nexport const accountCodeReservedWords = [\n \"www\", \"web\", \"api\", \"admin\", \"app\", \"mail\", \"support\", \"help\", \"docs\", \"dashboard\",\n \"billing\", \"login\", \"logout\", \"signup\", \"register\", \"auth\", \"account\", \"user\", \"users\", \"team\",\n \"teams\", \"settings\", \"config\", \"configuration\", \"system\", \"internal\", \"status\", \"test\", \"demo\", \"staging\",\n \"dev\", \"development\", \"prod\", \"production\", \"root\", \"home\", \"index\", \"static\", \"assets\", \"public\",\n \"beta\", \"alpha\", \"sandbox\", \"trial\", \"guest\", \"owner\", \"manager\", \"administrator\", \"moderator\", \"operator\",\n \"service\", \"api-docs\", \"portal\", \"console\", \"control\", \"ops\", \"supportdesk\", \"helpdesk\", \"contact\", \"feedback\",\n \"security\", \"privacy\", \"terms\", \"policy\", \"legal\", \"about\", \"company\", \"teaminfo\", \"partners\", \"affiliates\",\n \"news\", \"blog\", \"media\", \"press\", \"events\", \"calendar\", \"forum\", \"community\", \"chat\", \"messaging\",\n \"notifications\", \"alerts\", \"reports\", \"analytics\", \"metrics\", \"logs\", \"history\", \"archive\", \"backup\", \"restore\",\n \"files\", \"documents\", \"resources\", \"library\", \"gallery\", \"images\", \"videos\", \"downloads\", \"uploads\", \"templates\"\n];\n\n// Zod schema for subdomain (account code)\nexport const accountCodeSchema = z\n .string()\n .min(5, { message: \"Account code must be at least 5 characters\" })\n .max(63, { message: \"Account code must be at most 63 characters\" })\n .regex(\n /^[a-z0-9]([a-z0-9-]{3,61}[a-z0-9])$/,\n // Regex explanation:\n // ^[a-z0-9] -> first character must be a lowercase letter or number\n // ([a-z0-9-]{3,61} -> middle characters can be letters, numbers, or hyphens, 3–61 characters\n // [a-z0-9])$ -> last character must be a lowercase letter or number\n // Total length = 5–63 characters, no special symbols except hyphen in the middle\n \"Account code can only contain lowercase letters, numbers, and hyphens, and cannot start or end with a hyphen\"\n )\n .transform((val) => val.toLowerCase().trim()) // normalize\n .refine((val) => !accountCodeReservedWords.includes(val), {\n message: \"This account code is reserved. Please choose another one\",\n });\n\nexport const AccountService = (props: AccountServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const accountModel = AccountModel({ ...rest })\n const accessKeyService = AccessKeyService({ ...rest, accessKeyUserType: \"administrator\" })\n\n // generate account code (`{random 5 digit}{first 7 digit of timestamp}`)\n function generateAccountCode(): string {\n const timestamp = Date.now().toString();\n const last7 = timestamp.slice(-7); // last 7 digits of timestamp\n const prefix = Math.floor(Math.random() * 100000) // 0–99999\n .toString()\n .padStart(5, \"0\"); // ensure 5 digits\n return prefix + last7;\n }\n\n const checkAccoutCodeIsUsed = async (\n accountCode: Account[\"accountCode\"],\n selfAccountId?: Account[\"accountId\"]\n ) => {\n\n const { data } = await listAccounts({\n limit: 1,\n offset: 0,\n sortfield: `${ModelAccountFields.account_id}`,\n sortorder: \"ASC\",\n filters: [{\n field: `${ModelAccountFields.account_code}`,\n operator: \"=\",\n value: accountCode\n }],\n datatypes: []\n })\n\n if (data.length <= 0) return false\n\n if (selfAccountId) {\n\n if (Number(data[0].account_id) === Number(selfAccountId)) {\n return false\n } else {\n return true\n }\n\n } else {\n\n return true\n }\n\n }\n\n const validateAccountCodeIsUsed = async (accountCode: string) => {\n\n const accountCodeIsUsed = await checkAccoutCodeIsUsed(accountCode)\n\n if (accountCodeIsUsed === true) {\n throwError(`Account code has been used: ${accountCode}`)\n }\n\n }\n\n const validateAccountCodeFormat = (accountCode: string) => {\n try {\n return accountCodeSchema.parse(accountCode); // throws if invalid\n } catch (err) {\n if (err instanceof z.ZodError) {\n throw new Error(\n `Invalid account code: \"${accountCode}\". ` +\n err.errors.map((e) => e.message).join(\"; \")\n );\n }\n throw err;\n }\n };\n\n const createAccount = async ({ data }: AccountCreateProps) => {\n\n const administratorData = data?.administrator ?? {}\n\n // pre validation first\n if (administratorData?.contact) {\n\n const validateUserService = UserService({ ...rest, userType: \"administrator\" })\n\n // validate the contact\n await validateUserService.validateUserContact(administratorData.contact.countryCode, administratorData.contact.phoneNumber)\n\n }\n\n let accountCode = data?.accountCode ?? \"\";\n\n // auto generate if not specify\n if (accountCode === \"\") {\n accountCode = generateAccountCode()\n }\n\n // validate the account code format\n validateAccountCodeFormat(accountCode)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(accountCode)\n\n // create account\n const _data = getCreatePayload(data, accountCode)\n\n if (!_data) {\n throw new Error(`Invalid create account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.create({ data: _data })\n\n const newAccountId = response?.account_id ?? 0\n\n const businessService = BusinessService({ ...rest, accountId: Number(newAccountId) })\n const userService = UserService({ ...rest, accountId: Number(newAccountId), userType: \"administrator\" })\n\n let accountBusinessId = 0\n let accountUserId = 0\n let accountId = 0\n\n // create user(administrator)\n if (administratorData?.loginUsername) {\n\n let userData = administratorData\n\n let userPayload: UserCreateProps = {\n userType: \"administrator\",\n data: {\n user: {\n address: userData.address,\n contact: {\n countryCode: userData.contact.countryCode,\n phoneNumber: userData.contact.phoneNumber\n },\n email: userData.email,\n firstname: userData.firstname,\n lastname: userData.lastname,\n loginPassword: userData.loginPassword,\n loginUsername: userData.loginUsername,\n status: true // always true for first time\n },\n administrator: {\n isOwner: true // first create must be owner\n },\n props: {\n locationIds: []\n }\n }\n }\n\n const responseOwner = await userService.createUser(userPayload)\n\n accountUserId = Number(responseOwner?.user_id) ?? 0\n accountId = Number(responseOwner?.accountid) ?? 0\n\n }\n\n // create default administrator access key\n await accessKeyService.createAccessKey({\n data: {\n userId: accountUserId,\n isDefault: true,\n overrideAccountId: accountId\n }\n })\n\n // create business\n if (data?.business) {\n\n let businessData = data?.business ?? {}\n\n let businessPayload: BusinessCreateProps = {\n data: {\n address1: businessData.address1,\n address2: businessData.address2,\n areaId: businessData.areaId,\n companyContact: businessData.companyContact,\n companyName: businessData.companyName,\n countryId: businessData.countryId,\n email: businessData.email,\n postcode: businessData.postcode,\n registrationNumber: businessData.registrationNumber,\n stateId: businessData.stateId,\n website: businessData.website,\n status: true // always true for first time\n }\n }\n\n const responseBusiness = await businessService.createBusiness(businessPayload)\n\n accountBusinessId = Number(responseBusiness?.business_id) ?? 0\n\n }\n\n // update account for additional info\n const createUpdatedata = getCreateUpdatePayload(accountBusinessId, accountUserId)\n\n if (!createUpdatedata) {\n throw new Error(`Invalid create update account payload: ${JSON.stringify(_data)}`);\n }\n\n await accountModel.update({ id: Number(newAccountId), data: createUpdatedata })\n\n return await getAccount({ id: Number(newAccountId), datatypes: [] })\n }\n\n const updateAccount = async ({ accountId, data }: AccountUpdateProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let accountCode = data?.accountCode ?? \"\";\n\n // check the override account code needed\n if (accountCode) {\n\n // validate the account code format\n validateAccountCodeFormat(accountCode)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(accountCode)\n }\n\n // const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode, accountId)\n\n // if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n const _data = getUpdatePayload(data, accountCode)\n\n if (!_data) {\n throw new Error(`Invalid update account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.update({ where: { [`${ModelAccountFields.account_id}`]: accountId }, data: _data })\n\n return await getAccount({ id: accountId, datatypes: [] })\n }\n\n const getAccount = async ({ id, datatypes = [] }: AccountGetProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let { data } = await listAccounts({\n limit: 1,\n offset: 0,\n filters: [{ field: \"account_id\", operator: \"=\", value: id }],\n sortfield: \"account_id\",\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n };\n\n const listAccounts = async ({ limit, offset, filters = [], sortfield, sortorder, datatypes = [] }: AccountListProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let data = []\n\n let sqlSelect = [\n `COUNT(acc.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, businessSqlSelect),\n buildSqlSelect(``, ownerSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"acc\", \"businesses\", \"bus\", [\"acc.business_id = bus.business_id\", \"bus.isdelete = false\", \"bus.istrash = false\"]),\n buildSqlRelation(\"left\", \"bus\", \"states\", \"bussstate\", [\"bus.state_id = bussstate.state_id\", \"bussstate.isdelete = false\", \"bussstate.istrash = false\"]),\n buildSqlRelation(\"left\", \"bus\", \"countries\", \"busscoun\", [\"bus.country_id = busscoun.country_id\", \"busscoun.isdelete = false\", \"busscoun.istrash = false\"]),\n buildSqlRelation(\"left\", \"bus\", \"areas\", \"bussarea\", [\"bus.area_id = bussarea.area_id\", \"bussarea.isdelete = false\", \"bussarea.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"usrowner\", [\"acc.owner_user_id = usrowner.user_id\", \"usrowner.isdelete = false\", \"usrowner.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"creator\", [\"acc.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"updater\", [\"acc.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(businessSqlSelect),\n ...Object.keys(ownerSqlSelectItem),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = { ...mainSqlSelect, ...businessSqlSelect, ...ownerSqlSelectItem, ...defaultSqlSelect }\n\n let sqlWhere = [\n `acc.isdelete = false`,\n `acc.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"accounts\",\n mainAlias: \"acc\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId: Boolean(rest.isOperator === true)\n })\n\n data = await accountModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n const removeAccounts = async ({ accountIds }: AccountRemoveProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n if (!accountIds.length) throwError('accountIds is required');\n\n let accountResponse = await accountModel.remove({ where: { [`${ModelAccountFields.account_id}`]: { in: accountIds } } });\n\n let response: any[] = []\n\n await Promise.all(\n accountResponse.map(async (item) => {\n 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"]}
1
+ {"version":3,"file":"AccountService.js","sourceRoot":"","sources":["../../../src/services/account/AccountService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport { z } from \"zod\";\n\nimport {\n ModelUserFields,\n ModelAccountFields,\n AccountModel,\n ModelUserBranchFields,\n ModelBusinessFields,\n ModelAreaFields,\n ModelStateFields,\n ModelCountryFields,\n UserModel,\n} from \"@/models\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport { ServiceFactory } from \"@/lib\"\n\nimport {\n BusinessService,\n BusinessCreateProps,\n UserService,\n UserCreateProps,\n AccessKeyService\n} from \"@/services\";\n\nexport type AccountServiceProps = DefaultServiceProps & {};\n\nexport type AccountGetProps = QueryGet & {\n id: number,\n // datatypes: AccountDataType[]\n};\n\nexport type AccountListProps = QueryList & {\n // datatypes: AccountDataType[]\n};\n\nexport type AccountRemoveProps = {\n accountIds: BigInt[]\n};\n\nexport type Account = {\n accountId: number,\n name: string,\n accountCode?: string, // optional - skip for auto generation\n businessId: number,\n ownerUserId: number,\n status: boolean\n}\n\nexport type AccountCreateProps = {\n data: Omit<Account, \"accountId\" | \"businessId\" | \"ownerUserId\"> & {\n administrator: Omit<UserCreateProps[\"data\"][\"user\"], \"status\">,\n business: Omit<BusinessCreateProps[\"data\"], \"status\">\n }\n}\n\nexport type AccountUpdateProps = {\n accountId: number,\n data: Omit<Account, \"accountId\" | \"ownerUserId\">\n}\n\nconst getCreatePayload = (data: AccountCreateProps[\"data\"], accountCode: string = \"\") => {\n\n return {\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.status}`]: Boolean(data.status),\n [`${ModelAccountFields.account_code}`]: accountCode\n }\n\n}\n\nconst getCreateUpdatePayload = (businessId: number, ownerUserId: number) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: data.accountId,\n [`${ModelAccountFields.business_id}`]: businessId,\n [`${ModelAccountFields.owner_user_id}`]: ownerUserId,\n }\n\n}\n\nconst getUpdatePayload = (data: AccountUpdateProps[\"data\"], accountCode: string = \"\") => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: accoundId,\n [`${ModelAccountFields.business_id}`]: data.businessId,\n [`${ModelAccountFields.name}`]: data.name,\n ...(accountCode ? { [`${ModelAccountFields.account_code}`]: data.accountCode } : {}),\n [`${ModelAccountFields.status}`]: Boolean(data.status)\n }\n\n}\n\nlet mainSqlSelect = {\n [`acc.${ModelAccountFields.account_id}`]: \"account_id\",\n [`acc.${ModelAccountFields.business_id}`]: \"business_id\",\n [`acc.${ModelAccountFields.name}`]: \"name\",\n [`acc.${ModelAccountFields.account_code}`]: \"account_code\",\n [`acc.${ModelAccountFields.status}`]: \"account_status\",\n}\n\nlet businessSqlSelect = {\n [`bus.${ModelBusinessFields.address_1}`]: \"address_1\",\n [`bus.${ModelBusinessFields.address_2}`]: \"address_2\",\n [`bus.${ModelBusinessFields.company_contact}`]: \"company_contact\",\n [`bus.${ModelBusinessFields.company_name}`]: \"company_name\",\n [`bus.${ModelBusinessFields.email}`]: \"email\",\n [`bus.${ModelBusinessFields.area_id}`]: \"area_id\",\n [`bussarea.${ModelAreaFields.area_name}`]: \"area_name\",\n [`bus.${ModelBusinessFields.state_id}`]: \"state_id\",\n [`bussstate.${ModelStateFields.state_name}`]: \"state_name\",\n [`busscoun.${ModelCountryFields.country_name}`]: \"country_name\",\n [`bus.${ModelBusinessFields.country_id}`]: \"country_id\",\n [`bus.${ModelBusinessFields.postcode}`]: \"postcode\",\n [`bus.${ModelBusinessFields.registration_number}`]: \"registration_number\",\n [`bus.${ModelBusinessFields.status}`]: \"business_status\",\n [`bus.${ModelBusinessFields.website}`]: \"website\",\n}\n\nlet ownerSqlSelectItem = {\n [`usrowner.${ModelUserFields.user_id}`]: \"user_id\",\n [`usrowner.${ModelUserFields.login_username}`]: \"login_username\",\n [`usrowner.${ModelUserFields.user_type}`]: \"user_type\",\n [`usrowner.${ModelUserFields.firstname}`]: \"firstname\",\n [`usrowner.${ModelUserFields.lastname}`]: \"lastname\",\n [`CONCAT(usrowner.${ModelUserFields.contact_country_code}, usrowner.${ModelUserFields.contact_phone_number})`]: \"contact\",\n [`usrowner.${ModelUserFields.contact_country_code}`]: \"contact_country_code\",\n [`usrowner.${ModelUserFields.contact_phone_number}`]: \"contact_phone_number\",\n [`usrowner.${ModelUserFields.email}`]: \"email\",\n [`usrowner.${ModelUserFields.address}`]: \"address\",\n [`usrowner.${ModelUserFields.status}`]: \"status\",\n}\n\nlet ownerSqlSelect = {\n [`COALESCE(\n JSONB_BUILD_OBJECT(\n ${Object.entries(ownerSqlSelectItem).map(([key, alias]) => `'${alias}', ${key}`).join(\", \")}\n ),\n '{}'::jsonb\n )`]: \"owner\"\n}\n\nlet defaultSqlSelect = {\n [`acc.${ModelAccountFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`acc.${ModelAccountFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`acc.${ModelAccountFields.isdelete}`]: \"isdelete\",\n [`acc.${ModelAccountFields.istrash}`]: \"istrash\",\n [`acc.${ModelAccountFields.accountid}`]: \"accountid\",\n}\n\n// Example reserved words for subdomains (account code)\nexport const accountCodeReservedWords = [\n \"www\", \"web\", \"api\", \"admin\", \"app\", \"mail\", \"support\", \"help\", \"docs\", \"dashboard\",\n \"billing\", \"login\", \"logout\", \"signup\", \"register\", \"auth\", \"account\", \"user\", \"users\", \"team\",\n \"teams\", \"settings\", \"config\", \"configuration\", \"system\", \"internal\", \"status\", \"test\", \"demo\", \"staging\",\n \"dev\", \"development\", \"prod\", \"production\", \"root\", \"home\", \"index\", \"static\", \"assets\", \"public\",\n \"beta\", \"alpha\", \"sandbox\", \"trial\", \"guest\", \"owner\", \"manager\", \"administrator\", \"moderator\", \"operator\",\n \"service\", \"api-docs\", \"portal\", \"console\", \"control\", \"ops\", \"supportdesk\", \"helpdesk\", \"contact\", \"feedback\",\n \"security\", \"privacy\", \"terms\", \"policy\", \"legal\", \"about\", \"company\", \"teaminfo\", \"partners\", \"affiliates\",\n \"news\", \"blog\", \"media\", \"press\", \"events\", \"calendar\", \"forum\", \"community\", \"chat\", \"messaging\",\n \"notifications\", \"alerts\", \"reports\", \"analytics\", \"metrics\", \"logs\", \"history\", \"archive\", \"backup\", \"restore\",\n \"files\", \"documents\", \"resources\", \"library\", \"gallery\", \"images\", \"videos\", \"downloads\", \"uploads\", \"templates\"\n];\n\n// Zod schema for subdomain (account code)\nexport const accountCodeSchema = z\n .string()\n .min(5, { message: \"Account code must be at least 5 characters\" })\n .max(63, { message: \"Account code must be at most 63 characters\" })\n .regex(\n /^[a-z0-9]([a-z0-9-]{3,61}[a-z0-9])$/,\n // Regex explanation:\n // ^[a-z0-9] -> first character must be a lowercase letter or number\n // ([a-z0-9-]{3,61} -> middle characters can be letters, numbers, or hyphens, 3–61 characters\n // [a-z0-9])$ -> last character must be a lowercase letter or number\n // Total length = 5–63 characters, no special symbols except hyphen in the middle\n \"Account code can only contain lowercase letters, numbers, and hyphens, and cannot start or end with a hyphen\"\n )\n .transform((val) => val.toLowerCase().trim()) // normalize\n .refine((val) => !accountCodeReservedWords.includes(val), {\n message: \"This account code is reserved. Please choose another one\",\n });\n\nexport const AccountService = (props: AccountServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const accountModel = AccountModel({ ...rest })\n const accessKeyService = AccessKeyService({ ...rest, accessKeyUserType: \"administrator\" })\n\n // generate account code (`{random 5 digit}{first 7 digit of timestamp}`)\n function generateAccountCode(): string {\n const timestamp = Date.now().toString();\n const last7 = timestamp.slice(-7); // last 7 digits of timestamp\n const prefix = Math.floor(Math.random() * 100000) // 0–99999\n .toString()\n .padStart(5, \"0\"); // ensure 5 digits\n return prefix + last7;\n }\n\n const checkAccoutCodeIsUsed = async (\n accountCode: Account[\"accountCode\"],\n selfAccountId?: Account[\"accountId\"]\n ) => {\n\n const { data } = await listAccounts({\n limit: 1,\n offset: 0,\n sortfield: `${ModelAccountFields.account_id}`,\n sortorder: \"ASC\",\n filters: [{\n field: `${ModelAccountFields.account_code}`,\n operator: \"=\",\n value: accountCode\n }],\n datatypes: []\n })\n\n if (data.length <= 0) return false\n\n if (selfAccountId) {\n\n if (Number(data[0].account_id) === Number(selfAccountId)) {\n return false\n } else {\n return true\n }\n\n } else {\n\n return true\n }\n\n }\n\n const validateAccountCodeIsUsed = async (accountCode: string) => {\n\n const accountCodeIsUsed = await checkAccoutCodeIsUsed(accountCode)\n\n if (accountCodeIsUsed === true) {\n throwError(`Account code has been used: ${accountCode}`)\n }\n\n }\n\n const validateAccountCodeFormat = (accountCode: string) => {\n try {\n return accountCodeSchema.parse(accountCode); // throws if invalid\n } catch (err) {\n if (err instanceof z.ZodError) {\n throw new Error(\n `Invalid account code: \"${accountCode}\". ` +\n err.errors.map((e) => e.message).join(\"; \")\n );\n }\n throw err;\n }\n };\n\n const createAccount = async ({ data }: AccountCreateProps) => {\n\n const administratorData = data?.administrator ?? {}\n\n // pre validation first\n if (administratorData?.contact) {\n\n const validateUserService = UserService({ ...rest, userType: \"administrator\" })\n\n // validate the contact\n await validateUserService.validateUserContact(administratorData.contact.countryCode, administratorData.contact.phoneNumber)\n\n }\n\n let accountCode = data?.accountCode ?? \"\";\n\n // auto generate if not specify\n if (accountCode === \"\") {\n accountCode = generateAccountCode()\n }\n\n // validate the account code format\n validateAccountCodeFormat(accountCode)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(accountCode)\n\n // create account\n const _data = getCreatePayload(data, accountCode)\n\n if (!_data) {\n throw new Error(`Invalid create account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.create({ data: _data })\n\n const newAccountId = response?.account_id ?? 0\n\n const businessService = BusinessService({ ...rest, accountId: Number(newAccountId) })\n const userService = UserService({ ...rest, accountId: Number(newAccountId), userType: \"administrator\" })\n\n let accountBusinessId = 0\n let accountUserId = 0\n let accountId = 0\n\n // create user(administrator)\n if (administratorData?.loginUsername) {\n\n let userData = administratorData\n\n let userPayload: UserCreateProps = {\n userType: \"administrator\",\n data: {\n user: {\n address: userData.address,\n contact: {\n countryCode: userData.contact.countryCode,\n phoneNumber: userData.contact.phoneNumber\n },\n email: userData.email,\n firstname: userData.firstname,\n lastname: userData.lastname,\n loginPassword: userData.loginPassword,\n loginUsername: userData.loginUsername,\n status: true // always true for first time\n },\n administrator: {\n isOwner: true // first create must be owner\n },\n props: {\n locationIds: []\n }\n }\n }\n\n const responseOwner = await userService.createUser(userPayload)\n\n accountUserId = Number(responseOwner?.user_id) ?? 0\n accountId = Number(responseOwner?.accountid) ?? 0\n\n }\n\n // create default administrator access key\n await accessKeyService.createAccessKey({\n data: {\n userId: accountUserId,\n isDefault: true,\n overrideAccountId: accountId\n }\n })\n\n // create business\n if (data?.business) {\n\n let businessData = data?.business ?? {}\n\n let businessPayload: BusinessCreateProps = {\n data: {\n address1: businessData.address1,\n address2: businessData.address2,\n areaId: businessData.areaId,\n companyContact: businessData.companyContact,\n companyName: businessData.companyName,\n countryId: businessData.countryId,\n email: businessData.email,\n postcode: businessData.postcode,\n registrationNumber: businessData.registrationNumber,\n stateId: businessData.stateId,\n website: businessData.website,\n status: true // always true for first time\n }\n }\n\n const responseBusiness = await businessService.createBusiness(businessPayload)\n\n accountBusinessId = Number(responseBusiness?.business_id) ?? 0\n\n }\n\n // update account for additional info\n const createUpdatedata = getCreateUpdatePayload(accountBusinessId, accountUserId)\n\n if (!createUpdatedata) {\n throw new Error(`Invalid create update account payload: ${JSON.stringify(_data)}`);\n }\n\n await accountModel.update({ id: Number(newAccountId), data: createUpdatedata })\n\n return await getAccount({ id: Number(newAccountId), datatypes: [] })\n }\n\n const updateAccount = async ({ accountId, data }: AccountUpdateProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let accountCode = data?.accountCode ?? \"\";\n\n // check the override account code needed\n if (accountCode) {\n\n // validate the account code format\n validateAccountCodeFormat(accountCode)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(accountCode)\n }\n\n // const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode, accountId)\n\n // if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n const _data = getUpdatePayload(data, accountCode)\n\n if (!_data) {\n throw new Error(`Invalid update account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.update({ where: { [`${ModelAccountFields.account_id}`]: accountId }, data: _data })\n\n return await getAccount({ id: accountId, datatypes: [] })\n }\n\n const getAccount = async ({ id, datatypes = [] }: AccountGetProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let { data } = await listAccounts({\n limit: 1,\n offset: 0,\n filters: [{ field: \"account_id\", operator: \"=\", value: id }],\n sortfield: \"account_id\",\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n };\n\n const listAccounts = async ({ limit, offset, filters = [], sortfield, sortorder, datatypes = [] }: AccountListProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let data = []\n\n let sqlSelect = [\n `COUNT(acc.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, businessSqlSelect),\n buildSqlSelect(``, ownerSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"acc\", \"businesses\", \"bus\", [\"acc.business_id = bus.business_id\", \"bus.isdelete = false\", \"bus.istrash = false\"]),\n buildSqlRelation(\"left\", \"bus\", \"states\", \"bussstate\", [\"bus.state_id = bussstate.state_id\", \"bussstate.isdelete = false\", \"bussstate.istrash = false\"]),\n buildSqlRelation(\"left\", \"bus\", \"countries\", \"busscoun\", [\"bus.country_id = busscoun.country_id\", \"busscoun.isdelete = false\", \"busscoun.istrash = false\"]),\n buildSqlRelation(\"left\", \"bus\", \"areas\", \"bussarea\", [\"bus.area_id = bussarea.area_id\", \"bussarea.isdelete = false\", \"bussarea.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"usrowner\", [\"acc.owner_user_id = usrowner.user_id\", \"usrowner.isdelete = false\", \"usrowner.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"creator\", [\"acc.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"updater\", [\"acc.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(businessSqlSelect),\n ...Object.keys(ownerSqlSelectItem),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = { ...mainSqlSelect, ...businessSqlSelect, ...ownerSqlSelectItem, ...defaultSqlSelect }\n\n let sqlWhere = [\n `acc.isdelete = false`,\n `acc.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"accounts\",\n mainAlias: \"acc\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId: Boolean(rest.isOperator === true)\n })\n\n data = await accountModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n const removeAccounts = async ({ accountIds }: AccountRemoveProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n if (!accountIds.length) throwError('accountIds is required');\n\n let accountResponse = await accountModel.remove({ where: { [`${ModelAccountFields.account_id}`]: { in: accountIds } } });\n\n let response: any[] = []\n\n await Promise.all(\n accountResponse.map(async (item) => {\n\n const accountId = item?.account_id ?? 0;\n const ownerUserId = item?.owner_user_id ?? 0;\n const businessId = item?.business_id ?? 0;\n\n const businessService = BusinessService({ ...rest, accountId: Number(accountId) })\n // const userService = UserService({ ...rest, accountId: Number(accountId), userType: \"administrator\" })\n\n const userModel = UserModel({ ...rest })\n\n let responseBusiness: any[] = []\n let responseUser: any[] = []\n\n // remove business\n if (businessId) {\n responseBusiness = await businessService.removeBusinesses({ businessIds: [BigInt(businessId)] });\n }\n\n // remove all users (administrator, etc...)\n if (ownerUserId) {\n\n const responseUsers = await userModel.remove({\n // ids: [Number(ownerUserId)]\n where: {\n [`${ModelUserFields.accountid}`]: accountId\n }\n })\n\n responseUser = responseUsers.map((i: any) => {\n delete i.login_password\n return i\n })\n\n }\n\n response.push({\n ...item,\n business: responseBusiness.length > 0 ? responseBusiness[0] : {},\n users: responseUser\n })\n\n })\n );\n\n return response\n\n };\n\n // const getDataTypes = () => {\n // return Object.values(accountDataTypes);\n // }\n\n // return {\n // // getAccount,\n // // createAccount,\n // // updateAccount,\n // // removeAccounts,\n // // listAccounts\n // // validateAccountCodeIsUsed: ServiceFactory(validateAccountCodeIsUsed, rest, \"validate account code is used\"),\n // getAccount: ServiceFactory([\"operator\"], \"AccountService\", getAccount, rest, \"get account\"),\n // createAccount: ServiceFactory([\"operator\"], \"AccountService\", createAccount, rest, \"create account\"),\n // updateAccount: ServiceFactory([\"operator\"], \"AccountService\", updateAccount, rest, \"update account\"),\n // removeAccounts: ServiceFactory([\"operator\"], \"AccountService\", removeAccounts, rest, \"remove accounts\"),\n // listAccounts: ServiceFactory([\"operator\"], \"AccountService\", listAccounts, rest, \"list accounts\"),\n // }\n\n const methodConfigs = {\n getAccount: { fn: getAccount, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"get account\" },\n listAccounts: { fn: listAccounts, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"list accounts\" },\n createAccount: { fn: createAccount, allowUserTypes: [\"operator\"] as const, actionName: \"create account\" },\n updateAccount: { fn: updateAccount, allowUserTypes: [\"operator\"] as const, actionName: \"update account\" },\n removeAccounts: { fn: removeAccounts, allowUserTypes: [\"operator\"] as const, actionName: \"remove accounts\" },\n };\n\n return ServiceFactory(\"AccountService\", rest, methodConfigs);\n\n}\n\n"]}
@@ -133,7 +133,10 @@ const AuthService = (props) => {
133
133
  foundUser = foundOtherUser.length > 0 ? foundOtherUser[0] : {};
134
134
  }
135
135
  if (!foundUser?.user_id) {
136
- throw Error(`Invalid username: ${data["username"]}`);
136
+ throw Error(`Invalid username: ${data.username}`);
137
+ }
138
+ if (foundUser?.status !== true) {
139
+ throw new Error(`User is inactive: ${data.username}`);
137
140
  }
138
141
  let user = foundUser;
139
142
  // foundUser.length > 0 ? foundUser[0] : {}
@@ -1 +1 @@
1
- {"version":3,"file":"AuthService.js","sourceRoot":"","sources":["../../../src/services/auth/AuthService.ts"],"names":[],"mappings":"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","sourcesContent":["// import { QueryList, QueryGet } from \"@/schema/common\";\nimport { DefaultServiceProps, throwError } from \"@/utils\";\nimport {\n UserService,\n // UserGetProps,\n UserType,\n UserListProps,\n // userTypes,\n AccountService,\n LocationService,\n LocationListProps\n} from \"@/services\";\n\nimport jwt, { JwtPayload } from \"jsonwebtoken\";\n\nimport { generateAuthToken, verifyPassword, verifyAuthToken, hashPassword } from \"@/utils\"\nimport { ModelAccountFields, ModelUserFields, UserModel } from \"@/models\";\n\nexport const authTypes = {\n operator: \"operator\",\n administrator: \"administrator\",\n worker: \"worker\",\n customer: \"customer\",\n member: \"member\",\n} as const\n\nexport type AuthType = typeof authTypes[keyof typeof authTypes]\n\nexport type AuthJwtToken = JwtPayload & {\n user?: { id: number, user_id: number, user_type: AuthType };\n account?: { id: number, account_id: number };\n};\n\nexport type AuthServiceProps = DefaultServiceProps & {\n secretKey: string,\n authType: AuthType\n};\n\nexport type AuthGetTokenProps = {\n authType: AuthType,\n // accountId?: number,\n accountCode?: string,\n data:\n // get token\n {\n username: string,\n password: string\n }\n};\n\nexport const AuthService = (props: AuthServiceProps) => {\n\n const {\n secretKey,\n authType = \"administrator\",\n ...rest\n } = props\n\n const getUserInjectionFieldName = (authType: AuthType) => {\n\n if (authType === \"administrator\") return [\"administrator_injection_fields\"]\n if (authType === \"customer\") return [\"customer_injection_fields\"]\n if (authType === \"worker\") return [\"worker_injection_fields\"]\n\n return []\n }\n\n const validateAuthAccount = async (accountCode: string) => {\n\n if (accountCode === \"\") {\n return 0\n }\n\n // check if the accountId & accountCode is not empty\n // if (!accountId && !accountCode) throwError(`accountId or accountCode is required`)\n\n let selectAccountId = 0\n\n // check account id is choose \n // if (selectAccountId === 0) {\n\n const globalAccountService = AccountService({ ...rest, isOperator: true })\n\n // use account code to find the account id\n if (accountCode) {\n\n let { data: responseAcc } = await globalAccountService.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 selectAccountId = responseAcc.length > 0 ? responseAcc[0].account_id : \"\"\n let selectAccountStatus = responseAcc.length > 0 ? responseAcc[0].account_status : \"\"\n\n if (selectAccountStatus !== true) throwError(`Inactive account: ${accountCode}`)\n\n }\n\n if (!selectAccountId) {\n throwError(`Invalid account code: ${accountCode}`)\n }\n\n // }\n\n return Number(selectAccountId ?? 0)\n\n }\n\n const getAuthToken = async ({ authType, data, accountCode = \"\" }: AuthGetTokenProps) => {\n\n let _rest = rest\n let _accountId = 0\n\n if (authType !== \"operator\") {\n _accountId = await validateAuthAccount(accountCode)\n }\n\n // _rest.accountId = accountId\n _rest.accountId = _accountId\n\n // check the option pass in using account id or account code\n // if (authType !== \"operator\") {\n // _rest.accountId = accountId\n\n // // check if the accountId & accountCode is not empty\n // if (!accountId && !accountCode) throwError(`accountId or accountCode is required`)\n\n // let selectAccountId = `${accountId}`\n\n // // check account id is choose \n // if (selectAccountId === \"0\") {\n\n // const globalAccountService = AccountService({ ...rest, isOperator: true })\n\n // // use account code to find the account id\n // if (accountCode) {\n\n // let { data: responseAcc } = await globalAccountService.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 // selectAccountId = responseAcc.length > 0 ? responseAcc[0].account_id : \"\"\n // let selectAccountStatus = responseAcc.length > 0 ? responseAcc[0].account_status : \"\"\n\n // if (selectAccountStatus !== true) throwError(`Inactive account: ${accountCode}`)\n\n // }\n\n // if (!selectAccountId) {\n // throwError(`Invalid account code: ${accountCode}`)\n // }\n\n // }\n\n // _rest.accountId = Number(selectAccountId)\n\n // } else {\n // _rest.accountId = accountId\n // }\n\n const userService = UserService({ userType: authType as UserType, ...rest })\n const accountService = AccountService({ ...rest, isOperator: true })\n const locationService = LocationService({ ...rest, locationType: \"location\" })\n\n let foundUser: any = {}\n\n // only for operator & administrator\n if (authType === \"operator\" || authType === \"administrator\") {\n\n // const operatorService = UserService({ ...rest })\n\n const _user = await userService.getUserByUsername({\n username: `${data[\"username\"]}`,\n includePassword: true,\n datatypes: getUserInjectionFieldName(authType) as any\n })\n\n foundUser = _user\n\n } else { // other user type\n\n let payload: UserListProps = {\n includePassword: true,\n limit: 1,\n offset: 0,\n sortfield: \"user_id\",\n sortorder: \"DESC\",\n filters: [\n { field: \"username\", operator: \"=\", value: `${data[\"username\"]}` },\n { field: \"user_type\", operator: \"=\", value: `${authType}` }\n ],\n datatypes: getUserInjectionFieldName(authType)\n }\n\n const { data: foundOtherUser } = await userService.listUsers(payload)\n\n foundUser = foundOtherUser.length > 0 ? foundOtherUser[0] : {}\n\n }\n\n if (!foundUser?.user_id) {\n throw Error(`Invalid username: ${data[\"username\"]}`)\n }\n\n let user = foundUser\n // foundUser.length > 0 ? foundUser[0] : {}\n\n let decryptedPass: boolean\n\n try {\n decryptedPass = await verifyPassword(data.password, user.password)\n } catch (error) {\n throw error\n }\n\n if (decryptedPass === false) {\n throw Error(`Invalid credential: ${data[\"username\"]}`)\n }\n\n // dont show out to result\n delete user.password\n\n let account: any = {}\n\n // if (_rest.accountId && authType !== \"operator\") {\n account = await accountService.getAccount({ id: Number(_rest.accountId), datatypes: [] })\n // }\n\n const authToken = generateAuthToken(user, account, secretKey)\n\n // get the locations for user\n const locationIds = user?.location_id ? user.location_id.split(\", \") : []\n\n let locations: any[] = []\n\n if (locationIds.length > 0) {\n const listPayload: LocationListProps = {\n limit: 100,\n offset: 0,\n sortfield: \"location_id\",\n sortorder: \"ASC\",\n filters: [{\n field: \"location_id\",\n operator: \"where_in\",\n value: locationIds.map((i: any) => Number(i))\n }],\n datatypes: []\n }\n\n const { data } = await locationService.listLocations(listPayload)\n locations = data\n }\n\n return {\n token: authToken,\n account,\n user,\n user_locations: locations,\n // parent_user_id: 0,\n // roles: [\n // {\n // id: 23,\n // role_name: \"123\"\n // }\n // ],\n // permissions: [],\n is_owner: Boolean(user?.is_owner),\n // owner_id: 0\n }\n };\n\n return {\n getAuthToken,\n verifyAuthToken,\n }\n\n}\n\n"]}
1
+ {"version":3,"file":"AuthService.js","sourceRoot":"","sources":["../../../src/services/auth/AuthService.ts"],"names":[],"mappings":";;;AAAA,yDAAyD;AACzD,mCAA0D;AAC1D,yCASoB;AAIpB,mCAA0F;AAC1F,qCAA0E;AAE7D,QAAA,SAAS,GAAG;IACrB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;IAC9B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;CACV,CAAA;AA0BH,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAE,EAAE;IAEnD,MAAM,EACF,SAAS,EACT,QAAQ,GAAG,eAAe,EAC1B,GAAG,IAAI,EACV,GAAG,KAAK,CAAA;IAET,MAAM,yBAAyB,GAAG,CAAC,QAAkB,EAAE,EAAE;QAErD,IAAI,QAAQ,KAAK,eAAe;YAAE,OAAO,CAAC,gCAAgC,CAAC,CAAA;QAC3E,IAAI,QAAQ,KAAK,UAAU;YAAE,OAAO,CAAC,2BAA2B,CAAC,CAAA;QACjE,IAAI,QAAQ,KAAK,QAAQ;YAAE,OAAO,CAAC,yBAAyB,CAAC,CAAA;QAE7D,OAAO,EAAE,CAAA;IACb,CAAC,CAAA;IAED,MAAM,mBAAmB,GAAG,KAAK,EAAE,WAAmB,EAAE,EAAE;QAEtD,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;YACrB,OAAO,CAAC,CAAA;QACZ,CAAC;QAED,oDAAoD;QACpD,qFAAqF;QAErF,IAAI,eAAe,GAAG,CAAC,CAAA;QAEvB,8BAA8B;QAC9B,+BAA+B;QAE/B,MAAM,oBAAoB,GAAG,IAAA,yBAAc,EAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;QAE1E,0CAA0C;QAC1C,IAAI,WAAW,EAAE,CAAC;YAEd,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC;gBAChE,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;gBACT,SAAS,EAAE,GAAG,2BAAkB,CAAC,UAAU,EAAE;gBAC7C,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,CAAC;wBACN,KAAK,EAAE,GAAG,2BAAkB,CAAC,YAAY,EAAE;wBAC3C,QAAQ,EAAE,GAAG;wBACb,KAAK,EAAE,GAAG,WAAW,EAAE;qBAC1B,CAAC;gBACF,SAAS,EAAE,EAAE;aAChB,CAAC,CAAA;YAEF,eAAe,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAA;YACzE,IAAI,mBAAmB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAA;YAErF,IAAI,mBAAmB,KAAK,IAAI;gBAAE,IAAA,kBAAU,EAAC,qBAAqB,WAAW,EAAE,CAAC,CAAA;QAEpF,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,IAAA,kBAAU,EAAC,yBAAyB,WAAW,EAAE,CAAC,CAAA;QACtD,CAAC;QAED,IAAI;QAEJ,OAAO,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC,CAAA;IAEvC,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,GAAG,EAAE,EAAqB,EAAE,EAAE;QAEnF,IAAI,KAAK,GAAG,IAAI,CAAA;QAChB,IAAI,UAAU,GAAG,CAAC,CAAA;QAElB,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1B,UAAU,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAA;QACvD,CAAC;QAED,8BAA8B;QAC9B,KAAK,CAAC,SAAS,GAAG,UAAU,CAAA;QAE5B,4DAA4D;QAC5D,iCAAiC;QACjC,8BAA8B;QAE9B,uDAAuD;QACvD,qFAAqF;QAErF,uCAAuC;QAEvC,iCAAiC;QACjC,iCAAiC;QAEjC,iFAAiF;QAEjF,iDAAiD;QACjD,yBAAyB;QAEzB,gFAAgF;QAChF,wBAAwB;QACxB,yBAAyB;QACzB,6DAA6D;QAC7D,gCAAgC;QAChC,0BAA0B;QAC1B,+DAA+D;QAC/D,iCAAiC;QACjC,2CAA2C;QAC3C,kBAAkB;QAClB,4BAA4B;QAC5B,aAAa;QAEb,oFAAoF;QACpF,gGAAgG;QAEhG,2FAA2F;QAE3F,QAAQ;QAER,8BAA8B;QAC9B,6DAA6D;QAC7D,QAAQ;QAER,IAAI;QAEJ,gDAAgD;QAEhD,WAAW;QACX,kCAAkC;QAClC,IAAI;QAEJ,MAAM,WAAW,GAAG,IAAA,sBAAW,EAAC,EAAE,QAAQ,EAAE,QAAoB,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;QAC5E,MAAM,cAAc,GAAG,IAAA,yBAAc,EAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;QACpE,MAAM,eAAe,GAAG,IAAA,0BAAe,EAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAA;QAE9E,IAAI,SAAS,GAAQ,EAAE,CAAA;QAEvB,oCAAoC;QACpC,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;YAE1D,mDAAmD;YAEnD,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,iBAAiB,CAAC;gBAC9C,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE;gBAC/B,eAAe,EAAE,IAAI;gBACrB,SAAS,EAAE,yBAAyB,CAAC,QAAQ,CAAQ;aACxD,CAAC,CAAA;YAEF,SAAS,GAAG,KAAK,CAAA;QAErB,CAAC;aAAM,CAAC,CAAC,kBAAkB;YAEvB,IAAI,OAAO,GAAkB;gBACzB,eAAe,EAAE,IAAI;gBACrB,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;gBACT,SAAS,EAAE,SAAS;gBACpB,SAAS,EAAE,MAAM;gBACjB,OAAO,EAAE;oBACL,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;oBAClE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,EAAE;iBAC9D;gBACD,SAAS,EAAE,yBAAyB,CAAC,QAAQ,CAAC;aACjD,CAAA;YAED,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAErE,SAAS,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAElE,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QACrD,CAAC;QAED,IAAI,SAAS,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,IAAI,GAAG,SAAS,CAAA;QACpB,2CAA2C;QAE3C,IAAI,aAAsB,CAAA;QAE1B,IAAI,CAAC;YACD,aAAa,GAAG,MAAM,IAAA,sBAAc,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,KAAK,CAAA;QACf,CAAC;QAED,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,uBAAuB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QAC1D,CAAC;QAED,0BAA0B;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAA;QAEpB,IAAI,OAAO,GAAQ,EAAE,CAAA;QAErB,oDAAoD;QACpD,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QACzF,IAAI;QAEJ,MAAM,SAAS,GAAG,IAAA,yBAAiB,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;QAE7D,6BAA6B;QAC7B,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAEzE,IAAI,SAAS,GAAU,EAAE,CAAA;QAEzB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,WAAW,GAAsB;gBACnC,KAAK,EAAE,GAAG;gBACV,MAAM,EAAE,CAAC;gBACT,SAAS,EAAE,aAAa;gBACxB,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,CAAC;wBACN,KAAK,EAAE,aAAa;wBACpB,QAAQ,EAAE,UAAU;wBACpB,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;qBAChD,CAAC;gBACF,SAAS,EAAE,EAAE;aAChB,CAAA;YAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAe,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;YACjE,SAAS,GAAG,IAAI,CAAA;QACpB,CAAC;QAED,OAAO;YACH,KAAK,EAAE,SAAS;YAChB,OAAO;YACP,IAAI;YACJ,cAAc,EAAE,SAAS;YACzB,qBAAqB;YACrB,WAAW;YACX,IAAI;YACJ,cAAc;YACd,uBAAuB;YACvB,IAAI;YACJ,KAAK;YACL,mBAAmB;YACnB,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;YACjC,cAAc;SACjB,CAAA;IACL,CAAC,CAAC;IAEF,OAAO;QACH,YAAY;QACZ,eAAe,EAAf,uBAAe;KAClB,CAAA;AAEL,CAAC,CAAA;AAvPY,QAAA,WAAW,eAuPvB","sourcesContent":["// import { QueryList, QueryGet } from \"@/schema/common\";\nimport { DefaultServiceProps, throwError } from \"@/utils\";\nimport {\n UserService,\n // UserGetProps,\n UserType,\n UserListProps,\n // userTypes,\n AccountService,\n LocationService,\n LocationListProps\n} from \"@/services\";\n\nimport jwt, { JwtPayload } from \"jsonwebtoken\";\n\nimport { generateAuthToken, verifyPassword, verifyAuthToken, hashPassword } from \"@/utils\"\nimport { ModelAccountFields, ModelUserFields, UserModel } from \"@/models\";\n\nexport const authTypes = {\n operator: \"operator\",\n administrator: \"administrator\",\n worker: \"worker\",\n customer: \"customer\",\n member: \"member\",\n} as const\n\nexport type AuthType = typeof authTypes[keyof typeof authTypes]\n\nexport type AuthJwtToken = JwtPayload & {\n user?: { id: number, user_id: number, user_type: AuthType };\n account?: { id: number, account_id: number };\n};\n\nexport type AuthServiceProps = DefaultServiceProps & {\n secretKey: string,\n authType: AuthType\n};\n\nexport type AuthGetTokenProps = {\n authType: AuthType,\n // accountId?: number,\n accountCode?: string,\n data:\n // get token\n {\n username: string,\n password: string\n }\n};\n\nexport const AuthService = (props: AuthServiceProps) => {\n\n const {\n secretKey,\n authType = \"administrator\",\n ...rest\n } = props\n\n const getUserInjectionFieldName = (authType: AuthType) => {\n\n if (authType === \"administrator\") return [\"administrator_injection_fields\"]\n if (authType === \"customer\") return [\"customer_injection_fields\"]\n if (authType === \"worker\") return [\"worker_injection_fields\"]\n\n return []\n }\n\n const validateAuthAccount = async (accountCode: string) => {\n\n if (accountCode === \"\") {\n return 0\n }\n\n // check if the accountId & accountCode is not empty\n // if (!accountId && !accountCode) throwError(`accountId or accountCode is required`)\n\n let selectAccountId = 0\n\n // check account id is choose \n // if (selectAccountId === 0) {\n\n const globalAccountService = AccountService({ ...rest, isOperator: true })\n\n // use account code to find the account id\n if (accountCode) {\n\n let { data: responseAcc } = await globalAccountService.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 selectAccountId = responseAcc.length > 0 ? responseAcc[0].account_id : \"\"\n let selectAccountStatus = responseAcc.length > 0 ? responseAcc[0].account_status : \"\"\n\n if (selectAccountStatus !== true) throwError(`Inactive account: ${accountCode}`)\n\n }\n\n if (!selectAccountId) {\n throwError(`Invalid account code: ${accountCode}`)\n }\n\n // }\n\n return Number(selectAccountId ?? 0)\n\n }\n\n const getAuthToken = async ({ authType, data, accountCode = \"\" }: AuthGetTokenProps) => {\n\n let _rest = rest\n let _accountId = 0\n\n if (authType !== \"operator\") {\n _accountId = await validateAuthAccount(accountCode)\n }\n\n // _rest.accountId = accountId\n _rest.accountId = _accountId\n\n // check the option pass in using account id or account code\n // if (authType !== \"operator\") {\n // _rest.accountId = accountId\n\n // // check if the accountId & accountCode is not empty\n // if (!accountId && !accountCode) throwError(`accountId or accountCode is required`)\n\n // let selectAccountId = `${accountId}`\n\n // // check account id is choose \n // if (selectAccountId === \"0\") {\n\n // const globalAccountService = AccountService({ ...rest, isOperator: true })\n\n // // use account code to find the account id\n // if (accountCode) {\n\n // let { data: responseAcc } = await globalAccountService.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 // selectAccountId = responseAcc.length > 0 ? responseAcc[0].account_id : \"\"\n // let selectAccountStatus = responseAcc.length > 0 ? responseAcc[0].account_status : \"\"\n\n // if (selectAccountStatus !== true) throwError(`Inactive account: ${accountCode}`)\n\n // }\n\n // if (!selectAccountId) {\n // throwError(`Invalid account code: ${accountCode}`)\n // }\n\n // }\n\n // _rest.accountId = Number(selectAccountId)\n\n // } else {\n // _rest.accountId = accountId\n // }\n\n const userService = UserService({ userType: authType as UserType, ...rest })\n const accountService = AccountService({ ...rest, isOperator: true })\n const locationService = LocationService({ ...rest, locationType: \"location\" })\n\n let foundUser: any = {}\n\n // only for operator & administrator\n if (authType === \"operator\" || authType === \"administrator\") {\n\n // const operatorService = UserService({ ...rest })\n\n const _user = await userService.getUserByUsername({\n username: `${data[\"username\"]}`,\n includePassword: true,\n datatypes: getUserInjectionFieldName(authType) as any\n })\n\n foundUser = _user\n\n } else { // other user type\n\n let payload: UserListProps = {\n includePassword: true,\n limit: 1,\n offset: 0,\n sortfield: \"user_id\",\n sortorder: \"DESC\",\n filters: [\n { field: \"username\", operator: \"=\", value: `${data[\"username\"]}` },\n { field: \"user_type\", operator: \"=\", value: `${authType}` }\n ],\n datatypes: getUserInjectionFieldName(authType)\n }\n\n const { data: foundOtherUser } = await userService.listUsers(payload)\n\n foundUser = foundOtherUser.length > 0 ? foundOtherUser[0] : {}\n\n }\n\n if (!foundUser?.user_id) {\n throw Error(`Invalid username: ${data.username}`)\n }\n\n if (foundUser?.status !== true) {\n throw new Error(`User is inactive: ${data.username}`);\n }\n\n let user = foundUser\n // foundUser.length > 0 ? foundUser[0] : {}\n\n let decryptedPass: boolean\n\n try {\n decryptedPass = await verifyPassword(data.password, user.password)\n } catch (error) {\n throw error\n }\n\n if (decryptedPass === false) {\n throw Error(`Invalid credential: ${data[\"username\"]}`)\n }\n\n // dont show out to result\n delete user.password\n\n let account: any = {}\n\n // if (_rest.accountId && authType !== \"operator\") {\n account = await accountService.getAccount({ id: Number(_rest.accountId), datatypes: [] })\n // }\n\n const authToken = generateAuthToken(user, account, secretKey)\n\n // get the locations for user\n const locationIds = user?.location_id ? user.location_id.split(\", \") : []\n\n let locations: any[] = []\n\n if (locationIds.length > 0) {\n const listPayload: LocationListProps = {\n limit: 100,\n offset: 0,\n sortfield: \"location_id\",\n sortorder: \"ASC\",\n filters: [{\n field: \"location_id\",\n operator: \"where_in\",\n value: locationIds.map((i: any) => Number(i))\n }],\n datatypes: []\n }\n\n const { data } = await locationService.listLocations(listPayload)\n locations = data\n }\n\n return {\n token: authToken,\n account,\n user,\n user_locations: locations,\n // parent_user_id: 0,\n // roles: [\n // {\n // id: 23,\n // role_name: \"123\"\n // }\n // ],\n // permissions: [],\n is_owner: Boolean(user?.is_owner),\n // owner_id: 0\n }\n };\n\n return {\n getAuthToken,\n verifyAuthToken,\n }\n\n}\n\n"]}