storemw-core-api 1.0.82 → 1.0.84

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.
@@ -78,9 +78,10 @@ const getRootName = (toSingular) => {
78
78
  /** auth/access_key : create access key */
79
79
  const createAccessKey = async (req, res, next) => {
80
80
  try {
81
+ const defaultServiceProps = (0, utils_1.getDefaultServiceProps)(req);
81
82
  const accessKeyService = (0, services_1.AccessKeyService)({
82
- ...(0, utils_1.getDefaultServiceProps)(req),
83
- accessKeyUserType: "administrator"
83
+ ...defaultServiceProps,
84
+ accessKeyUserType: defaultServiceProps.isOperator === true ? "operator" : "administrator"
84
85
  });
85
86
  let response = {};
86
87
  let reqScope = req.body.scope;
@@ -114,9 +115,10 @@ exports.createAccessKey = createAccessKey;
114
115
  /** auth/access_key : validate access key */
115
116
  const validateAccessKey = async (req, res, next) => {
116
117
  try {
118
+ const defaultServiceProps = (0, utils_1.getDefaultServiceProps)(req);
117
119
  const accessKeyService = (0, services_1.AccessKeyService)({
118
- ...(0, utils_1.getDefaultServiceProps)(req),
119
- accessKeyUserType: "administrator"
120
+ ...defaultServiceProps,
121
+ accessKeyUserType: defaultServiceProps.isOperator === true ? "operator" : "administrator"
120
122
  });
121
123
  let response = {};
122
124
  let reqScope = req.body.scope;
@@ -151,9 +153,10 @@ const getAccessKey = async (req, res, next) => {
151
153
  const { accessKeyId } = req.params;
152
154
  const requestQuery = req.query;
153
155
  // const requestUserType = userType as BusinessServiceProps["userType"];
156
+ const defaultServiceProps = (0, utils_1.getDefaultServiceProps)(req);
154
157
  const accessKeyService = (0, services_1.AccessKeyService)({
155
- ...(0, utils_1.getDefaultServiceProps)(req),
156
- accessKeyUserType: "administrator"
158
+ ...defaultServiceProps,
159
+ accessKeyUserType: defaultServiceProps.isOperator === true ? "operator" : "administrator"
157
160
  });
158
161
  const data = await accessKeyService.getAccessKey({ id: Number(accessKeyId), datatypes: requestQuery.datatypes, skipFilterAccountId: false });
159
162
  return (0, utils_1.sendSuccess)(res, data, "Retrieved successfully", getRootName(true));
@@ -168,9 +171,10 @@ const listAccessKeys = async (req, res, next) => {
168
171
  try {
169
172
  const requestQuery = req.query;
170
173
  // const requestUserType = req.params.userType as BusinessServiceProps["userType"];
174
+ const defaultServiceProps = (0, utils_1.getDefaultServiceProps)(req);
171
175
  const accessKeyService = (0, services_1.AccessKeyService)({
172
- ...(0, utils_1.getDefaultServiceProps)(req),
173
- accessKeyUserType: "administrator"
176
+ ...defaultServiceProps,
177
+ accessKeyUserType: defaultServiceProps.isOperator === true ? "operator" : "administrator"
174
178
  });
175
179
  const { data, total } = await accessKeyService.listAccessKeys({
176
180
  ...requestQuery,
@@ -191,9 +195,10 @@ exports.listAccessKeys = listAccessKeys;
191
195
  const revokeAccessKeys = async (req, res, next) => {
192
196
  try {
193
197
  const request = payload_1.schemaAccessKeyRevokePayload.parse(req.body);
198
+ const defaultServiceProps = (0, utils_1.getDefaultServiceProps)(req);
194
199
  const accessKeyService = (0, services_1.AccessKeyService)({
195
- ...(0, utils_1.getDefaultServiceProps)(req),
196
- accessKeyUserType: "administrator"
200
+ ...defaultServiceProps,
201
+ accessKeyUserType: defaultServiceProps.isOperator === true ? "operator" : "administrator"
197
202
  });
198
203
  const payload = {
199
204
  accessKeyIds: request.payload.ids.map(i => BigInt(i))
@@ -1 +1 @@
1
- {"version":3,"file":"accessKeyController.js","sourceRoot":"","sources":["../../../src/controllers/auth/accessKeyController.ts"],"names":[],"mappings":"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","sourcesContent":["import { NextFunction, Request, Response } from \"express\";\n\nimport { getDefaultServiceProps, sendSuccess, sendError, HTTP_STATUS } from \"@/utils\"\n\nimport { QueryList } from \"@/schema/middleware/route\";\n\nimport { AccessKeyService, AccessKeyCreateProps, AccessKeyRevokeProps, AccessKeyValidateProps } from \"@/services\"\nimport { schemaAccessKeyCreatePayload, schemaAccessKeyRevokePayload, schemaAccessKeyValidatePayload } from \"@/schema/payload\";\n\nconst getRootName = (toSingular: boolean) => {\n\n let rootName = toSingular ? \"accessKey\" : \"accessKeys\";\n\n return rootName\n}\n\n/** auth/token : get auth token */\n// export const getAuthToken = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n// try {\n\n// const requestAuthType = req.body.scope.target as AuthType\n\n// const authSecretKey = config.AUTH_SECRET_KEY\n\n// const authService = AuthService({\n// ...getDefaultServiceProps(req),\n// secretKey: authSecretKey,\n// authType: requestAuthType\n// })\n\n// let reqScope = req.body.scope\n// let reqPayload = req.body.payload\n\n// // select schema\n\n// let schema: z.ZodTypeAny;\n// let data: any = {}\n\n// // Operator Authentication\n// if (requestAuthType === \"operator\") {\n\n// schema = schemaAuthTokenOperatorPayload\n\n// let request = schema.parse({\n// scope: {\n// target: reqScope.target,\n// action: reqScope.action\n// },\n// payload: {\n// username: reqPayload.username,\n// password: reqPayload.password\n// }\n// })\n\n// let payload: AuthGetTokenProps = {\n// authType: requestAuthType,\n// accountId: 0,\n// data: {\n// username: request.payload.username,\n// password: request.payload.password\n// }\n// }\n\n// data = await authService.getAuthToken(payload)\n\n// } else {\n\n// schema = schemaAuthTokenPayload\n\n// let request = schema.parse({\n// scope: {\n// target: reqScope.target,\n// action: reqScope.action\n// },\n// payload: {\n// ...(reqPayload?.account_id ? { accountId: reqPayload.account_id } : {}),\n// ...(reqPayload?.account_code ? { accountCode: reqPayload.account_code } : {}),\n// username: reqPayload.username,\n// password: reqPayload.password\n// }\n// })\n\n// let payload: AuthGetTokenProps = {\n// authType: requestAuthType,\n// ...(request?.payload?.accountId ? { accountId: Number(request.payload.accountId) } : {}),\n// ...(request?.payload?.accountCode ? { accountCode: String(request.payload.accountCode) } : {}),\n// data: {\n// username: request.payload.username,\n// password: request.payload.password\n// }\n// }\n\n// data = await authService.getAuthToken(payload)\n\n// }\n\n// return sendSuccess(res, data, \"Token Retrieved successfully\", ``);\n\n// } catch (error: any) {\n// next(error)\n// }\n// }\n\n/** auth/access_key : create access key */\nexport const createAccessKey = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n try {\n\n const accessKeyService = AccessKeyService({\n ...getDefaultServiceProps(req),\n accessKeyUserType: \"administrator\"\n })\n\n let response: any = {}\n\n let reqScope = req.body.scope\n let reqPayload = req.body.payload\n\n let request = schemaAccessKeyCreatePayload.parse({\n scope: {\n target: reqScope.target,\n action: reqScope.action\n },\n payload: {\n access_key: {\n userId: Number(reqPayload?.access_key?.user_id ?? 0),\n }\n }\n })\n\n let payload: AccessKeyCreateProps = {\n data: {\n userId: request.payload.access_key.userId\n }\n }\n\n response = {\n [`${getRootName(true)}`]: await accessKeyService.createAccessKey(payload)\n }\n\n sendSuccess(res, response, `Access Key created successfully`)\n\n } catch (error: any) {\n next(error)\n }\n}\n\n/** auth/access_key : validate access key */\nexport const validateAccessKey = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n try {\n\n const accessKeyService = AccessKeyService({\n ...getDefaultServiceProps(req),\n accessKeyUserType: \"administrator\"\n })\n\n let response: any = {}\n\n let reqScope = req.body.scope\n let reqPayload = req.body.payload\n\n let request = schemaAccessKeyValidatePayload.parse({\n scope: {\n target: reqScope.target,\n action: reqScope.action\n },\n payload: {\n access_key: reqPayload?.access_key ?? \"\"\n }\n })\n\n let payload: AccessKeyValidateProps = {\n data: {\n accessKey: request.payload.access_key\n }\n }\n\n response = {\n [`${getRootName(true)}`]: await accessKeyService.validateAccessKey(payload)\n }\n\n sendSuccess(res, response, `Access Key validated successfully`)\n\n } catch (error: any) {\n next(error)\n }\n}\n\n/** auth/access_key/:accessKeyId : get access key */\nexport const getAccessKey = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n try {\n\n const { accessKeyId } = req.params;\n const requestQuery = req.query as unknown as QueryList;\n // const requestUserType = userType as BusinessServiceProps[\"userType\"];\n\n const accessKeyService = AccessKeyService({\n ...getDefaultServiceProps(req),\n accessKeyUserType: \"administrator\"\n })\n\n const data = await accessKeyService.getAccessKey({ id: Number(accessKeyId), datatypes: requestQuery.datatypes, skipFilterAccountId: false })\n\n return sendSuccess(res, data, \"Retrieved successfully\", getRootName(true));\n\n } catch (error: any) {\n next(error)\n }\n}\n\n/** auth/access_keys : list access keys */\nexport const listAccessKeys = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n try {\n\n const requestQuery = req.query as unknown as QueryList;\n // const requestUserType = req.params.userType as BusinessServiceProps[\"userType\"];\n\n const accessKeyService = AccessKeyService({\n ...getDefaultServiceProps(req),\n accessKeyUserType: \"administrator\"\n })\n\n const { data, total } = await accessKeyService.listAccessKeys({\n ...requestQuery,\n skipFilterAccountId: false\n });\n\n let response = {\n [`${getRootName(false)}`]: data,\n total,\n }\n\n return sendSuccess(res, response, \"Retrieved successfully\");\n\n } catch (error: any) {\n next(error)\n }\n};\n\n/** auth/access_keys/revoke : revoke access keys */\nexport const revokeAccessKeys = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n try {\n\n const request = schemaAccessKeyRevokePayload.parse(req.body)\n\n const accessKeyService = AccessKeyService({\n ...getDefaultServiceProps(req),\n accessKeyUserType: \"administrator\"\n })\n\n const payload: AccessKeyRevokeProps = {\n accessKeyIds: request.payload.ids.map(i => BigInt(i))\n }\n\n const data = await accessKeyService.revokeAccessKeys(payload);\n\n return sendSuccess(res, data, \"Revoked\", getRootName(false));\n\n } catch (error: any) {\n next(error)\n }\n}\n"]}
1
+ {"version":3,"file":"accessKeyController.js","sourceRoot":"","sources":["../../../src/controllers/auth/accessKeyController.ts"],"names":[],"mappings":"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","sourcesContent":["import { NextFunction, Request, Response } from \"express\";\n\nimport { getDefaultServiceProps, sendSuccess, sendError, HTTP_STATUS } from \"@/utils\"\n\nimport { QueryList } from \"@/schema/middleware/route\";\n\nimport { AccessKeyService, AccessKeyCreateProps, AccessKeyRevokeProps, AccessKeyValidateProps } from \"@/services\"\nimport { schemaAccessKeyCreatePayload, schemaAccessKeyRevokePayload, schemaAccessKeyValidatePayload } from \"@/schema/payload\";\n\nconst getRootName = (toSingular: boolean) => {\n\n let rootName = toSingular ? \"accessKey\" : \"accessKeys\";\n\n return rootName\n}\n\n/** auth/token : get auth token */\n// export const getAuthToken = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n// try {\n\n// const requestAuthType = req.body.scope.target as AuthType\n\n// const authSecretKey = config.AUTH_SECRET_KEY\n\n// const authService = AuthService({\n// ...getDefaultServiceProps(req),\n// secretKey: authSecretKey,\n// authType: requestAuthType\n// })\n\n// let reqScope = req.body.scope\n// let reqPayload = req.body.payload\n\n// // select schema\n\n// let schema: z.ZodTypeAny;\n// let data: any = {}\n\n// // Operator Authentication\n// if (requestAuthType === \"operator\") {\n\n// schema = schemaAuthTokenOperatorPayload\n\n// let request = schema.parse({\n// scope: {\n// target: reqScope.target,\n// action: reqScope.action\n// },\n// payload: {\n// username: reqPayload.username,\n// password: reqPayload.password\n// }\n// })\n\n// let payload: AuthGetTokenProps = {\n// authType: requestAuthType,\n// accountId: 0,\n// data: {\n// username: request.payload.username,\n// password: request.payload.password\n// }\n// }\n\n// data = await authService.getAuthToken(payload)\n\n// } else {\n\n// schema = schemaAuthTokenPayload\n\n// let request = schema.parse({\n// scope: {\n// target: reqScope.target,\n// action: reqScope.action\n// },\n// payload: {\n// ...(reqPayload?.account_id ? { accountId: reqPayload.account_id } : {}),\n// ...(reqPayload?.account_code ? { accountCode: reqPayload.account_code } : {}),\n// username: reqPayload.username,\n// password: reqPayload.password\n// }\n// })\n\n// let payload: AuthGetTokenProps = {\n// authType: requestAuthType,\n// ...(request?.payload?.accountId ? { accountId: Number(request.payload.accountId) } : {}),\n// ...(request?.payload?.accountCode ? { accountCode: String(request.payload.accountCode) } : {}),\n// data: {\n// username: request.payload.username,\n// password: request.payload.password\n// }\n// }\n\n// data = await authService.getAuthToken(payload)\n\n// }\n\n// return sendSuccess(res, data, \"Token Retrieved successfully\", ``);\n\n// } catch (error: any) {\n// next(error)\n// }\n// }\n\n/** auth/access_key : create access key */\nexport const createAccessKey = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n try {\n\n const defaultServiceProps = getDefaultServiceProps(req)\n\n const accessKeyService = AccessKeyService({\n ...defaultServiceProps,\n accessKeyUserType: defaultServiceProps.isOperator === true ? \"operator\" : \"administrator\"\n })\n\n let response: any = {}\n\n let reqScope = req.body.scope\n let reqPayload = req.body.payload\n\n let request = schemaAccessKeyCreatePayload.parse({\n scope: {\n target: reqScope.target,\n action: reqScope.action\n },\n payload: {\n access_key: {\n userId: Number(reqPayload?.access_key?.user_id ?? 0),\n }\n }\n })\n\n let payload: AccessKeyCreateProps = {\n data: {\n userId: request.payload.access_key.userId\n }\n }\n\n response = {\n [`${getRootName(true)}`]: await accessKeyService.createAccessKey(payload)\n }\n\n sendSuccess(res, response, `Access Key created successfully`)\n\n } catch (error: any) {\n next(error)\n }\n}\n\n/** auth/access_key : validate access key */\nexport const validateAccessKey = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n try {\n\n const defaultServiceProps = getDefaultServiceProps(req)\n\n const accessKeyService = AccessKeyService({\n ...defaultServiceProps,\n accessKeyUserType: defaultServiceProps.isOperator === true ? \"operator\" : \"administrator\"\n })\n\n let response: any = {}\n\n let reqScope = req.body.scope\n let reqPayload = req.body.payload\n\n let request = schemaAccessKeyValidatePayload.parse({\n scope: {\n target: reqScope.target,\n action: reqScope.action\n },\n payload: {\n access_key: reqPayload?.access_key ?? \"\"\n }\n })\n\n let payload: AccessKeyValidateProps = {\n data: {\n accessKey: request.payload.access_key\n }\n }\n\n response = {\n [`${getRootName(true)}`]: await accessKeyService.validateAccessKey(payload)\n }\n\n sendSuccess(res, response, `Access Key validated successfully`)\n\n } catch (error: any) {\n next(error)\n }\n}\n\n/** auth/access_key/:accessKeyId : get access key */\nexport const getAccessKey = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n try {\n\n const { accessKeyId } = req.params;\n const requestQuery = req.query as unknown as QueryList;\n // const requestUserType = userType as BusinessServiceProps[\"userType\"];\n\n const defaultServiceProps = getDefaultServiceProps(req)\n\n const accessKeyService = AccessKeyService({\n ...defaultServiceProps,\n accessKeyUserType: defaultServiceProps.isOperator === true ? \"operator\" : \"administrator\"\n })\n\n const data = await accessKeyService.getAccessKey({ id: Number(accessKeyId), datatypes: requestQuery.datatypes, skipFilterAccountId: false })\n\n return sendSuccess(res, data, \"Retrieved successfully\", getRootName(true));\n\n } catch (error: any) {\n next(error)\n }\n}\n\n/** auth/access_keys : list access keys */\nexport const listAccessKeys = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n try {\n\n const requestQuery = req.query as unknown as QueryList;\n // const requestUserType = req.params.userType as BusinessServiceProps[\"userType\"];\n\n const defaultServiceProps = getDefaultServiceProps(req)\n\n const accessKeyService = AccessKeyService({\n ...defaultServiceProps,\n accessKeyUserType: defaultServiceProps.isOperator === true ? \"operator\" : \"administrator\"\n })\n\n const { data, total } = await accessKeyService.listAccessKeys({\n ...requestQuery,\n skipFilterAccountId: false\n });\n\n let response = {\n [`${getRootName(false)}`]: data,\n total,\n }\n\n return sendSuccess(res, response, \"Retrieved successfully\");\n\n } catch (error: any) {\n next(error)\n }\n};\n\n/** auth/access_keys/revoke : revoke access keys */\nexport const revokeAccessKeys = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n try {\n\n const request = schemaAccessKeyRevokePayload.parse(req.body)\n\n const defaultServiceProps = getDefaultServiceProps(req)\n\n const accessKeyService = AccessKeyService({\n ...defaultServiceProps,\n accessKeyUserType: defaultServiceProps.isOperator === true ? \"operator\" : \"administrator\"\n })\n\n const payload: AccessKeyRevokeProps = {\n accessKeyIds: request.payload.ids.map(i => BigInt(i))\n }\n\n const data = await accessKeyService.revokeAccessKeys(payload);\n\n return sendSuccess(res, data, \"Revoked\", getRootName(false));\n\n } catch (error: any) {\n next(error)\n }\n}\n"]}
@@ -6,12 +6,12 @@ export declare const injectionFieldSchema: z.ZodDiscriminatedUnion<"field_ref",
6
6
  field_type: z.ZodEnum<["id", "value", "numeric", "integer", "timestamp", "date", "date_time", "text"]>;
7
7
  }, "strip", z.ZodTypeAny, {
8
8
  field_ref: "user";
9
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
9
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
10
10
  field_key: string;
11
11
  field_type: "value" | "integer" | "numeric" | "date" | "id" | "timestamp" | "date_time" | "text";
12
12
  }, {
13
13
  field_ref: "user";
14
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
14
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
15
15
  field_key: string;
16
16
  field_type: "value" | "integer" | "numeric" | "date" | "id" | "timestamp" | "date_time" | "text";
17
17
  }>, z.ZodObject<{
@@ -130,13 +130,13 @@ export declare const injectionFieldSchemaReplace: z.ZodDiscriminatedUnion<"field
130
130
  field_value: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
131
131
  }, "strip", z.ZodTypeAny, {
132
132
  field_ref: "user";
133
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
133
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
134
134
  field_key: string;
135
135
  ref_id: string | number;
136
136
  field_value: string | number;
137
137
  }, {
138
138
  field_ref: "user";
139
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
139
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
140
140
  field_key: string;
141
141
  ref_id: string | number;
142
142
  field_value: string | number;
@@ -298,12 +298,12 @@ export declare const schemaInjectionFieldCreatePayload: z.ZodObject<{
298
298
  field_type: z.ZodEnum<["id", "value", "numeric", "integer", "timestamp", "date", "date_time", "text"]>;
299
299
  }, "strip", z.ZodTypeAny, {
300
300
  field_ref: "user";
301
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
301
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
302
302
  field_key: string;
303
303
  field_type: "value" | "integer" | "numeric" | "date" | "id" | "timestamp" | "date_time" | "text";
304
304
  }, {
305
305
  field_ref: "user";
306
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
306
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
307
307
  field_key: string;
308
308
  field_type: "value" | "integer" | "numeric" | "date" | "id" | "timestamp" | "date_time" | "text";
309
309
  }>, z.ZodObject<{
@@ -415,7 +415,7 @@ export declare const schemaInjectionFieldCreatePayload: z.ZodObject<{
415
415
  }, "strip", z.ZodTypeAny, {
416
416
  injection_fields: ({
417
417
  field_ref: "user";
418
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
418
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
419
419
  field_key: string;
420
420
  field_type: "value" | "integer" | "numeric" | "date" | "id" | "timestamp" | "date_time" | "text";
421
421
  } | {
@@ -457,7 +457,7 @@ export declare const schemaInjectionFieldCreatePayload: z.ZodObject<{
457
457
  }, {
458
458
  injection_fields: ({
459
459
  field_ref: "user";
460
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
460
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
461
461
  field_key: string;
462
462
  field_type: "value" | "integer" | "numeric" | "date" | "id" | "timestamp" | "date_time" | "text";
463
463
  } | {
@@ -504,7 +504,7 @@ export declare const schemaInjectionFieldCreatePayload: z.ZodObject<{
504
504
  payload: {
505
505
  injection_fields: ({
506
506
  field_ref: "user";
507
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
507
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
508
508
  field_key: string;
509
509
  field_type: "value" | "integer" | "numeric" | "date" | "id" | "timestamp" | "date_time" | "text";
510
510
  } | {
@@ -551,7 +551,7 @@ export declare const schemaInjectionFieldCreatePayload: z.ZodObject<{
551
551
  payload: {
552
552
  injection_fields: ({
553
553
  field_ref: "user";
554
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
554
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
555
555
  field_key: string;
556
556
  field_type: "value" | "integer" | "numeric" | "date" | "id" | "timestamp" | "date_time" | "text";
557
557
  } | {
@@ -613,13 +613,13 @@ export declare const schemaInjectionFieldReplacePayload: z.ZodObject<{
613
613
  field_value: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
614
614
  }, "strip", z.ZodTypeAny, {
615
615
  field_ref: "user";
616
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
616
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
617
617
  field_key: string;
618
618
  ref_id: string | number;
619
619
  field_value: string | number;
620
620
  }, {
621
621
  field_ref: "user";
622
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
622
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
623
623
  field_key: string;
624
624
  ref_id: string | number;
625
625
  field_value: string | number;
@@ -767,7 +767,7 @@ export declare const schemaInjectionFieldReplacePayload: z.ZodObject<{
767
767
  }, "strip", z.ZodTypeAny, {
768
768
  injection_fields: ({
769
769
  field_ref: "user";
770
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
770
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
771
771
  field_key: string;
772
772
  ref_id: string | number;
773
773
  field_value: string | number;
@@ -817,7 +817,7 @@ export declare const schemaInjectionFieldReplacePayload: z.ZodObject<{
817
817
  }, {
818
818
  injection_fields: ({
819
819
  field_ref: "user";
820
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
820
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
821
821
  field_key: string;
822
822
  ref_id: string | number;
823
823
  field_value: string | number;
@@ -872,7 +872,7 @@ export declare const schemaInjectionFieldReplacePayload: z.ZodObject<{
872
872
  payload: {
873
873
  injection_fields: ({
874
874
  field_ref: "user";
875
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
875
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
876
876
  field_key: string;
877
877
  ref_id: string | number;
878
878
  field_value: string | number;
@@ -927,7 +927,7 @@ export declare const schemaInjectionFieldReplacePayload: z.ZodObject<{
927
927
  payload: {
928
928
  injection_fields: ({
929
929
  field_ref: "user";
930
- field_module: "administrator" | "worker" | "customer" | "driver" | "retailer" | "member";
930
+ field_module: "administrator" | "worker" | "customer" | "member" | "driver" | "retailer";
931
931
  field_key: string;
932
932
  ref_id: string | number;
933
933
  field_value: string | number;
@@ -1,8 +1,10 @@
1
1
  import { DefaultServiceProps } from "../../utils";
2
2
  import { QueryList, QueryGet } from "../../schema/common";
3
3
  export declare const accessKeyUserTypes: {
4
+ readonly operator: "operator";
4
5
  readonly administrator: "administrator";
5
6
  };
7
+ export declare const allowedAccessUserTypes: AccessKeyUserType[];
6
8
  export type AccessKeyUserType = typeof accessKeyUserTypes[keyof typeof accessKeyUserTypes];
7
9
  export declare const accessKeyStatus: {
8
10
  readonly active: "active";
@@ -1,17 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AccessKeyService = exports.accessKeyStatus = exports.accessKeyUserTypes = void 0;
3
+ exports.AccessKeyService = exports.accessKeyStatus = exports.allowedAccessUserTypes = exports.accessKeyUserTypes = void 0;
4
4
  const utils_1 = require("../../utils");
5
5
  const lib_1 = require("../../lib");
6
6
  const utils_2 = require("../../utils");
7
7
  const models_1 = require("../../models");
8
8
  const services_1 = require("../../services");
9
9
  exports.accessKeyUserTypes = {
10
- // operator: "operator",
10
+ operator: "operator",
11
11
  administrator: "administrator",
12
12
  // worker: "worker",
13
13
  // customer: "customer",
14
14
  };
15
+ exports.allowedAccessUserTypes = [
16
+ "administrator", "operator"
17
+ ];
15
18
  exports.accessKeyStatus = {
16
19
  active: "active",
17
20
  revoked: "revoked",
@@ -51,14 +54,29 @@ const AccessKeyService = (props) => {
51
54
  const accessKeyModel = (0, models_1.AccessKeyModel)({ ...rest });
52
55
  const userService = (0, services_1.UserService)({ ...rest, userType: "administrator" });
53
56
  const createAccessKey = async ({ data }) => {
54
- if (accessKeyUserType !== "administrator") {
57
+ if (exports.allowedAccessUserTypes.includes(accessKeyUserType) === false) {
55
58
  throw new Error(`User type is not allowed: ${accessKeyUserType}`);
56
59
  }
57
- // check user id is administrator
58
- const user = await userService.getUser({ id: Number(data.userId), datatypes: [] });
60
+ const isOperator = Boolean(rest.isOperator);
61
+ // check user id
62
+ const user = await userService.getUser({
63
+ id: Number(data.userId),
64
+ overrideUserType: isOperator ? "operator" : "administrator",
65
+ datatypes: []
66
+ });
59
67
  // console.log('data.userId', user)
60
- if (!user?.is_owner) {
61
- throw new Error(`User Id is not owner of the account: ${data.userId}`);
68
+ if (isOperator === false) { // administrator
69
+ if (!user?.administrator_id) {
70
+ throw new Error(`User Id is not user administrator: ${data.userId}`);
71
+ }
72
+ if (!user?.is_owner) {
73
+ throw new Error(`User Id is not owner of the account: ${data.userId}`);
74
+ }
75
+ }
76
+ else {
77
+ if (!user?.operator_id) {
78
+ throw new Error(`User Id is not user operator: ${data.userId}`);
79
+ }
62
80
  }
63
81
  // Initialize Access Key
64
82
  const keyId = (0, utils_2.generateAccessKeyId)("ak", accessKeyUserType);
@@ -91,7 +109,21 @@ const AccessKeyService = (props) => {
91
109
  [`${models_1.ModelAccessKeyFields.key_id}`]: keyId
92
110
  }
93
111
  });
94
- if (!findByKeyId) {
112
+ // const { data: findByKeyIds } = await listAccessKeys({
113
+ // limit: 1,
114
+ // offset: 0,
115
+ // filters: [{
116
+ // field: `${ModelAccessKeyFields.key_id}`,
117
+ // operator: "=",
118
+ // value: `${keyId}`
119
+ // }],
120
+ // sortfield: `${ModelAccessKeyFields.access_key_id}`,
121
+ // sortorder: "ASC",
122
+ // datatypes: [],
123
+ // skipFilterAccountId: true
124
+ // })
125
+ // const findByKeyId = findByKeyIds.length > 0 ? findByKeyIds[0] : {}
126
+ if (!findByKeyId?.access_key_id) {
95
127
  throw new Error(`Invalid access key: ${accessKey}`);
96
128
  }
97
129
  // Hash incoming secret
@@ -167,15 +199,18 @@ const AccessKeyService = (props) => {
167
199
  const revokeAccessKeys = async ({ accessKeyIds }) => {
168
200
  if (!accessKeyIds.length)
169
201
  (0, utils_1.throwError)('accessKeyIds is required');
202
+ const isOperator = Boolean(rest.isOperator);
170
203
  // const _data = getUpdatePayload(data)
171
204
  // if (!_data) {
172
205
  // throw new Error(`Invalid update business payload: ${JSON.stringify(_data)}`);
173
206
  // }
207
+ const accessKeyUserType = isOperator === true ? "operator" : "administrator";
174
208
  let response = await accessKeyModel.update({
175
209
  where: {
176
210
  [`${models_1.ModelAccessKeyFields.access_key_id}`]: {
177
211
  in: accessKeyIds
178
- }
212
+ },
213
+ [`${models_1.ModelAccessKeyFields.user_type}`]: accessKeyUserType
179
214
  },
180
215
  data: {
181
216
  [`${models_1.ModelAccessKeyFields.access_key_status}`]: exports.accessKeyStatus.revoked
@@ -1 +1 @@
1
- {"version":3,"file":"AccessKeyService.js","sourceRoot":"","sources":["../../../src/services/auth/AccessKeyService.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'crypto';\nimport { DefaultServiceProps, throwError } from \"@/utils\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport { generateAccessKeyId, generateAccessKeySecret, hashAccessKeySecret } from \"@/utils\"\nimport { ModelUserFields, AccessKeyModel, ModelAccessKeyFields, ModelAccountFields } from \"@/models\";\nimport { UserService } from \"@/services\"\n\nexport const accessKeyUserTypes = {\n // operator: \"operator\",\n administrator: \"administrator\",\n // worker: \"worker\",\n // customer: \"customer\",\n} as const\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};\n\nexport type AccessKeyListProps = QueryList & {\n skipFilterAccountId: boolean\n};\n\nexport type AccessKeyCreateProps = {\n data: {\n userId: number\n }\n}\n\nexport type AccessKeyValidateProps = {\n data: {\n accessKey: string\n }\n}\n\nexport type AccessKeyRevokeProps = {\n accessKeyIds: BigInt[]\n};\n\nconst getCreatePayload = (\n data: AccessKeyCreateProps[\"data\"],\n accessKeyUserType: AccessKeyUserType,\n keyId: string,\n keySecretHash: string\n) => {\n\n return {\n [`${ModelAccessKeyFields.access_key_status}`]: accessKeyStatus.active,\n [`${ModelAccessKeyFields.key_id}`]: keyId,\n [`${ModelAccessKeyFields.key_secret_hash}`]: keySecretHash,\n [`${ModelAccessKeyFields.user_id}`]: Number(data.userId),\n [`${ModelAccessKeyFields.user_type}`]: accessKeyUserType\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}\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 const userService = UserService({ ...rest, userType: \"administrator\" })\n\n const createAccessKey = async ({ data }: AccessKeyCreateProps) => {\n\n if (accessKeyUserType !== \"administrator\") {\n throw new Error(`User type is not allowed: ${accessKeyUserType}`);\n }\n\n // check user id is administrator\n const user = await userService.getUser({ id: Number(data.userId), datatypes: [] })\n\n // console.log('data.userId', user)\n\n if (!user?.is_owner) {\n throw new Error(`User Id is not owner of the account: ${data.userId}`);\n }\n\n // Initialize Access Key\n const keyId = generateAccessKeyId(\"ak\", accessKeyUserType);\n const secret = generateAccessKeySecret();\n const keySecretHash = hashAccessKeySecret(secret);\n\n const _data = getCreatePayload(\n data,\n accessKeyUserType,\n keyId,\n keySecretHash\n )\n\n if (!_data) {\n throw new Error(`Invalid create access key payload: ${JSON.stringify(_data)}`);\n }\n\n const response = await accessKeyModel.create({ data: _data })\n\n const newAcessKeyId = response?.access_key_id ?? 0\n\n let dataAccessKey = await getAccessKey({ id: Number(newAcessKeyId), datatypes: [], skipFilterAccountId: false })\n\n // direct get from model\n const accessKeyEntity = await accessKeyModel.get({ id: Number(newAcessKeyId) })\n\n dataAccessKey = {\n ...dataAccessKey,\n access_key: `${accessKeyEntity?.key_id}.${secret}`\n }\n\n return dataAccessKey\n }\n\n const validateAccessKey = async ({ data }: AccessKeyValidateProps) => {\n\n const accessKey = data.accessKey\n\n // 1Split key into key_id and secret\n const [keyId, secret] = accessKey.split(\".\");\n\n if (!keyId || !secret) {\n throw new Error(`Invalid access key format: ${accessKey}`);\n }\n\n const findByKeyId = await accessKeyModel.get({\n where: {\n [`${ModelAccessKeyFields.key_id}`]: keyId\n }\n })\n\n if (!findByKeyId) {\n throw new Error(`Invalid access key: ${accessKey}`);\n }\n\n // Hash incoming secret\n const incomingHash = hashAccessKeySecret(secret)\n\n // Compare hash\n if (incomingHash !== findByKeyId?.key_secret_hash) {\n throw new Error(`Invalid access key secret: ${secret}`);\n }\n\n // Check status / expiry\n if (findByKeyId?.access_key_status !== accessKeyStatus.active) {\n throw new Error(`Access key has been revoked: ${accessKey}`);\n }\n\n // Return user / account info (or just success)\n return await getAccessKey({ id: Number(findByKeyId?.access_key_id ?? 0), datatypes: [], skipFilterAccountId: true })\n }\n\n const getAccessKey = async ({ id, datatypes = [], skipFilterAccountId = 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 })\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 }: AccessKeyListProps) => {\n\n let data = []\n\n let sqlSelect = [\n `COUNT(ak.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, accountSqlSelect),\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 ...Object.keys(defaultSqlSelect)]\n\n let filterColumns = { ...mainSqlSelect, ...accountSqlSelect, ...defaultSqlSelect }\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 _data = getUpdatePayload(data)\n\n // if (!_data) {\n // throw new Error(`Invalid update business payload: ${JSON.stringify(_data)}`);\n // }\n\n let response = await accessKeyModel.update({\n where: {\n [`${ModelAccessKeyFields.access_key_id}`]: {\n in: accessKeyIds\n }\n },\n data: {\n [`${ModelAccessKeyFields.access_key_status}`]: accessKeyStatus.revoked\n }\n })\n\n return response\n\n };\n\n return {\n createAccessKey,\n validateAccessKey,\n getAccessKey,\n listAccessKeys,\n revokeAccessKeys\n }\n\n}\n\n"]}
1
+ {"version":3,"file":"AccessKeyService.js","sourceRoot":"","sources":["../../../src/services/auth/AccessKeyService.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'crypto';\nimport { DefaultServiceProps, throwError } from \"@/utils\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport { generateAccessKeyId, generateAccessKeySecret, hashAccessKeySecret } from \"@/utils\"\nimport { ModelUserFields, AccessKeyModel, ModelAccessKeyFields, ModelAccountFields } from \"@/models\";\nimport { UserService } from \"@/services\"\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};\n\nexport type AccessKeyListProps = QueryList & {\n skipFilterAccountId: boolean\n};\n\nexport type AccessKeyCreateProps = {\n data: {\n userId: number\n }\n}\n\nexport type AccessKeyValidateProps = {\n data: {\n accessKey: string\n }\n}\n\nexport type AccessKeyRevokeProps = {\n accessKeyIds: BigInt[]\n};\n\nconst getCreatePayload = (\n data: AccessKeyCreateProps[\"data\"],\n accessKeyUserType: AccessKeyUserType,\n keyId: string,\n keySecretHash: string\n) => {\n\n return {\n [`${ModelAccessKeyFields.access_key_status}`]: accessKeyStatus.active,\n [`${ModelAccessKeyFields.key_id}`]: keyId,\n [`${ModelAccessKeyFields.key_secret_hash}`]: keySecretHash,\n [`${ModelAccessKeyFields.user_id}`]: Number(data.userId),\n [`${ModelAccessKeyFields.user_type}`]: accessKeyUserType\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}\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 const userService = UserService({ ...rest, userType: \"administrator\" })\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 isOperator = Boolean(rest.isOperator)\n\n // check user id\n const user = await userService.getUser({\n id: Number(data.userId),\n overrideUserType: isOperator ? \"operator\" : \"administrator\",\n datatypes: []\n })\n\n // console.log('data.userId', user)\n\n if (isOperator === false) { // 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 {\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 keySecretHash = hashAccessKeySecret(secret);\n\n const _data = getCreatePayload(\n data,\n accessKeyUserType,\n keyId,\n keySecretHash\n )\n\n if (!_data) {\n throw new Error(`Invalid create access key payload: ${JSON.stringify(_data)}`);\n }\n\n const response = await accessKeyModel.create({ data: _data })\n\n const newAcessKeyId = response?.access_key_id ?? 0\n\n let dataAccessKey = await getAccessKey({ id: Number(newAcessKeyId), datatypes: [], skipFilterAccountId: false })\n\n // direct get from model\n const accessKeyEntity = await accessKeyModel.get({ id: Number(newAcessKeyId) })\n\n dataAccessKey = {\n ...dataAccessKey,\n access_key: `${accessKeyEntity?.key_id}.${secret}`\n }\n\n return dataAccessKey\n }\n\n const validateAccessKey = async ({ data }: AccessKeyValidateProps) => {\n\n const accessKey = data.accessKey\n\n // 1Split key into key_id and secret\n const [keyId, secret] = accessKey.split(\".\");\n\n if (!keyId || !secret) {\n throw new Error(`Invalid access key format: ${accessKey}`);\n }\n\n const findByKeyId = await accessKeyModel.get({\n where: {\n [`${ModelAccessKeyFields.key_id}`]: keyId\n }\n })\n\n // const { data: findByKeyIds } = await listAccessKeys({\n // limit: 1,\n // offset: 0,\n // filters: [{\n // field: `${ModelAccessKeyFields.key_id}`,\n // operator: \"=\",\n // value: `${keyId}`\n // }],\n // sortfield: `${ModelAccessKeyFields.access_key_id}`,\n // sortorder: \"ASC\",\n // datatypes: [],\n // skipFilterAccountId: true\n // })\n\n // const findByKeyId = findByKeyIds.length > 0 ? findByKeyIds[0] : {}\n\n if (!findByKeyId?.access_key_id) {\n throw new Error(`Invalid access key: ${accessKey}`);\n }\n\n // Hash incoming secret\n const incomingHash = hashAccessKeySecret(secret)\n\n // Compare hash\n if (incomingHash !== findByKeyId?.key_secret_hash) {\n throw new Error(`Invalid access key secret: ${secret}`);\n }\n\n // Check status / expiry\n if (findByKeyId?.access_key_status !== accessKeyStatus.active) {\n throw new Error(`Access key has been revoked: ${accessKey}`);\n }\n\n // Return user / account info (or just success)\n return await getAccessKey({ id: Number(findByKeyId?.access_key_id ?? 0), datatypes: [], skipFilterAccountId: true })\n }\n\n const getAccessKey = async ({ id, datatypes = [], skipFilterAccountId = 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 })\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 }: AccessKeyListProps) => {\n\n let data = []\n\n let sqlSelect = [\n `COUNT(ak.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, accountSqlSelect),\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 ...Object.keys(defaultSqlSelect)]\n\n let filterColumns = { ...mainSqlSelect, ...accountSqlSelect, ...defaultSqlSelect }\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 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 },\n data: {\n [`${ModelAccessKeyFields.access_key_status}`]: accessKeyStatus.revoked\n }\n })\n\n return response\n\n };\n\n return {\n createAccessKey,\n validateAccessKey,\n getAccessKey,\n listAccessKeys,\n revokeAccessKeys\n }\n\n}\n\n"]}
@@ -5,6 +5,7 @@ export declare const authTypes: {
5
5
  readonly administrator: "administrator";
6
6
  readonly worker: "worker";
7
7
  readonly customer: "customer";
8
+ readonly member: "member";
8
9
  };
9
10
  export type AuthType = typeof authTypes[keyof typeof authTypes];
10
11
  export type AuthJwtToken = JwtPayload & {
@@ -12,6 +12,7 @@ exports.authTypes = {
12
12
  administrator: "administrator",
13
13
  worker: "worker",
14
14
  customer: "customer",
15
+ member: "member",
15
16
  };
16
17
  const AuthService = (props) => {
17
18
  const { secretKey, authType = "administrator",
@@ -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\";\nimport { config } from \"@/configs/config\";\n\nimport { generateAuthToken, verifyPassword, verifyAuthToken, hashPassword } from \"@/utils\"\nimport { ModelAccountFields } from \"@/models\";\n\nexport const authTypes = {\n operator: \"operator\",\n administrator: \"administrator\",\n worker: \"worker\",\n customer: \"customer\",\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 type AuthChangePasswordProps = {\n authToken: string,\n currentPassword: string\n newPassword: string\n confirmPassword: string\n};\n\nexport const AuthService = (props: AuthServiceProps) => {\n\n const {\n secretKey,\n authType = \"administrator\",\n // prisma,\n // authType = \"administrator\",\n // accountId = 0,\n // actionUserId = 0,\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 getAuthToken = async ({ authType, data, accountId = 0, accountCode = \"\" }: AuthGetTokenProps) => {\n\n let _rest = rest\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 data: any = {}\n\n let payload: UserListProps = {\n includePassword: true,\n limit: 1,\n offset: 0,\n sortfield: \"user_id\",\n sortorder: \"ASC\",\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: foundUser } = await userService.listUsers(payload)\n\n if (foundUser.length <= 0) {\n throw Error(`Invalid username: ${data[\"username\"]}`)\n }\n\n let user = 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 === 1),\n owner_id: 0\n }\n };\n\n const changePassword = async ({ authToken, currentPassword, confirmPassword, newPassword }: AuthChangePasswordProps) => {\n\n const authSecretKey = config.AUTH_SECRET_KEY\n\n // validate the token\n const jwtData = verifyAuthToken(authToken, authSecretKey);\n\n const accountId = jwtData?.account?.account_id ?? \"\";\n const userId = jwtData?.user?.user_id ?? \"\";\n const userType = jwtData?.user?.user_type ?? \"\";\n\n if (!accountId && userType !== \"operator\") { // operator token do not have account id\n throwError(`Invalid or missing account id in auth token`)\n }\n\n if (!userId) {\n throwError(`Missing user id in auth token`)\n }\n\n if (!userType) {\n throwError(`Missing user type in auth token`)\n }\n\n const userService = UserService({ userType, ...rest })\n const accountService = AccountService({ ...rest, isOperator: true })\n\n const user = await userService.getUser({ id: Number(userId), datatypes: [], includePassword: true })\n const account = await accountService.getAccount({ id: Number(accountId), datatypes: [] })\n\n // console.log('jwtData', jwtData)\n // console.log('user', user)\n // console.log('account', account)\n\n // const a = await hashPassword(user?.password)\n\n // check the accountId / userId is valid\n if (!user?.user_id) {\n throwError(`Invalid user id in auth token`)\n }\n\n if (!account?.account_id && userType !== \"operator\") { // operator token do not have account id\n throwError(`Invalid account id in auth token`)\n }\n\n // new password cannot same with current password\n if (newPassword === currentPassword) {\n throwError(`New and current password cannot be same`)\n }\n\n // new password must same with confirm\n if (newPassword !== confirmPassword) {\n throwError(`New and confirm password not matched`)\n }\n\n // check the current password\n try {\n const decryptedPass = await verifyPassword(currentPassword, user?.password)\n // console.log('decryptedPass', decryptedPass)\n\n if (!decryptedPass) {\n throw Error(`Invalid current password`)\n }\n\n } catch (error: any) {\n throwError(`Auth Token: ${error?.message}`)\n }\n\n // perform update credential\n const responseUser = await userService.replacePassword({\n id: Number(userId),\n data: {\n loginPassword: await hashPassword(newPassword)\n },\n isOperator: Boolean(userType === \"operator\")\n })\n\n return responseUser\n\n }\n\n return {\n getAuthToken,\n verifyAuthToken,\n changePassword\n }\n\n}\n\n"]}
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\";\nimport { config } from \"@/configs/config\";\n\nimport { generateAuthToken, verifyPassword, verifyAuthToken, hashPassword } from \"@/utils\"\nimport { ModelAccountFields } 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 type AuthChangePasswordProps = {\n authToken: string,\n currentPassword: string\n newPassword: string\n confirmPassword: string\n};\n\nexport const AuthService = (props: AuthServiceProps) => {\n\n const {\n secretKey,\n authType = \"administrator\",\n // prisma,\n // authType = \"administrator\",\n // accountId = 0,\n // actionUserId = 0,\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 getAuthToken = async ({ authType, data, accountId = 0, accountCode = \"\" }: AuthGetTokenProps) => {\n\n let _rest = rest\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 data: any = {}\n\n let payload: UserListProps = {\n includePassword: true,\n limit: 1,\n offset: 0,\n sortfield: \"user_id\",\n sortorder: \"ASC\",\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: foundUser } = await userService.listUsers(payload)\n\n if (foundUser.length <= 0) {\n throw Error(`Invalid username: ${data[\"username\"]}`)\n }\n\n let user = 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 === 1),\n owner_id: 0\n }\n };\n\n const changePassword = async ({ authToken, currentPassword, confirmPassword, newPassword }: AuthChangePasswordProps) => {\n\n const authSecretKey = config.AUTH_SECRET_KEY\n\n // validate the token\n const jwtData = verifyAuthToken(authToken, authSecretKey);\n\n const accountId = jwtData?.account?.account_id ?? \"\";\n const userId = jwtData?.user?.user_id ?? \"\";\n const userType = jwtData?.user?.user_type ?? \"\";\n\n if (!accountId && userType !== \"operator\") { // operator token do not have account id\n throwError(`Invalid or missing account id in auth token`)\n }\n\n if (!userId) {\n throwError(`Missing user id in auth token`)\n }\n\n if (!userType) {\n throwError(`Missing user type in auth token`)\n }\n\n const userService = UserService({ userType, ...rest })\n const accountService = AccountService({ ...rest, isOperator: true })\n\n const user = await userService.getUser({ id: Number(userId), datatypes: [], includePassword: true })\n const account = await accountService.getAccount({ id: Number(accountId), datatypes: [] })\n\n // console.log('jwtData', jwtData)\n // console.log('user', user)\n // console.log('account', account)\n\n // const a = await hashPassword(user?.password)\n\n // check the accountId / userId is valid\n if (!user?.user_id) {\n throwError(`Invalid user id in auth token`)\n }\n\n if (!account?.account_id && userType !== \"operator\") { // operator token do not have account id\n throwError(`Invalid account id in auth token`)\n }\n\n // new password cannot same with current password\n if (newPassword === currentPassword) {\n throwError(`New and current password cannot be same`)\n }\n\n // new password must same with confirm\n if (newPassword !== confirmPassword) {\n throwError(`New and confirm password not matched`)\n }\n\n // check the current password\n try {\n const decryptedPass = await verifyPassword(currentPassword, user?.password)\n // console.log('decryptedPass', decryptedPass)\n\n if (!decryptedPass) {\n throw Error(`Invalid current password`)\n }\n\n } catch (error: any) {\n throwError(`Auth Token: ${error?.message}`)\n }\n\n // perform update credential\n const responseUser = await userService.replacePassword({\n id: Number(userId),\n data: {\n loginPassword: await hashPassword(newPassword)\n },\n isOperator: Boolean(userType === \"operator\")\n })\n\n return responseUser\n\n }\n\n return {\n getAuthToken,\n verifyAuthToken,\n changePassword\n }\n\n}\n\n"]}
@@ -43,10 +43,10 @@ declare const modulePrefixMap: {
43
43
  administrator: string;
44
44
  worker: string;
45
45
  customer: string;
46
+ member: string;
46
47
  supplier: string;
47
48
  driver: string;
48
49
  retailer: string;
49
- member: string;
50
50
  };
51
51
  declare const refPrefixMap: {
52
52
  logistic: string;
@@ -24,6 +24,7 @@ export type UserServiceProps = DefaultServiceProps & {
24
24
  };
25
25
  export type UserGetProps = QueryGet & {
26
26
  id: number;
27
+ overrideUserType?: UserType | "";
27
28
  includePassword?: boolean;
28
29
  };
29
30
  export type UserListProps = QueryList & {
@@ -119,7 +120,7 @@ export type UserReplacePasswordProps = {
119
120
  export declare const UserService: (props: UserServiceProps) => {
120
121
  createUser: ({ data, userType: overrideUserType }: UserCreateProps) => Promise<any>;
121
122
  updateUser: ({ id, data, userType: overrideUserType }: UserUpdateProps) => Promise<any>;
122
- getUser: ({ id, datatypes, includePassword }: UserGetProps) => Promise<any>;
123
+ getUser: ({ id, datatypes, includePassword, overrideUserType }: UserGetProps) => Promise<any>;
123
124
  listUsers: ({ limit, offset, filters, sortfield, sortorder, datatypes, includePassword }: UserListProps) => Promise<{
124
125
  data: any[];
125
126
  total: number;
@@ -353,27 +353,28 @@ const UserService = (props) => {
353
353
  }
354
354
  return response;
355
355
  };
356
- const getUser = async ({ id, datatypes = [], includePassword = false }) => {
356
+ const getUser = async ({ id, datatypes = [], includePassword = false, overrideUserType = "" }) => {
357
357
  let data = {};
358
- if (userType === "customer") {
358
+ const _userType = overrideUserType ? overrideUserType : userType;
359
+ if (_userType === "customer") {
359
360
  data = await customerService.getCustomer({ id, datatypes: datatypes, includePassword });
360
361
  }
361
- if (userType === "operator") {
362
+ if (_userType === "operator") {
362
363
  data = await operatorService.getOperator({ id, datatypes: datatypes, includePassword });
363
364
  }
364
- if (userType === "administrator") {
365
+ if (_userType === "administrator") {
365
366
  data = await administratorService.getAdministrator({ id, datatypes: datatypes, includePassword });
366
367
  }
367
- if (userType === "worker") {
368
+ if (_userType === "worker") {
368
369
  data = await workerService.getWorker({ id, datatypes: datatypes, includePassword });
369
370
  }
370
- if (userType === "driver") {
371
+ if (_userType === "driver") {
371
372
  data = await driverService.getDriver({ id, datatypes: datatypes, includePassword });
372
373
  }
373
- if (userType === "member") {
374
+ if (_userType === "member") {
374
375
  data = await memberService.getMember({ id, datatypes: datatypes, includePassword });
375
376
  }
376
- if (userType === "retailer") {
377
+ if (_userType === "retailer") {
377
378
  data = await retailerService.getRetailer({ id, datatypes: datatypes, includePassword });
378
379
  }
379
380
  if (!data) {
@@ -1 +1 @@
1
- {"version":3,"file":"UserService.js","sourceRoot":"","sources":["../../../src/services/user/UserService.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n UserModel,\n ModelUserFields\n} from \"@/models\";\n\nimport { UserPropService, UserPropReplaceProps } from \"./UserPropService\";\nimport { CustomerGetProps, CustomerCreateProps, CustomerListProps, CustomerUpdateProps, CustomerService } from \"./CustomerService\";\nimport { AdministratorGetProps, AdministratorCreateProps, AdministratorUpdateProps, AdministratorListProps, AdministratorService } from \"./AdministratorService\";\nimport { WorkerCreateProps, WorkerGetProps, WorkerUpdateProps, WorkerListProps, WorkerService } from \"./WorkerService\";\nimport { DriverCreateProps, DriverGetProps, DriverUpdateProps, DriverListProps, DriverService } from \"./DriverService\";\nimport { RetailerCreateProps, RetailerGetProps, RetailerUpdateProps, RetailerListProps, RetailerService } from \"./RetailerService\";\nimport { MemberCreateProps, MemberGetProps, MemberUpdateProps, MemberListProps, MemberService } from \"./MemberService\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps, throwError } from \"@/utils\";\n\nimport { hashPassword } from \"@/utils\";\nimport { OperatorCreateProps, OperatorGetProps, OperatorListProps, OperatorService, OperatorUpdateProps } from \"./OperatorService\";\n\nexport const userTypes = {\n operator: \"operator\",\n administrator: \"administrator\",\n worker: \"worker\",\n supplier: \"supplier\",\n customer: \"customer\",\n driver: \"driver\",\n retailer: \"retailer\",\n member: \"member\",\n} as const\n\nexport type UserType = typeof userTypes[keyof typeof userTypes]\n\nexport type UserServiceProps = DefaultServiceProps & {\n userType: UserType\n};\n\nexport type UserGetProps = QueryGet & {\n id: number,\n includePassword?: boolean\n};\n\nexport type UserListProps = QueryList & {\n // id: number,\n includePassword?: boolean\n};\n\nexport type UserRemoveProps = {\n ids: BigInt[]\n};\n\nexport type UserCreateProps = {\n userType?: UserType,\n data: {\n user: {\n loginUsername: string\n loginPassword: string\n address: string\n contact: string\n email: string\n firstname: string\n lastname: string\n status: boolean\n }\n } & (\n // operator\n {\n operator: Omit<OperatorCreateProps[\"data\"][\"operator\"], \"userId\">,\n } |\n // customer\n {\n customer: Omit<CustomerCreateProps[\"data\"][\"customer\"], \"userId\">,\n } |\n // administrator\n {\n administrator: Omit<AdministratorCreateProps[\"data\"][\"administrator\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // worker\n {\n worker: Omit<WorkerCreateProps[\"data\"][\"worker\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // driver\n {\n driver: Omit<DriverCreateProps[\"data\"][\"driver\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // member\n {\n member: Omit<MemberCreateProps[\"data\"][\"member\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n } |\n // retailer\n {\n retailer: Omit<RetailerCreateProps[\"data\"][\"retailer\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n }\n )\n}\n\nexport type UserUpdateProps = {\n id: number,\n userType?: UserType,\n data: {\n user: {\n loginUsername: string\n loginPassword?: string\n address: string\n contact: string\n email: string\n firstname: string\n lastname: string\n status: boolean\n }\n } & (\n // operator\n {\n operator: Omit<OperatorUpdateProps[\"data\"][\"operator\"], \"userId\">\n } |\n // customer\n {\n customer: Omit<CustomerUpdateProps[\"data\"][\"customer\"], \"userId\">\n } |\n // administrator\n {\n administrator: Omit<AdministratorUpdateProps[\"data\"][\"administrator\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // worker\n {\n worker: Omit<WorkerUpdateProps[\"data\"][\"worker\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // driver\n {\n driver: Omit<DriverUpdateProps[\"data\"][\"driver\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // member\n {\n member: Omit<MemberUpdateProps[\"data\"][\"member\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n } |\n // retailer\n {\n retailer: Omit<RetailerUpdateProps[\"data\"][\"retailer\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n }\n )\n}\n\nexport type UserReplacePasswordProps = {\n id: number,\n data: {\n loginPassword: string\n },\n isOperator: boolean\n}\n\nconst getCreatePayload = async (userType: UserType, data: UserCreateProps[\"data\"]) => {\n\n if (\"user\" in data) {\n\n // have to hash the password\n\n return {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n [`${ModelUserFields.login_password}`]: await hashPassword(data.user.loginPassword),\n [`${ModelUserFields.address}`]: data.user.address,\n [`${ModelUserFields.contact}`]: data.user.contact,\n [`${ModelUserFields.email}`]: data.user.email,\n [`${ModelUserFields.firstname}`]: data.user.firstname,\n [`${ModelUserFields.lastname}`]: data.user.lastname,\n [`${ModelUserFields.status}`]: data.user.status ? 1 : 0,\n [`${ModelUserFields.user_type}`]: `${userType}`\n }\n }\n\n return false\n\n}\n\nconst getUpdatePayload = (userType: UserType, data: UserUpdateProps[\"data\"]) => {\n\n if (\"user\" in data) {\n\n return {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n ...(data?.user?.loginPassword ? { [`${ModelUserFields.login_password}`]: data.user.loginPassword } : {}),\n [`${ModelUserFields.address}`]: data.user.address,\n [`${ModelUserFields.contact}`]: data.user.contact,\n [`${ModelUserFields.email}`]: data.user.email,\n [`${ModelUserFields.firstname}`]: data.user.firstname,\n [`${ModelUserFields.lastname}`]: data.user.lastname,\n [`${ModelUserFields.status}`]: data.user.status ? 1 : 0,\n [`${ModelUserFields.user_type}`]: `${userType}`\n }\n }\n\n return false\n\n}\n\nexport const UserService = (props: UserServiceProps) => {\n\n const {\n // prisma,\n userType = \"administrator\",\n ...rest\n // accountId = 0,\n // actionUserId = 0,\n } = props\n\n const userModel = UserModel({ ...rest })\n\n const userPropService = UserPropService({ ...rest, userPropType: \"LOCATION_ID\" })\n const customerService = CustomerService({ ...rest })\n const administratorService = AdministratorService({ ...rest })\n const operatorService = OperatorService({ ...rest })\n const workerService = WorkerService({ ...rest })\n const driverService = DriverService({ ...rest })\n const retailerService = RetailerService({ ...rest })\n const memberService = MemberService({ ...rest })\n\n const createUser = async ({ data, userType: overrideUserType }: UserCreateProps) => {\n\n const _userType = overrideUserType || userType\n\n // check the username duplicated?\n const checkUsername = await userModel.list({\n limit: 1,\n offset: 0,\n orderBy: {\n [`${ModelUserFields.user_id}`]: \"asc\"\n },\n include: [],\n where: {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n [`${ModelUserFields.isdelete}`]: false,\n [`${ModelUserFields.istrash}`]: false\n },\n })\n\n // console.log('ch', checkUsername)\n\n if (checkUsername.length > 0) throwError(`Duplicated username: ${data.user.loginUsername}(${checkUsername[0]?.user_type})`)\n\n const _data = await getCreatePayload(_userType, data)\n\n if (!_data) {\n throw new Error(`Invalid create payload: ${JSON.stringify(_data)}`);\n }\n\n // create user\n let responseUser = await userModel.create({ data: _data })\n\n let newUserId = responseUser.user_id\n\n let response: any = {}\n\n if (_userType === \"customer\" && \"customer\" in data) {\n\n let dataCustomer: CustomerCreateProps[\"data\"] = {\n customer: {\n ...data.customer,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create customer\n await customerService.createCustomer({ data: dataCustomer })\n\n response = await customerService.getCustomer({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"administrator\" && \"administrator\" in data) {\n\n let dataAdministrator: AdministratorCreateProps[\"data\"] = {\n administrator: {\n ...data.administrator,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create administrator\n await administratorService.createAdministrator({ data: dataAdministrator })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(newUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await administratorService.getAdministrator({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"operator\" && \"operator\" in data) {\n\n let dataOperator: OperatorCreateProps[\"data\"] = {\n operator: {\n ...data.operator,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create operator\n await operatorService.createOperator({ data: dataOperator })\n\n response = await operatorService.getOperator({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"worker\" && \"worker\" in data) {\n\n let dataWorker: WorkerCreateProps[\"data\"] = {\n worker: {\n ...data.worker,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create worker\n await workerService.createWorker({ data: dataWorker })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(newUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await workerService.getWorker({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"driver\" && \"driver\" in data) {\n\n let dataDriver: DriverCreateProps[\"data\"] = {\n driver: {\n ...data.driver,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create driver\n await driverService.createDriver({ data: dataDriver })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(newUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await driverService.getDriver({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"member\" && \"member\" in data) {\n\n let dataMember: MemberCreateProps[\"data\"] = {\n member: {\n ...data.member,\n // userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create member\n await memberService.createMember({ userId: Number(newUserId), data: dataMember })\n\n // replace user prop\n // await userPropService.replaceUserProp({\n // userPropType: \"LOCATION_ID\",\n // data: {\n // userProp: {\n // userId: Number(newUserId),\n // locationIds: data.props.locationIds\n // }\n // }\n // })\n\n response = await memberService.getMember({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"retailer\" && \"retailer\" in data) {\n\n let dataRetailer: RetailerCreateProps[\"data\"] = {\n retailer: {\n ...data.retailer,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create retailer\n await retailerService.createRetailer({ data: dataRetailer })\n\n response = await retailerService.getRetailer({ id: Number(newUserId), datatypes: [] })\n }\n\n return response\n }\n\n const updateUser = async ({ id, data, userType: overrideUserType }: UserUpdateProps) => {\n\n const _userType = overrideUserType || userType\n\n // check the username duplicated?\n const checkUsername = await userModel.list({\n limit: 1,\n offset: 0,\n orderBy: {\n [`${ModelUserFields.user_id}`]: \"asc\"\n },\n include: [],\n where: {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n [`${ModelUserFields.isdelete}`]: false,\n [`${ModelUserFields.istrash}`]: false,\n [`${ModelUserFields.accountid}`]: rest.accountId,\n },\n })\n\n // console.log('ch', checkUsername)\n\n if (checkUsername.length > 0) {\n if (Number(checkUsername[0]?.user_id) !== Number(id)) { // if not self user id\n throwError(`Duplicated username: ${data.user.loginUsername}(${checkUsername[0]?.user_type})`)\n }\n }\n\n const _data = getUpdatePayload(_userType, data)\n\n if (!_data) {\n throw new Error(`Invalid update payload: ${JSON.stringify(_data)}`);\n }\n\n // update user\n let responseUser = await userModel.update({ id, data: _data })\n\n let updateUserId = responseUser.user_id\n\n let response: any = {}\n\n if (_userType === \"customer\" && \"customer\" in data) {\n\n let dataCustomer: CustomerUpdateProps[\"data\"] = {\n customer: {\n ...data.customer\n }\n }\n\n await customerService.updateCustomer({ userId: Number(updateUserId), data: dataCustomer })\n\n response = await customerService.getCustomer({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"operator\" && \"operator\" in data) {\n\n let dataOperator: OperatorUpdateProps[\"data\"] = {\n operator: {\n ...data.operator\n }\n }\n\n await operatorService.updateOperator({ userId: Number(updateUserId), data: dataOperator })\n\n response = await operatorService.getOperator({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"administrator\" && \"administrator\" in data) {\n\n let dataCustomer: AdministratorUpdateProps[\"data\"] = {\n administrator: {\n ...data.administrator\n }\n }\n\n await administratorService.updateAdministrator({ userId: Number(updateUserId), data: dataCustomer })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(updateUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await administratorService.getAdministrator({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"worker\" && \"worker\" in data) {\n\n let dataWorker: WorkerUpdateProps[\"data\"] = {\n worker: {\n ...data.worker\n }\n }\n\n await workerService.updateWorker({ userId: Number(updateUserId), data: dataWorker })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(updateUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await workerService.getWorker({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"driver\" && \"driver\" in data) {\n\n let dataDriver: DriverUpdateProps[\"data\"] = {\n driver: {\n ...data.driver\n }\n }\n\n await driverService.updateDriver({ userId: Number(updateUserId), data: dataDriver })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(updateUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await driverService.getDriver({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"member\" && \"member\" in data) {\n\n let dataMember: MemberUpdateProps[\"data\"] = {\n member: {\n ...data.member\n }\n }\n\n await memberService.updateMember({ userId: Number(updateUserId), data: dataMember })\n\n // replace user prop\n // await userPropService.replaceUserProp({\n // userPropType: \"LOCATION_ID\",\n // data: {\n // userProp: {\n // userId: Number(updateUserId),\n // locationIds: data.props.locationIds\n // }\n // }\n // })\n\n response = await memberService.getMember({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"retailer\" && \"retailer\" in data) {\n\n let dataRetailer: RetailerUpdateProps[\"data\"] = {\n retailer: {\n ...data.retailer\n }\n }\n\n await retailerService.updateRetailer({ userId: Number(updateUserId), data: dataRetailer })\n\n response = await retailerService.getRetailer({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n return response\n }\n\n const getUser = async ({ id, datatypes = [], includePassword = false }: UserGetProps) => {\n\n let data: any = {}\n\n if (userType === \"customer\") {\n data = await customerService.getCustomer({ id, datatypes: datatypes as CustomerGetProps[\"datatypes\"], includePassword })\n }\n\n if (userType === \"operator\") {\n data = await operatorService.getOperator({ id, datatypes: datatypes as OperatorGetProps[\"datatypes\"], includePassword })\n }\n\n if (userType === \"administrator\") {\n data = await administratorService.getAdministrator({ id, datatypes: datatypes as AdministratorGetProps[\"datatypes\"], includePassword })\n }\n\n if (userType === \"worker\") {\n data = await workerService.getWorker({ id, datatypes: datatypes as WorkerGetProps[\"datatypes\"], includePassword })\n }\n\n if (userType === \"driver\") {\n data = await driverService.getDriver({ id, datatypes: datatypes as DriverGetProps[\"datatypes\"], includePassword })\n }\n\n if (userType === \"member\") {\n data = await memberService.getMember({ id, datatypes: datatypes as MemberGetProps[\"datatypes\"], includePassword })\n }\n\n if (userType === \"retailer\") {\n data = await retailerService.getRetailer({ id, datatypes: datatypes as RetailerGetProps[\"datatypes\"], includePassword })\n }\n\n if (!data) {\n throw new Error(`Invalid id: ${id}`);\n }\n\n return data\n };\n\n const listUsers = async ({ limit, offset, filters, sortfield, sortorder, datatypes, includePassword = false }: UserListProps) => {\n\n let data: any[] = [];\n let total = 0;\n\n if (userType === \"customer\") {\n ({ data, total } = await customerService.listCustomers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as CustomerListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"operator\") {\n ({ data, total } = await operatorService.listOperators(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as OperatorListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"administrator\") {\n ({ data, total } = await administratorService.listAdministrators(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as AdministratorListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"worker\") {\n ({ data, total } = await workerService.listWorkers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as WorkerListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"driver\") {\n ({ data, total } = await driverService.listDrivers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as DriverListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"member\") {\n ({ data, total } = await memberService.listMembers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as MemberListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"retailer\") {\n ({ data, total } = await retailerService.listRetailers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as RetailerListProps[\"datatypes\"] }\n ))\n }\n\n return {\n data,\n total\n }\n };\n\n const removeUsers = async ({ ids }: UserRemoveProps) => {\n\n if (!ids.length) throwError('id is required');\n\n let response: any[] = []\n\n if (userType === \"customer\") {\n response = await customerService.removeCustomers({ userIds: ids })\n }\n\n if (userType === \"operator\") {\n response = await operatorService.removeOperators({ userIds: ids })\n }\n\n if (userType === \"administrator\") {\n response = await administratorService.removeAdministrators({ userIds: ids })\n await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"worker\") {\n response = await workerService.removeWorkers({ userIds: ids })\n await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"driver\") {\n response = await driverService.removeDrivers({ userIds: ids })\n await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"member\") {\n response = await memberService.removeMembers({ userIds: ids })\n // await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"retailer\") {\n response = await retailerService.removeRetailers({ userIds: ids })\n // await userPropService.removeUserProps({ userIds: ids })\n }\n\n // remove user\n let responseUser = await userModel.remove({ ids: ids.map(i => Number(i)) })\n\n response.forEach((i, index) => {\n i.user = responseUser[index]\n })\n\n return response\n };\n\n const replacePassword = async ({ id, data, isOperator = false }: UserReplacePasswordProps) => {\n\n const passwordUserModel = UserModel({\n ...rest,\n ...(isOperator === true ? { isOperator } : {})\n })\n\n // update user password\n let responseUser = await passwordUserModel.update({\n id,\n data: {\n login_password: data?.loginPassword\n }\n })\n\n let updateUserId = responseUser.user_id\n\n let response = await getUser({ id: Number(updateUserId), includePassword: false, datatypes: [] })\n\n return response\n }\n\n const getUserDataTypes = () => {\n\n let data: any[] = [];\n let total = 0;\n\n if (userType === \"customer\") {\n data = customerService.getDataTypes()\n }\n\n if (userType === \"operator\") {\n data = operatorService.getDataTypes()\n }\n\n if (userType === \"administrator\") {\n data = administratorService.getDataTypes()\n }\n\n if (userType === \"worker\") {\n data = workerService.getDataTypes()\n }\n\n if (userType === \"driver\") {\n data = driverService.getDataTypes()\n }\n\n if (userType === \"member\") {\n data = memberService.getDataTypes()\n }\n\n if (userType === \"retailer\") {\n data = retailerService.getDataTypes()\n }\n\n return data\n };\n\n return {\n createUser,\n updateUser,\n getUser,\n listUsers,\n removeUsers,\n replacePassword,\n getUserDataTypes\n }\n\n}\n\n"]}
1
+ {"version":3,"file":"UserService.js","sourceRoot":"","sources":["../../../src/services/user/UserService.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n UserModel,\n ModelUserFields\n} from \"@/models\";\n\nimport { UserPropService, UserPropReplaceProps } from \"./UserPropService\";\nimport { CustomerGetProps, CustomerCreateProps, CustomerListProps, CustomerUpdateProps, CustomerService } from \"./CustomerService\";\nimport { AdministratorGetProps, AdministratorCreateProps, AdministratorUpdateProps, AdministratorListProps, AdministratorService } from \"./AdministratorService\";\nimport { WorkerCreateProps, WorkerGetProps, WorkerUpdateProps, WorkerListProps, WorkerService } from \"./WorkerService\";\nimport { DriverCreateProps, DriverGetProps, DriverUpdateProps, DriverListProps, DriverService } from \"./DriverService\";\nimport { RetailerCreateProps, RetailerGetProps, RetailerUpdateProps, RetailerListProps, RetailerService } from \"./RetailerService\";\nimport { MemberCreateProps, MemberGetProps, MemberUpdateProps, MemberListProps, MemberService } from \"./MemberService\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps, throwError } from \"@/utils\";\n\nimport { hashPassword } from \"@/utils\";\nimport { OperatorCreateProps, OperatorGetProps, OperatorListProps, OperatorService, OperatorUpdateProps } from \"./OperatorService\";\n\nexport const userTypes = {\n operator: \"operator\",\n administrator: \"administrator\",\n worker: \"worker\",\n supplier: \"supplier\",\n customer: \"customer\",\n driver: \"driver\",\n retailer: \"retailer\",\n member: \"member\",\n} as const\n\nexport type UserType = typeof userTypes[keyof typeof userTypes]\n\nexport type UserServiceProps = DefaultServiceProps & {\n userType: UserType\n};\n\nexport type UserGetProps = QueryGet & {\n id: number,\n overrideUserType?: UserType | \"\"\n includePassword?: boolean\n};\n\nexport type UserListProps = QueryList & {\n // id: number,\n includePassword?: boolean\n};\n\nexport type UserRemoveProps = {\n ids: BigInt[]\n};\n\nexport type UserCreateProps = {\n userType?: UserType,\n data: {\n user: {\n loginUsername: string\n loginPassword: string\n address: string\n contact: string\n email: string\n firstname: string\n lastname: string\n status: boolean\n }\n } & (\n // operator\n {\n operator: Omit<OperatorCreateProps[\"data\"][\"operator\"], \"userId\">,\n } |\n // customer\n {\n customer: Omit<CustomerCreateProps[\"data\"][\"customer\"], \"userId\">,\n } |\n // administrator\n {\n administrator: Omit<AdministratorCreateProps[\"data\"][\"administrator\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // worker\n {\n worker: Omit<WorkerCreateProps[\"data\"][\"worker\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // driver\n {\n driver: Omit<DriverCreateProps[\"data\"][\"driver\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // member\n {\n member: Omit<MemberCreateProps[\"data\"][\"member\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n } |\n // retailer\n {\n retailer: Omit<RetailerCreateProps[\"data\"][\"retailer\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n }\n )\n}\n\nexport type UserUpdateProps = {\n id: number,\n userType?: UserType,\n data: {\n user: {\n loginUsername: string\n loginPassword?: string\n address: string\n contact: string\n email: string\n firstname: string\n lastname: string\n status: boolean\n }\n } & (\n // operator\n {\n operator: Omit<OperatorUpdateProps[\"data\"][\"operator\"], \"userId\">\n } |\n // customer\n {\n customer: Omit<CustomerUpdateProps[\"data\"][\"customer\"], \"userId\">\n } |\n // administrator\n {\n administrator: Omit<AdministratorUpdateProps[\"data\"][\"administrator\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // worker\n {\n worker: Omit<WorkerUpdateProps[\"data\"][\"worker\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // driver\n {\n driver: Omit<DriverUpdateProps[\"data\"][\"driver\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // member\n {\n member: Omit<MemberUpdateProps[\"data\"][\"member\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n } |\n // retailer\n {\n retailer: Omit<RetailerUpdateProps[\"data\"][\"retailer\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n }\n )\n}\n\nexport type UserReplacePasswordProps = {\n id: number,\n data: {\n loginPassword: string\n },\n isOperator: boolean\n}\n\nconst getCreatePayload = async (userType: UserType, data: UserCreateProps[\"data\"]) => {\n\n if (\"user\" in data) {\n\n // have to hash the password\n\n return {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n [`${ModelUserFields.login_password}`]: await hashPassword(data.user.loginPassword),\n [`${ModelUserFields.address}`]: data.user.address,\n [`${ModelUserFields.contact}`]: data.user.contact,\n [`${ModelUserFields.email}`]: data.user.email,\n [`${ModelUserFields.firstname}`]: data.user.firstname,\n [`${ModelUserFields.lastname}`]: data.user.lastname,\n [`${ModelUserFields.status}`]: data.user.status ? 1 : 0,\n [`${ModelUserFields.user_type}`]: `${userType}`\n }\n }\n\n return false\n\n}\n\nconst getUpdatePayload = (userType: UserType, data: UserUpdateProps[\"data\"]) => {\n\n if (\"user\" in data) {\n\n return {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n ...(data?.user?.loginPassword ? { [`${ModelUserFields.login_password}`]: data.user.loginPassword } : {}),\n [`${ModelUserFields.address}`]: data.user.address,\n [`${ModelUserFields.contact}`]: data.user.contact,\n [`${ModelUserFields.email}`]: data.user.email,\n [`${ModelUserFields.firstname}`]: data.user.firstname,\n [`${ModelUserFields.lastname}`]: data.user.lastname,\n [`${ModelUserFields.status}`]: data.user.status ? 1 : 0,\n [`${ModelUserFields.user_type}`]: `${userType}`\n }\n }\n\n return false\n\n}\n\nexport const UserService = (props: UserServiceProps) => {\n\n const {\n // prisma,\n userType = \"administrator\",\n ...rest\n // accountId = 0,\n // actionUserId = 0,\n } = props\n\n const userModel = UserModel({ ...rest })\n\n const userPropService = UserPropService({ ...rest, userPropType: \"LOCATION_ID\" })\n const customerService = CustomerService({ ...rest })\n const administratorService = AdministratorService({ ...rest })\n const operatorService = OperatorService({ ...rest })\n const workerService = WorkerService({ ...rest })\n const driverService = DriverService({ ...rest })\n const retailerService = RetailerService({ ...rest })\n const memberService = MemberService({ ...rest })\n\n const createUser = async ({ data, userType: overrideUserType }: UserCreateProps) => {\n\n const _userType = overrideUserType || userType\n\n // check the username duplicated?\n const checkUsername = await userModel.list({\n limit: 1,\n offset: 0,\n orderBy: {\n [`${ModelUserFields.user_id}`]: \"asc\"\n },\n include: [],\n where: {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n [`${ModelUserFields.isdelete}`]: false,\n [`${ModelUserFields.istrash}`]: false\n },\n })\n\n // console.log('ch', checkUsername)\n\n if (checkUsername.length > 0) throwError(`Duplicated username: ${data.user.loginUsername}(${checkUsername[0]?.user_type})`)\n\n const _data = await getCreatePayload(_userType, data)\n\n if (!_data) {\n throw new Error(`Invalid create payload: ${JSON.stringify(_data)}`);\n }\n\n // create user\n let responseUser = await userModel.create({ data: _data })\n\n let newUserId = responseUser.user_id\n\n let response: any = {}\n\n if (_userType === \"customer\" && \"customer\" in data) {\n\n let dataCustomer: CustomerCreateProps[\"data\"] = {\n customer: {\n ...data.customer,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create customer\n await customerService.createCustomer({ data: dataCustomer })\n\n response = await customerService.getCustomer({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"administrator\" && \"administrator\" in data) {\n\n let dataAdministrator: AdministratorCreateProps[\"data\"] = {\n administrator: {\n ...data.administrator,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create administrator\n await administratorService.createAdministrator({ data: dataAdministrator })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(newUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await administratorService.getAdministrator({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"operator\" && \"operator\" in data) {\n\n let dataOperator: OperatorCreateProps[\"data\"] = {\n operator: {\n ...data.operator,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create operator\n await operatorService.createOperator({ data: dataOperator })\n\n response = await operatorService.getOperator({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"worker\" && \"worker\" in data) {\n\n let dataWorker: WorkerCreateProps[\"data\"] = {\n worker: {\n ...data.worker,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create worker\n await workerService.createWorker({ data: dataWorker })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(newUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await workerService.getWorker({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"driver\" && \"driver\" in data) {\n\n let dataDriver: DriverCreateProps[\"data\"] = {\n driver: {\n ...data.driver,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create driver\n await driverService.createDriver({ data: dataDriver })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(newUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await driverService.getDriver({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"member\" && \"member\" in data) {\n\n let dataMember: MemberCreateProps[\"data\"] = {\n member: {\n ...data.member,\n // userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create member\n await memberService.createMember({ userId: Number(newUserId), data: dataMember })\n\n // replace user prop\n // await userPropService.replaceUserProp({\n // userPropType: \"LOCATION_ID\",\n // data: {\n // userProp: {\n // userId: Number(newUserId),\n // locationIds: data.props.locationIds\n // }\n // }\n // })\n\n response = await memberService.getMember({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"retailer\" && \"retailer\" in data) {\n\n let dataRetailer: RetailerCreateProps[\"data\"] = {\n retailer: {\n ...data.retailer,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create retailer\n await retailerService.createRetailer({ data: dataRetailer })\n\n response = await retailerService.getRetailer({ id: Number(newUserId), datatypes: [] })\n }\n\n return response\n }\n\n const updateUser = async ({ id, data, userType: overrideUserType }: UserUpdateProps) => {\n\n const _userType = overrideUserType || userType\n\n // check the username duplicated?\n const checkUsername = await userModel.list({\n limit: 1,\n offset: 0,\n orderBy: {\n [`${ModelUserFields.user_id}`]: \"asc\"\n },\n include: [],\n where: {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n [`${ModelUserFields.isdelete}`]: false,\n [`${ModelUserFields.istrash}`]: false,\n [`${ModelUserFields.accountid}`]: rest.accountId,\n },\n })\n\n // console.log('ch', checkUsername)\n\n if (checkUsername.length > 0) {\n if (Number(checkUsername[0]?.user_id) !== Number(id)) { // if not self user id\n throwError(`Duplicated username: ${data.user.loginUsername}(${checkUsername[0]?.user_type})`)\n }\n }\n\n const _data = getUpdatePayload(_userType, data)\n\n if (!_data) {\n throw new Error(`Invalid update payload: ${JSON.stringify(_data)}`);\n }\n\n // update user\n let responseUser = await userModel.update({ id, data: _data })\n\n let updateUserId = responseUser.user_id\n\n let response: any = {}\n\n if (_userType === \"customer\" && \"customer\" in data) {\n\n let dataCustomer: CustomerUpdateProps[\"data\"] = {\n customer: {\n ...data.customer\n }\n }\n\n await customerService.updateCustomer({ userId: Number(updateUserId), data: dataCustomer })\n\n response = await customerService.getCustomer({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"operator\" && \"operator\" in data) {\n\n let dataOperator: OperatorUpdateProps[\"data\"] = {\n operator: {\n ...data.operator\n }\n }\n\n await operatorService.updateOperator({ userId: Number(updateUserId), data: dataOperator })\n\n response = await operatorService.getOperator({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"administrator\" && \"administrator\" in data) {\n\n let dataCustomer: AdministratorUpdateProps[\"data\"] = {\n administrator: {\n ...data.administrator\n }\n }\n\n await administratorService.updateAdministrator({ userId: Number(updateUserId), data: dataCustomer })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(updateUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await administratorService.getAdministrator({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"worker\" && \"worker\" in data) {\n\n let dataWorker: WorkerUpdateProps[\"data\"] = {\n worker: {\n ...data.worker\n }\n }\n\n await workerService.updateWorker({ userId: Number(updateUserId), data: dataWorker })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(updateUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await workerService.getWorker({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"driver\" && \"driver\" in data) {\n\n let dataDriver: DriverUpdateProps[\"data\"] = {\n driver: {\n ...data.driver\n }\n }\n\n await driverService.updateDriver({ userId: Number(updateUserId), data: dataDriver })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(updateUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await driverService.getDriver({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"member\" && \"member\" in data) {\n\n let dataMember: MemberUpdateProps[\"data\"] = {\n member: {\n ...data.member\n }\n }\n\n await memberService.updateMember({ userId: Number(updateUserId), data: dataMember })\n\n // replace user prop\n // await userPropService.replaceUserProp({\n // userPropType: \"LOCATION_ID\",\n // data: {\n // userProp: {\n // userId: Number(updateUserId),\n // locationIds: data.props.locationIds\n // }\n // }\n // })\n\n response = await memberService.getMember({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"retailer\" && \"retailer\" in data) {\n\n let dataRetailer: RetailerUpdateProps[\"data\"] = {\n retailer: {\n ...data.retailer\n }\n }\n\n await retailerService.updateRetailer({ userId: Number(updateUserId), data: dataRetailer })\n\n response = await retailerService.getRetailer({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n return response\n }\n\n const getUser = async ({ id, datatypes = [], includePassword = false, overrideUserType = \"\" }: UserGetProps) => {\n\n let data: any = {}\n\n const _userType = overrideUserType ? overrideUserType : userType\n\n if (_userType === \"customer\") {\n data = await customerService.getCustomer({ id, datatypes: datatypes as CustomerGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"operator\") {\n data = await operatorService.getOperator({ id, datatypes: datatypes as OperatorGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"administrator\") {\n data = await administratorService.getAdministrator({ id, datatypes: datatypes as AdministratorGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"worker\") {\n data = await workerService.getWorker({ id, datatypes: datatypes as WorkerGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"driver\") {\n data = await driverService.getDriver({ id, datatypes: datatypes as DriverGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"member\") {\n data = await memberService.getMember({ id, datatypes: datatypes as MemberGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"retailer\") {\n data = await retailerService.getRetailer({ id, datatypes: datatypes as RetailerGetProps[\"datatypes\"], includePassword })\n }\n\n if (!data) {\n throw new Error(`Invalid id: ${id}`);\n }\n\n return data\n };\n\n const listUsers = async ({ limit, offset, filters, sortfield, sortorder, datatypes, includePassword = false }: UserListProps) => {\n\n let data: any[] = [];\n let total = 0;\n\n if (userType === \"customer\") {\n ({ data, total } = await customerService.listCustomers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as CustomerListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"operator\") {\n ({ data, total } = await operatorService.listOperators(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as OperatorListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"administrator\") {\n ({ data, total } = await administratorService.listAdministrators(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as AdministratorListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"worker\") {\n ({ data, total } = await workerService.listWorkers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as WorkerListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"driver\") {\n ({ data, total } = await driverService.listDrivers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as DriverListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"member\") {\n ({ data, total } = await memberService.listMembers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as MemberListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"retailer\") {\n ({ data, total } = await retailerService.listRetailers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as RetailerListProps[\"datatypes\"] }\n ))\n }\n\n return {\n data,\n total\n }\n };\n\n const removeUsers = async ({ ids }: UserRemoveProps) => {\n\n if (!ids.length) throwError('id is required');\n\n let response: any[] = []\n\n if (userType === \"customer\") {\n response = await customerService.removeCustomers({ userIds: ids })\n }\n\n if (userType === \"operator\") {\n response = await operatorService.removeOperators({ userIds: ids })\n }\n\n if (userType === \"administrator\") {\n response = await administratorService.removeAdministrators({ userIds: ids })\n await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"worker\") {\n response = await workerService.removeWorkers({ userIds: ids })\n await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"driver\") {\n response = await driverService.removeDrivers({ userIds: ids })\n await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"member\") {\n response = await memberService.removeMembers({ userIds: ids })\n // await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"retailer\") {\n response = await retailerService.removeRetailers({ userIds: ids })\n // await userPropService.removeUserProps({ userIds: ids })\n }\n\n // remove user\n let responseUser = await userModel.remove({ ids: ids.map(i => Number(i)) })\n\n response.forEach((i, index) => {\n i.user = responseUser[index]\n })\n\n return response\n };\n\n const replacePassword = async ({ id, data, isOperator = false }: UserReplacePasswordProps) => {\n\n const passwordUserModel = UserModel({\n ...rest,\n ...(isOperator === true ? { isOperator } : {})\n })\n\n // update user password\n let responseUser = await passwordUserModel.update({\n id,\n data: {\n login_password: data?.loginPassword\n }\n })\n\n let updateUserId = responseUser.user_id\n\n let response = await getUser({ id: Number(updateUserId), includePassword: false, datatypes: [] })\n\n return response\n }\n\n const getUserDataTypes = () => {\n\n let data: any[] = [];\n let total = 0;\n\n if (userType === \"customer\") {\n data = customerService.getDataTypes()\n }\n\n if (userType === \"operator\") {\n data = operatorService.getDataTypes()\n }\n\n if (userType === \"administrator\") {\n data = administratorService.getDataTypes()\n }\n\n if (userType === \"worker\") {\n data = workerService.getDataTypes()\n }\n\n if (userType === \"driver\") {\n data = driverService.getDataTypes()\n }\n\n if (userType === \"member\") {\n data = memberService.getDataTypes()\n }\n\n if (userType === \"retailer\") {\n data = retailerService.getDataTypes()\n }\n\n return data\n };\n\n return {\n createUser,\n updateUser,\n getUser,\n listUsers,\n removeUsers,\n replacePassword,\n getUserDataTypes\n }\n\n}\n\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "storemw-core-api",
3
- "version": "1.0.82",
3
+ "version": "1.0.84",
4
4
  "description": "STOREMW Core API",
5
5
  "main": "dist/app.js",
6
6
  "types": "dist/app.d.ts",