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.
- package/dist/controllers/auth/accessKeyController.js +15 -10
- package/dist/controllers/auth/accessKeyController.js.map +1 -1
- package/dist/schema/payload/injection_field/schemaInjectionField.d.ts +16 -16
- package/dist/services/auth/AccessKeyService.d.ts +2 -0
- package/dist/services/auth/AccessKeyService.js +44 -9
- package/dist/services/auth/AccessKeyService.js.map +1 -1
- package/dist/services/auth/AuthService.d.ts +1 -0
- package/dist/services/auth/AuthService.js +1 -0
- package/dist/services/auth/AuthService.js.map +1 -1
- package/dist/services/injection_field/InjectionFieldService.d.ts +1 -1
- package/dist/services/user/UserService.d.ts +2 -1
- package/dist/services/user/UserService.js +9 -8
- package/dist/services/user/UserService.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
-
...
|
|
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
|
-
...
|
|
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
|
-
...
|
|
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
|
-
...
|
|
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
|
-
...
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
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
|
-
|
|
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
|
|
57
|
+
if (exports.allowedAccessUserTypes.includes(accessKeyUserType) === false) {
|
|
55
58
|
throw new Error(`User type is not allowed: ${accessKeyUserType}`);
|
|
56
59
|
}
|
|
57
|
-
|
|
58
|
-
|
|
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 (
|
|
61
|
-
|
|
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
|
-
|
|
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 & {
|
|
@@ -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
|
-
|
|
358
|
+
const _userType = overrideUserType ? overrideUserType : userType;
|
|
359
|
+
if (_userType === "customer") {
|
|
359
360
|
data = await customerService.getCustomer({ id, datatypes: datatypes, includePassword });
|
|
360
361
|
}
|
|
361
|
-
if (
|
|
362
|
+
if (_userType === "operator") {
|
|
362
363
|
data = await operatorService.getOperator({ id, datatypes: datatypes, includePassword });
|
|
363
364
|
}
|
|
364
|
-
if (
|
|
365
|
+
if (_userType === "administrator") {
|
|
365
366
|
data = await administratorService.getAdministrator({ id, datatypes: datatypes, includePassword });
|
|
366
367
|
}
|
|
367
|
-
if (
|
|
368
|
+
if (_userType === "worker") {
|
|
368
369
|
data = await workerService.getWorker({ id, datatypes: datatypes, includePassword });
|
|
369
370
|
}
|
|
370
|
-
if (
|
|
371
|
+
if (_userType === "driver") {
|
|
371
372
|
data = await driverService.getDriver({ id, datatypes: datatypes, includePassword });
|
|
372
373
|
}
|
|
373
|
-
if (
|
|
374
|
+
if (_userType === "member") {
|
|
374
375
|
data = await memberService.getMember({ id, datatypes: datatypes, includePassword });
|
|
375
376
|
}
|
|
376
|
-
if (
|
|
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"]}
|