storemw-core-api 1.0.102 → 1.0.104
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/file/fileController.js +5 -64
- package/dist/controllers/file/fileController.js.map +1 -1
- package/dist/features/file_storage/fileStorageRegistry.js +10 -2
- package/dist/features/file_storage/fileStorageRegistry.js.map +1 -1
- package/dist/features/file_storage/fileStorageType.d.ts +1 -1
- package/dist/features/file_storage/fileStorageType.js.map +1 -1
- package/dist/middlewares/request/initialPrisma.js +1 -1
- package/dist/middlewares/request/initialPrisma.js.map +1 -1
- package/dist/services/account/AccountService.js +23 -16
- package/dist/services/account/AccountService.js.map +1 -1
- package/dist/services/file/FileService.js +9 -6
- package/dist/services/file/FileService.js.map +1 -1
- package/dist/services/one_time_code/OneTimeCodeService.d.ts +1 -0
- package/dist/services/one_time_code/OneTimeCodeService.js +2 -1
- package/dist/services/one_time_code/OneTimeCodeService.js.map +1 -1
- package/dist/utils/fileThumbnail.d.ts +2 -1
- package/dist/utils/fileThumbnail.js +57 -2
- package/dist/utils/fileThumbnail.js.map +1 -1
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.js +4 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/protectedServiceUtil.d.ts +5 -0
- package/dist/utils/protectedServiceUtil.js +16 -0
- package/dist/utils/protectedServiceUtil.js.map +1 -0
- package/dist/utils/serviceUtils.d.ts +9 -0
- package/dist/utils/serviceUtils.js +30 -1
- package/dist/utils/serviceUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,69 +9,6 @@ const getRootName = (toSingular) => {
|
|
|
9
9
|
let rootName = toSingular ? "file" : "files";
|
|
10
10
|
return rootName;
|
|
11
11
|
};
|
|
12
|
-
// const getStorageProvider = () => {
|
|
13
|
-
// const storageProviderName = config.FILE_STORAGE_PROVIDER_NAME as FileUploadProps["storageProviderName"]
|
|
14
|
-
// let storageProviderOptions = {}
|
|
15
|
-
// if (storageProviderName === "local") {
|
|
16
|
-
// storageProviderOptions = {
|
|
17
|
-
// basePath: `${config.FILE_STORAGE_LOCAL_BASE_PATH}`,
|
|
18
|
-
// publicBaseUrl: `${config.FILE_STORAGE_LOCAL_BASE_URL}`,
|
|
19
|
-
// skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF),
|
|
20
|
-
// skipFoldernameByDate: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_YEAR_MONTH)
|
|
21
|
-
// }
|
|
22
|
-
// }
|
|
23
|
-
// if (storageProviderName === "gcloud") {
|
|
24
|
-
// storageProviderOptions = {
|
|
25
|
-
// bucketName: `${config.FILE_STORAGE_GCLOUD_BUCKET_NAME}`,
|
|
26
|
-
// basePath: `${config.FILE_STORAGE_GCLOUD_BASE_PATH}`,
|
|
27
|
-
// credentials: `${path.resolve(process.cwd(), `${config.FILE_STORAGE_GCLOUD_CREDENTIAL_PATH}`)}`,
|
|
28
|
-
// publicBaseUrl: `${config.FILE_STORAGE_GCLOUD_BASE_URL}`,
|
|
29
|
-
// skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF),
|
|
30
|
-
// skipFoldernameByDate: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH)
|
|
31
|
-
// }
|
|
32
|
-
// }
|
|
33
|
-
// return {
|
|
34
|
-
// storageProviderName,
|
|
35
|
-
// storageProviderOptions
|
|
36
|
-
// }
|
|
37
|
-
// }
|
|
38
|
-
// const getStorageSetup = async () => {
|
|
39
|
-
// const hookSetup = await FileStorageHook.onSetup()
|
|
40
|
-
// let storageProviderOptions = {}
|
|
41
|
-
// if (hookSetup.storageType === "local") {
|
|
42
|
-
// storageProviderOptions = {
|
|
43
|
-
// // basePath: `${config.FILE_STORAGE_LOCAL_BASE_PATH}`,
|
|
44
|
-
// basePath: `${hookSetup.localStorageOptions.basePath}`,
|
|
45
|
-
// // publicBaseUrl: `${config.FILE_STORAGE_LOCAL_BASE_URL}`,
|
|
46
|
-
// publicBaseUrl: `${hookSetup.localStorageOptions.baseUrl}`,
|
|
47
|
-
// // skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF),
|
|
48
|
-
// skipFoldernameByModuleRef: Boolean(hookSetup.localStorageOptions.skipFolderNameModuleRef),
|
|
49
|
-
// // skipFoldernameByDate: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_YEAR_MONTH)
|
|
50
|
-
// skipFoldernameByDate: Boolean(hookSetup.localStorageOptions.skipFolderNameYearMonth)
|
|
51
|
-
// }
|
|
52
|
-
// }
|
|
53
|
-
// if (hookSetup.storageType === "gcloud") {
|
|
54
|
-
// storageProviderOptions = {
|
|
55
|
-
// // basePath: `${config.FILE_STORAGE_GCLOUD_BASE_PATH}`,
|
|
56
|
-
// basePath: `${hookSetup.gcloudStorageOptions.basePath}`,
|
|
57
|
-
// // publicBaseUrl: `${config.FILE_STORAGE_GCLOUD_BASE_URL}`,
|
|
58
|
-
// publicBaseUrl: `${hookSetup.gcloudStorageOptions.baseUrl}`,
|
|
59
|
-
// // bucketName: `${config.FILE_STORAGE_GCLOUD_BUCKET_NAME}`,
|
|
60
|
-
// bucketName: `${hookSetup.gcloudStorageOptions.bucketName}`,
|
|
61
|
-
// // credentials: `${path.resolve(process.cwd(), `${config.FILE_STORAGE_GCLOUD_CREDENTIAL_PATH}`)}`,
|
|
62
|
-
// credentials: `${path.resolve(process.cwd(), `${hookSetup.gcloudStorageOptions.credentialPath}`)}`,
|
|
63
|
-
// // skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF),
|
|
64
|
-
// skipFoldernameByModuleRef: Boolean(hookSetup.gcloudStorageOptions.skipFolderNameModuleRef),
|
|
65
|
-
// // skipFoldernameByDate: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH)
|
|
66
|
-
// skipFoldernameByDate: Boolean(hookSetup.gcloudStorageOptions.skipFolderNameYearMonth)
|
|
67
|
-
// }
|
|
68
|
-
// }
|
|
69
|
-
// return {
|
|
70
|
-
// storageProviderName: hookSetup.storageType,
|
|
71
|
-
// storageProviderOptions,
|
|
72
|
-
// storageConfiguration: hookSetup.storageConfiguration
|
|
73
|
-
// }
|
|
74
|
-
// }
|
|
75
12
|
/** file/:fileId : get file */
|
|
76
13
|
const getFile = async (req, res, next) => {
|
|
77
14
|
try {
|
|
@@ -185,7 +122,11 @@ const uploadFiles = async (req, res, next) => {
|
|
|
185
122
|
sizeBytes: file.size,
|
|
186
123
|
})),
|
|
187
124
|
};
|
|
188
|
-
const
|
|
125
|
+
const data = await fileService.uploadFiles(payload);
|
|
126
|
+
let response = {
|
|
127
|
+
[`${getRootName(false)}`]: data,
|
|
128
|
+
total: data.length,
|
|
129
|
+
};
|
|
189
130
|
return (0, utils_1.sendSuccess)(res, response, "Files uploaded successfully");
|
|
190
131
|
}
|
|
191
132
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileController.js","sourceRoot":"","sources":["../../../src/controllers/file/fileController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request, Response, NextFunction } from \"express\";\n\n// import path from \"path\";\n\nimport { getDefaultServiceProps, sendSuccess, sendError, HTTP_STATUS } from \"@/utils\"\n\nimport { FileService, FileUploadProps, FileImageCompressionOptions, FileVideoCompressionOptions } from \"@/services\"\nimport {\n schemaFileDeletePayload,\n schemaFileUploadPayload,\n} from \"@/schema/payload\";\n\nimport { QueryList } from \"@/schema/middleware/route\";\n\nimport { FileStorageHook } from \"@/features\"\n\nconst getRootName = (toSingular: boolean) => {\n\n let rootName = toSingular ? \"file\" : \"files\";\n\n return rootName\n}\n\n// const getStorageProvider = () => {\n\n// const storageProviderName = config.FILE_STORAGE_PROVIDER_NAME as FileUploadProps[\"storageProviderName\"]\n\n// let storageProviderOptions = {}\n\n// if (storageProviderName === \"local\") {\n// storageProviderOptions = {\n// basePath: `${config.FILE_STORAGE_LOCAL_BASE_PATH}`,\n// publicBaseUrl: `${config.FILE_STORAGE_LOCAL_BASE_URL}`,\n// skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF),\n// skipFoldernameByDate: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_YEAR_MONTH)\n// }\n// }\n\n// if (storageProviderName === \"gcloud\") {\n// storageProviderOptions = {\n// bucketName: `${config.FILE_STORAGE_GCLOUD_BUCKET_NAME}`,\n// basePath: `${config.FILE_STORAGE_GCLOUD_BASE_PATH}`,\n// credentials: `${path.resolve(process.cwd(), `${config.FILE_STORAGE_GCLOUD_CREDENTIAL_PATH}`)}`,\n// publicBaseUrl: `${config.FILE_STORAGE_GCLOUD_BASE_URL}`,\n// skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF),\n// skipFoldernameByDate: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH)\n// }\n// }\n\n// return {\n// storageProviderName,\n// storageProviderOptions\n// }\n// }\n\n// const getStorageSetup = async () => {\n\n// const hookSetup = await FileStorageHook.onSetup()\n\n// let storageProviderOptions = {}\n\n// if (hookSetup.storageType === \"local\") {\n// storageProviderOptions = {\n// // basePath: `${config.FILE_STORAGE_LOCAL_BASE_PATH}`,\n// basePath: `${hookSetup.localStorageOptions.basePath}`,\n// // publicBaseUrl: `${config.FILE_STORAGE_LOCAL_BASE_URL}`,\n// publicBaseUrl: `${hookSetup.localStorageOptions.baseUrl}`,\n// // skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF),\n// skipFoldernameByModuleRef: Boolean(hookSetup.localStorageOptions.skipFolderNameModuleRef),\n// // skipFoldernameByDate: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_YEAR_MONTH)\n// skipFoldernameByDate: Boolean(hookSetup.localStorageOptions.skipFolderNameYearMonth)\n// }\n// }\n\n// if (hookSetup.storageType === \"gcloud\") {\n// storageProviderOptions = {\n// // basePath: `${config.FILE_STORAGE_GCLOUD_BASE_PATH}`,\n// basePath: `${hookSetup.gcloudStorageOptions.basePath}`,\n// // publicBaseUrl: `${config.FILE_STORAGE_GCLOUD_BASE_URL}`,\n// publicBaseUrl: `${hookSetup.gcloudStorageOptions.baseUrl}`,\n// // bucketName: `${config.FILE_STORAGE_GCLOUD_BUCKET_NAME}`,\n// bucketName: `${hookSetup.gcloudStorageOptions.bucketName}`,\n// // credentials: `${path.resolve(process.cwd(), `${config.FILE_STORAGE_GCLOUD_CREDENTIAL_PATH}`)}`,\n// credentials: `${path.resolve(process.cwd(), `${hookSetup.gcloudStorageOptions.credentialPath}`)}`,\n// // skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF),\n// skipFoldernameByModuleRef: Boolean(hookSetup.gcloudStorageOptions.skipFolderNameModuleRef),\n// // skipFoldernameByDate: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH)\n// skipFoldernameByDate: Boolean(hookSetup.gcloudStorageOptions.skipFolderNameYearMonth)\n// }\n// }\n\n// return {\n// storageProviderName: hookSetup.storageType,\n// storageProviderOptions,\n// storageConfiguration: hookSetup.storageConfiguration\n// }\n// }\n\n/** file/:fileId : get file */\nexport const getFile = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n try {\n\n const { fileId } = req.params;\n // const requestQuery = req.query as unknown as QueryList;\n // const requestDocumentType = documentType as FileServiceProps[\"documentType\"];\n\n const fileService = FileService({\n ...getDefaultServiceProps(req),\n })\n\n const data = await fileService.getFile({ id: Number(fileId) })\n\n return sendSuccess(res, data, \"Retrieved successfully\", getRootName(true));\n\n } catch (error: any) {\n next(error)\n }\n}\n\n/** files : upload files */\nexport const uploadFiles = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n try {\n\n let reqBody = req.body\n let reqFiles = req.files\n\n const request = schemaFileUploadPayload.parse({\n field_ref: reqBody.field_ref,\n field_module: reqBody.field_module,\n description: reqBody.description,\n tagName: reqBody.tag_name,\n label: reqBody.label,\n refId: Number(reqBody.ref_id),\n refId2: Number(reqBody.ref_id_2),\n ...(reqBody?.ref_label ? { refLabel: reqBody.ref_label } : {}),\n ...(reqBody?.ref_label_2 ? { refLabel2: reqBody.ref_label_2 } : {}),\n ...(reqBody?.remark ? { remark: reqBody.remark } : {}),\n files: Array.isArray(reqFiles) ? reqFiles.map((file: any) => ({\n originalname: file.originalname,\n mimetype: file.mimetype,\n size: file.size,\n buffer: file.buffer,\n })) : [],\n });\n\n // const {\n // storageProviderName,\n // storageProviderOptions\n // } = getStorageProvider()\n\n\n // Image Compression\n // const imageCompressionOptions: FileImageCompressionOptions | undefined\n // = config.FILE_UPLOAD_IMAGE_MAX_WIDTH && config.FILE_UPLOAD_IMAGE_QUALITY\n // ? {\n // maxWidth: Number(config.FILE_UPLOAD_IMAGE_MAX_WIDTH),\n // quality: Number(config.FILE_UPLOAD_IMAGE_QUALITY),\n // }\n // : undefined;\n\n\n // Video Compression\n // const videoCompressionOptions: FileVideoCompressionOptions | undefined =\n // config.FILE_UPLOAD_VIDEO_COMPRESSION_CRF &&\n // config.FILE_UPLOAD_VIDEO_COMPRESSION_PRESET &&\n // config.FILE_UPLOAD_VIDEO_COMPRESSION_RESOLUTION\n // ? {\n // crf: Number(config.FILE_UPLOAD_VIDEO_COMPRESSION_CRF),\n // preset: config.FILE_UPLOAD_VIDEO_COMPRESSION_PRESET as FileVideoCompressionOptions[\"preset\"],\n // resolution: Number(config.FILE_UPLOAD_VIDEO_COMPRESSION_RESOLUTION),\n // }\n // : undefined;\n\n // const {\n // storageProviderName,\n // storageProviderOptions,\n // storageConfiguration\n // } = await getStorageSetup()\n\n // // Image Compression\n // const imageCompressionOptions: FileImageCompressionOptions | undefined\n // = storageConfiguration?.imageMaxWidth && storageConfiguration?.imageMaxWidth\n // ? {\n // maxWidth: Number(storageConfiguration.imageMaxWidth),\n // quality: Number(storageConfiguration.imageQuality),\n // }\n // : undefined;\n\n // // Video Compression\n // const videoCompressionOptions: FileVideoCompressionOptions | undefined =\n // storageConfiguration?.videoCRF &&\n // storageConfiguration?.videoPreset &&\n // storageConfiguration?.videoResolution\n // ? {\n // crf: Number(storageConfiguration.videoCRF),\n // preset: storageConfiguration.videoPreset as FileVideoCompressionOptions[\"preset\"],\n // resolution: Number(storageConfiguration.videoResolution),\n // }\n // : undefined;\n\n const fileService = FileService({\n ...getDefaultServiceProps(req),\n });\n\n const payload: FileUploadProps = {\n field_ref: reqBody.field_ref,\n field_module: reqBody.field_module,\n description: request.description,\n label: request.label,\n tagName: request.tagName ?? \"\",\n refId: request.refId ?? 0,\n refId2: request?.refId2 ?? 0,\n refLabel: request?.refLabel ?? \"\",\n refLabel2: request?.refLabel2 ?? \"\",\n remark: request?.remark ?? \"\",\n // foldernameDate: \"2025-01-01\", // empty to use current datetime\n // storageProviderName,\n // storageProviderOptions,\n // ...(imageCompressionOptions ? { imageCompressionOptions } : {}),\n // ...(videoCompressionOptions ? { videoCompressionOptions } : {}),\n files: request.files.map(file => ({\n buffer: file.buffer,\n originalName: file.originalname,\n mimeType: file.mimetype,\n sizeBytes: file.size,\n })),\n };\n\n const response = await fileService.uploadFiles(payload);\n\n return sendSuccess(res, response, \"Files uploaded successfully\");\n\n } catch (error) {\n next(error);\n }\n};\n\n/** file/:fileId : update file */\n// export const updateFile = async (req: Request, res: Response, next: NextFunction): Promise<void> => {\n// try {\n\n// const { fileId } = req.params;\n// // const requestDocumentType = req.body.scope.target as FileServiceProps[\"documentType\"]\n\n// const fileService = FileService({\n// ...getDefaultServiceProps(req),\n// })\n\n// let response: any = {}\n\n// let reqScope = req.body.scope\n// let reqPayload = req.body.payload\n\n\n// // const { schemaUpdate, key } = documentSalesMap[requestDocumentType as keyof typeof documentSalesMap];\n\n// // const request = schemaUpdate.parse({\n// // scope: { target: reqScope.target, action: reqScope.action },\n// // payload: {\n// // ...buildDocumentPayloadFromRequest(reqPayload),\n// // profile: buildDocumentProfileFromRequest(reqPayload.profile),\n// // shipping: buildDocumentProfileOtherFromRequest(reqPayload.shipping),\n// // billing: buildDocumentProfileOtherFromRequest(reqPayload.billing),\n// // ...(reqPayload?.items ? { items: buildDocumentItemsFromRequest(reqPayload.items) } : {}),\n// // ...(reqPayload?.totals ? { totals: buildDocumentTotalsFromRequest(reqPayload.totals) } : {}),\n// // },\n// // });\n\n// // const payload: DocumentUpdateProps = {\n// // documentId: Number(documentId),\n// // documentType: requestDocumentType,\n// // data: {\n// // ...buildDocumentPayloadToService(request.payload),\n// // [key]: {\n// // profile: buildDocumentProfileToService(request.payload.profile),\n// // shipping: buildDocumentProfileOtherToService(request.payload.shipping),\n// // billing: buildDocumentProfileOtherToService(request.payload.billing),\n// // ...(request.payload?.items ? { items: buildDocumentItemsToService(request.payload.items) } : {}),\n// // ...(request.payload?.totals ? { totals: buildDocumentTotalsToService(request.payload.totals) } : {}),\n// // },\n// // } as any,\n// // };\n\n// // const result = await fileService.updateFile(payload);\n\n// // response = {\n// // [getRootName(true)]: result,\n// // };\n\n// sendSuccess(res, response, `File updated successfully`)\n\n// } catch (error: any) {\n// next(error)\n// }\n// };\n\n/** files : list files */\nexport const listFiles = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n try {\n\n const requestQuery = req.query as unknown as QueryList;\n // const requestDocumentType = req.params.documentType as FileServiceProps[\"documentType\"];\n\n const fileService = FileService({\n ...getDefaultServiceProps(req),\n })\n\n const { data, total } = await fileService.listFiles({\n ...requestQuery,\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/** files/delete : delete files */\nexport const deleteFiles = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n try {\n\n // const requestDocumentType = req.body.scope.target as FileServiceProps[\"documentType\"]\n // const requestQuery = req.query as unknown as QueryList;\n // const requestFileId = Number(req.params.fileId)\n\n const request = schemaFileDeletePayload.parse(req.body)\n\n const fileService = FileService({\n ...getDefaultServiceProps(req),\n })\n\n // const {\n // storageProviderName,\n // storageProviderOptions\n // } = getStorageProvider()\n\n // const {\n // storageProviderName,\n // storageProviderOptions\n // } = await getStorageSetup()\n\n const payload = {\n fileIds: request.payload.ids.map(i => BigInt(i)),\n // storageProviderName,\n // storageProviderOptions\n }\n\n const data = await fileService.removeFiles(payload);\n\n return sendSuccess(res, data, \"Deleted\", getRootName(false));\n\n } catch (error: any) {\n next(error)\n }\n};\n\n/** file/data_types : get file data types */\n// export const getFileDataTypes = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n// try {\n\n// const requestQuery = req.query as unknown as QueryList;\n// // const requestDocumentType = req.params.documentType as FileServiceProps[\"documentType\"];\n\n// const fileService = FileService({\n// ...getDefaultServiceProps(req),\n// })\n\n// const data = fileService.getFileDataTypes();\n\n// let response = {\n// data_types: data\n// }\n\n// return sendSuccess(res, response, \"Retrieved successfully\");\n\n// } catch (error: any) {\n// next(error)\n// }\n// };\n"]}
|
|
1
|
+
{"version":3,"file":"fileController.js","sourceRoot":"","sources":["../../../src/controllers/file/fileController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request, Response, NextFunction } from \"express\";\n\n// import path from \"path\";\n\nimport { getDefaultServiceProps, sendSuccess, sendError, HTTP_STATUS } from \"@/utils\"\n\nimport { FileService, FileUploadProps, FileImageCompressionOptions, FileVideoCompressionOptions } from \"@/services\"\nimport {\n schemaFileDeletePayload,\n schemaFileUploadPayload,\n} from \"@/schema/payload\";\n\nimport { QueryList } from \"@/schema/middleware/route\";\n\nconst getRootName = (toSingular: boolean) => {\n\n let rootName = toSingular ? \"file\" : \"files\";\n\n return rootName\n}\n\n/** file/:fileId : get file */\nexport const getFile = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n try {\n\n const { fileId } = req.params;\n // const requestQuery = req.query as unknown as QueryList;\n // const requestDocumentType = documentType as FileServiceProps[\"documentType\"];\n\n const fileService = FileService({\n ...getDefaultServiceProps(req),\n })\n\n const data = await fileService.getFile({ id: Number(fileId) })\n\n return sendSuccess(res, data, \"Retrieved successfully\", getRootName(true));\n\n } catch (error: any) {\n next(error)\n }\n}\n\n/** files : upload files */\nexport const uploadFiles = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n try {\n\n let reqBody = req.body\n let reqFiles = req.files\n\n const request = schemaFileUploadPayload.parse({\n field_ref: reqBody.field_ref,\n field_module: reqBody.field_module,\n description: reqBody.description,\n tagName: reqBody.tag_name,\n label: reqBody.label,\n refId: Number(reqBody.ref_id),\n refId2: Number(reqBody.ref_id_2),\n ...(reqBody?.ref_label ? { refLabel: reqBody.ref_label } : {}),\n ...(reqBody?.ref_label_2 ? { refLabel2: reqBody.ref_label_2 } : {}),\n ...(reqBody?.remark ? { remark: reqBody.remark } : {}),\n files: Array.isArray(reqFiles) ? reqFiles.map((file: any) => ({\n originalname: file.originalname,\n mimetype: file.mimetype,\n size: file.size,\n buffer: file.buffer,\n })) : [],\n });\n\n // const {\n // storageProviderName,\n // storageProviderOptions\n // } = getStorageProvider()\n\n\n // Image Compression\n // const imageCompressionOptions: FileImageCompressionOptions | undefined\n // = config.FILE_UPLOAD_IMAGE_MAX_WIDTH && config.FILE_UPLOAD_IMAGE_QUALITY\n // ? {\n // maxWidth: Number(config.FILE_UPLOAD_IMAGE_MAX_WIDTH),\n // quality: Number(config.FILE_UPLOAD_IMAGE_QUALITY),\n // }\n // : undefined;\n\n\n // Video Compression\n // const videoCompressionOptions: FileVideoCompressionOptions | undefined =\n // config.FILE_UPLOAD_VIDEO_COMPRESSION_CRF &&\n // config.FILE_UPLOAD_VIDEO_COMPRESSION_PRESET &&\n // config.FILE_UPLOAD_VIDEO_COMPRESSION_RESOLUTION\n // ? {\n // crf: Number(config.FILE_UPLOAD_VIDEO_COMPRESSION_CRF),\n // preset: config.FILE_UPLOAD_VIDEO_COMPRESSION_PRESET as FileVideoCompressionOptions[\"preset\"],\n // resolution: Number(config.FILE_UPLOAD_VIDEO_COMPRESSION_RESOLUTION),\n // }\n // : undefined;\n\n // const {\n // storageProviderName,\n // storageProviderOptions,\n // storageConfiguration\n // } = await getStorageSetup()\n\n // // Image Compression\n // const imageCompressionOptions: FileImageCompressionOptions | undefined\n // = storageConfiguration?.imageMaxWidth && storageConfiguration?.imageMaxWidth\n // ? {\n // maxWidth: Number(storageConfiguration.imageMaxWidth),\n // quality: Number(storageConfiguration.imageQuality),\n // }\n // : undefined;\n\n // // Video Compression\n // const videoCompressionOptions: FileVideoCompressionOptions | undefined =\n // storageConfiguration?.videoCRF &&\n // storageConfiguration?.videoPreset &&\n // storageConfiguration?.videoResolution\n // ? {\n // crf: Number(storageConfiguration.videoCRF),\n // preset: storageConfiguration.videoPreset as FileVideoCompressionOptions[\"preset\"],\n // resolution: Number(storageConfiguration.videoResolution),\n // }\n // : undefined;\n\n const fileService = FileService({\n ...getDefaultServiceProps(req),\n });\n\n const payload: FileUploadProps = {\n field_ref: reqBody.field_ref,\n field_module: reqBody.field_module,\n description: request.description,\n label: request.label,\n tagName: request.tagName ?? \"\",\n refId: request.refId ?? 0,\n refId2: request?.refId2 ?? 0,\n refLabel: request?.refLabel ?? \"\",\n refLabel2: request?.refLabel2 ?? \"\",\n remark: request?.remark ?? \"\",\n // foldernameDate: \"2025-01-01\", // empty to use current datetime\n // storageProviderName,\n // storageProviderOptions,\n // ...(imageCompressionOptions ? { imageCompressionOptions } : {}),\n // ...(videoCompressionOptions ? { videoCompressionOptions } : {}),\n files: request.files.map(file => ({\n buffer: file.buffer,\n originalName: file.originalname,\n mimeType: file.mimetype,\n sizeBytes: file.size,\n })),\n };\n\n const data = await fileService.uploadFiles(payload);\n\n let response = {\n [`${getRootName(false)}`]: data,\n total: data.length,\n }\n\n return sendSuccess(res, response, \"Files uploaded successfully\");\n\n } catch (error) {\n next(error);\n }\n};\n\n/** file/:fileId : update file */\n// export const updateFile = async (req: Request, res: Response, next: NextFunction): Promise<void> => {\n// try {\n\n// const { fileId } = req.params;\n// // const requestDocumentType = req.body.scope.target as FileServiceProps[\"documentType\"]\n\n// const fileService = FileService({\n// ...getDefaultServiceProps(req),\n// })\n\n// let response: any = {}\n\n// let reqScope = req.body.scope\n// let reqPayload = req.body.payload\n\n\n// // const { schemaUpdate, key } = documentSalesMap[requestDocumentType as keyof typeof documentSalesMap];\n\n// // const request = schemaUpdate.parse({\n// // scope: { target: reqScope.target, action: reqScope.action },\n// // payload: {\n// // ...buildDocumentPayloadFromRequest(reqPayload),\n// // profile: buildDocumentProfileFromRequest(reqPayload.profile),\n// // shipping: buildDocumentProfileOtherFromRequest(reqPayload.shipping),\n// // billing: buildDocumentProfileOtherFromRequest(reqPayload.billing),\n// // ...(reqPayload?.items ? { items: buildDocumentItemsFromRequest(reqPayload.items) } : {}),\n// // ...(reqPayload?.totals ? { totals: buildDocumentTotalsFromRequest(reqPayload.totals) } : {}),\n// // },\n// // });\n\n// // const payload: DocumentUpdateProps = {\n// // documentId: Number(documentId),\n// // documentType: requestDocumentType,\n// // data: {\n// // ...buildDocumentPayloadToService(request.payload),\n// // [key]: {\n// // profile: buildDocumentProfileToService(request.payload.profile),\n// // shipping: buildDocumentProfileOtherToService(request.payload.shipping),\n// // billing: buildDocumentProfileOtherToService(request.payload.billing),\n// // ...(request.payload?.items ? { items: buildDocumentItemsToService(request.payload.items) } : {}),\n// // ...(request.payload?.totals ? { totals: buildDocumentTotalsToService(request.payload.totals) } : {}),\n// // },\n// // } as any,\n// // };\n\n// // const result = await fileService.updateFile(payload);\n\n// // response = {\n// // [getRootName(true)]: result,\n// // };\n\n// sendSuccess(res, response, `File updated successfully`)\n\n// } catch (error: any) {\n// next(error)\n// }\n// };\n\n/** files : list files */\nexport const listFiles = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n try {\n\n const requestQuery = req.query as unknown as QueryList;\n // const requestDocumentType = req.params.documentType as FileServiceProps[\"documentType\"];\n\n const fileService = FileService({\n ...getDefaultServiceProps(req),\n })\n\n const { data, total } = await fileService.listFiles({\n ...requestQuery,\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/** files/delete : delete files */\nexport const deleteFiles = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n try {\n\n // const requestDocumentType = req.body.scope.target as FileServiceProps[\"documentType\"]\n // const requestQuery = req.query as unknown as QueryList;\n // const requestFileId = Number(req.params.fileId)\n\n const request = schemaFileDeletePayload.parse(req.body)\n\n const fileService = FileService({\n ...getDefaultServiceProps(req),\n })\n\n // const {\n // storageProviderName,\n // storageProviderOptions\n // } = getStorageProvider()\n\n // const {\n // storageProviderName,\n // storageProviderOptions\n // } = await getStorageSetup()\n\n const payload = {\n fileIds: request.payload.ids.map(i => BigInt(i)),\n // storageProviderName,\n // storageProviderOptions\n }\n\n const data = await fileService.removeFiles(payload);\n\n return sendSuccess(res, data, \"Deleted\", getRootName(false));\n\n } catch (error: any) {\n next(error)\n }\n};\n\n/** file/data_types : get file data types */\n// export const getFileDataTypes = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n// try {\n\n// const requestQuery = req.query as unknown as QueryList;\n// // const requestDocumentType = req.params.documentType as FileServiceProps[\"documentType\"];\n\n// const fileService = FileService({\n// ...getDefaultServiceProps(req),\n// })\n\n// const data = fileService.getFileDataTypes();\n\n// let response = {\n// data_types: data\n// }\n\n// return sendSuccess(res, response, \"Retrieved successfully\");\n\n// } catch (error: any) {\n// next(error)\n// }\n// };\n"]}
|
|
@@ -12,7 +12,15 @@ exports.FileStorageHook = {
|
|
|
12
12
|
"image/jpeg",
|
|
13
13
|
"image/png",
|
|
14
14
|
"application/pdf",
|
|
15
|
-
"video/mp4"
|
|
15
|
+
"video/mp4",
|
|
16
|
+
"audio/ogg",
|
|
17
|
+
"audio/wav",
|
|
18
|
+
"audio/wav",
|
|
19
|
+
"audio/wave",
|
|
20
|
+
"audio/x-wav",
|
|
21
|
+
"audio/webm",
|
|
22
|
+
"audio/m4a",
|
|
23
|
+
"audio/mpeg"
|
|
16
24
|
],
|
|
17
25
|
imageMaxWidth: 800,
|
|
18
26
|
imageQuality: 80,
|
|
@@ -25,7 +33,7 @@ exports.FileStorageHook = {
|
|
|
25
33
|
storageType: "local",
|
|
26
34
|
storageConfiguration,
|
|
27
35
|
localStorageOptions: {
|
|
28
|
-
baseUrl: "
|
|
36
|
+
baseUrl: "http://localhost:8080/public/uploads",
|
|
29
37
|
basePath: "public/uploads",
|
|
30
38
|
skipFolderNameModuleRef: false,
|
|
31
39
|
skipFolderNameYearMonth: false
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileStorageRegistry.js","sourceRoot":"","sources":["../../../src/features/file_storage/fileStorageRegistry.ts"],"names":[],"mappings":";;;AACA,mCAAoC;AACpC,0BAA0B;AAE1B,oCAAoC;AACvB,QAAA,eAAe,GAA4B;IACpD,OAAO,EAAE,KAAK,IAAwC,EAAE;QAEpD,MAAM,oBAAoB,GAAsD;YAC5E,aAAa,EAAE,QAAQ;YACvB,gBAAgB,EAAE;gBACd,YAAY;gBACZ,WAAW;gBACX,iBAAiB;gBACjB,WAAW;
|
|
1
|
+
{"version":3,"file":"fileStorageRegistry.js","sourceRoot":"","sources":["../../../src/features/file_storage/fileStorageRegistry.ts"],"names":[],"mappings":";;;AACA,mCAAoC;AACpC,0BAA0B;AAE1B,oCAAoC;AACvB,QAAA,eAAe,GAA4B;IACpD,OAAO,EAAE,KAAK,IAAwC,EAAE;QAEpD,MAAM,oBAAoB,GAAsD;YAC5E,aAAa,EAAE,QAAQ;YACvB,gBAAgB,EAAE;gBACd,YAAY;gBACZ,WAAW;gBACX,iBAAiB;gBACjB,WAAW;gBACX,WAAW;gBACX,WAAW;gBACX,WAAW;gBACX,YAAY;gBACZ,aAAa;gBACb,YAAY;gBACZ,WAAW;gBACX,YAAY;aACf;YACD,aAAa,EAAE,GAAG;YAClB,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,UAAU;YACvB,eAAe,EAAE,IAAI;SACxB,CAAA;QAED,QAAQ;QACR,OAAO;YACH,WAAW,EAAE,OAAO;YACpB,oBAAoB;YACpB,mBAAmB,EAAE;gBACjB,OAAO,EAAE,sCAAsC;gBAC/C,QAAQ,EAAE,gBAAgB;gBAC1B,uBAAuB,EAAE,KAAK;gBAC9B,uBAAuB,EAAE,KAAK;aACjC;SACJ,CAAA;QAED,SAAS;QACT,WAAW;QACX,6BAA6B;QAC7B,4BAA4B;QAC5B,8BAA8B;QAC9B,0EAA0E;QAC1E,wBAAwB;QACxB,8CAA8C;QAC9C,sEAAsE;QACtE,0CAA0C;QAC1C,yCAAyC;QACzC,QAAQ;QACR,IAAI;IAER,CAAC;IACD,aAAa,EAAE,KAAK,EAAE,KAAyC,EAAE,EAAE;QAC/D,IAAA,kBAAU,EAAC,uDAAuD,CAAC,CAAA;IACvE,CAAC;IACD,eAAe,EAAE,KAAK,EAAE,KAA2C,EAAE,EAAE;QACnE,IAAA,kBAAU,EAAC,yDAAyD,CAAC,CAAA;IACzE,CAAC;CACJ,CAAA","sourcesContent":["import { FeatureFileStorageProps, FeatureFileStorageOptions, FeatureFileStorageSuccessUploadProps, FeatureFileStorageStartUploadProps } from '@/features'\nimport { throwError } from '@/utils'\n// import path from 'path'\n\n// Runtime storage for injected hook\nexport const FileStorageHook: FeatureFileStorageProps = {\n onSetup: async (): Promise<FeatureFileStorageOptions> => {\n\n const storageConfiguration: FeatureFileStorageOptions[\"storageConfiguration\"] = {\n uploadMaxSize: 52428800,\n allowedFileTypes: [\n \"image/jpeg\",\n \"image/png\",\n \"application/pdf\",\n \"video/mp4\",\n \"audio/ogg\",\n \"audio/wav\",\n \"audio/wav\",\n \"audio/wave\",\n \"audio/x-wav\",\n \"audio/webm\",\n \"audio/m4a\",\n \"audio/mpeg\"\n ],\n imageMaxWidth: 800,\n imageQuality: 80,\n videoCRF: 28,\n videoPreset: \"veryfast\",\n videoResolution: 1280\n }\n\n // local\n return {\n storageType: \"local\",\n storageConfiguration,\n localStorageOptions: {\n baseUrl: \"http://localhost:8080/public/uploads\",\n basePath: \"public/uploads\",\n skipFolderNameModuleRef: false,\n skipFolderNameYearMonth: false\n }\n }\n\n // gcloud\n // return {\n // storageType: \"gcloud\",\n // storageConfiguration,\n // gcloudStorageOptions: {\n // baseUrl: \"https://storage.googleapis.com/chinlai-erp-delivery\",\n // basePath: \"\",\n // bucketName: \"chinlai-erp-delivery\",\n // credentialPath: \"config/chinlai-erp-api-253ac2637a8e.json\",\n // skipFolderNameModuleRef: false,\n // skipFolderNameYearMonth: false\n // }\n // }\n\n },\n onStartUpload: async (props: FeatureFileStorageStartUploadProps) => {\n throwError(`Invalid settings for onStartUpload in FileStorageHook`)\n },\n onSuccessUpload: async (props: FeatureFileStorageSuccessUploadProps) => {\n throwError(`Invalid settings for onSuccessUpload in FileStorageHook`)\n }\n}"]}
|
|
@@ -51,7 +51,7 @@ type DefaultUpload = {
|
|
|
51
51
|
batchCode: string;
|
|
52
52
|
mimeType: string;
|
|
53
53
|
bufferFilebuffer: Buffer;
|
|
54
|
-
bufferFileThumbnail
|
|
54
|
+
bufferFileThumbnail?: Buffer;
|
|
55
55
|
outputSizeBytes: number;
|
|
56
56
|
fileCompressFormat: any;
|
|
57
57
|
imageCompressionOptions?: FileImageCompressionOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileStorageType.js","sourceRoot":"","sources":["../../../src/features/file_storage/fileStorageType.ts"],"names":[],"mappings":"","sourcesContent":["import {\n FileStorageProviderType,\n FileLocalProviderOptions,\n FileGoogleCloudProviderOptions,\n FileImageCompressionOptions,\n FileVideoCompressionOptions,\n FileUploadProps,\n FileCategoryName,\n FileUploadItem\n} from \"@/services\";\n\nexport type FeatureFileStorageType = FileStorageProviderType\n\nexport type FeatureFileStorageConfiguration = {\n uploadMaxSize: number // e.g., 52428800 (50 MB)\n allowedFileTypes: string[] // e.g., [\"image/jpeg\", \"image/png\", \"application/pdf\", \"video/mp4\"]\n imageMaxWidth?: number // max width for images (e.g., 800)\n imageQuality?: number // compression quality (1-100)\n videoCRF?: number // Compression rate factor, lower = higher quality (e.g., 28)\n videoPreset?: \"ultrafast\" | \"superfast\" | \"veryfast\" | \"faster\" | \"fast\" | \"medium\" | \"slow\" | \"slower\" | \"veryslow\";\n videoResolution?: number; // Max width for videos, preserves aspect ratio (e.g., 1280)\n}\n\nexport type FeatureFileStorageLocalOptions = {\n basePath: string\n baseUrl: string\n skipFolderNameModuleRef: boolean\n skipFolderNameYearMonth: boolean\n}\n\nexport type FeatureFileStorageGoogleCloudOptions = {\n bucketName: string\n credentialPath: string\n baseUrl: string\n basePath: string\n skipFolderNameModuleRef: boolean\n skipFolderNameYearMonth: boolean\n}\n\n/* 🔑 Discriminated union */\nexport type FeatureFileStorageOptions =\n | {\n storageType: \"local\"\n storageConfiguration: FeatureFileStorageConfiguration\n localStorageOptions: FeatureFileStorageLocalOptions\n }\n | {\n storageType: \"gcloud\"\n storageConfiguration: FeatureFileStorageConfiguration\n gcloudStorageOptions: FeatureFileStorageGoogleCloudOptions\n }\n\ntype DefaultUpload = {\n fieldRef: FileUploadProps[\"field_ref\"],\n fieldModule: FileUploadProps[\"field_module\"],\n tagName: FileUploadProps[\"tagName\"],\n label: FileUploadProps[\"label\"],\n refId: FileUploadProps[\"refId\"],\n refId2: FileUploadProps[\"refId2\"],\n refLabel: FileUploadProps[\"refLabel\"],\n refLabel2: FileUploadProps[\"refLabel2\"],\n remark: FileUploadProps[\"remark\"],\n description: FileUploadProps[\"description\"],\n foldernameDate: FileUploadProps[\"foldernameDate\"],\n file: FileUploadItem,\n storageProviderName: FileStorageProviderType,\n storageProviderOptions: FileLocalProviderOptions | FileGoogleCloudProviderOptions,\n fileCategoryName: FileCategoryName,\n batchCode: string,\n mimeType: string,\n bufferFilebuffer: Buffer,\n bufferFileThumbnail
|
|
1
|
+
{"version":3,"file":"fileStorageType.js","sourceRoot":"","sources":["../../../src/features/file_storage/fileStorageType.ts"],"names":[],"mappings":"","sourcesContent":["import {\n FileStorageProviderType,\n FileLocalProviderOptions,\n FileGoogleCloudProviderOptions,\n FileImageCompressionOptions,\n FileVideoCompressionOptions,\n FileUploadProps,\n FileCategoryName,\n FileUploadItem\n} from \"@/services\";\n\nexport type FeatureFileStorageType = FileStorageProviderType\n\nexport type FeatureFileStorageConfiguration = {\n uploadMaxSize: number // e.g., 52428800 (50 MB)\n allowedFileTypes: string[] // e.g., [\"image/jpeg\", \"image/png\", \"application/pdf\", \"video/mp4\"]\n imageMaxWidth?: number // max width for images (e.g., 800)\n imageQuality?: number // compression quality (1-100)\n videoCRF?: number // Compression rate factor, lower = higher quality (e.g., 28)\n videoPreset?: \"ultrafast\" | \"superfast\" | \"veryfast\" | \"faster\" | \"fast\" | \"medium\" | \"slow\" | \"slower\" | \"veryslow\";\n videoResolution?: number; // Max width for videos, preserves aspect ratio (e.g., 1280)\n}\n\nexport type FeatureFileStorageLocalOptions = {\n basePath: string\n baseUrl: string\n skipFolderNameModuleRef: boolean\n skipFolderNameYearMonth: boolean\n}\n\nexport type FeatureFileStorageGoogleCloudOptions = {\n bucketName: string\n credentialPath: string\n baseUrl: string\n basePath: string\n skipFolderNameModuleRef: boolean\n skipFolderNameYearMonth: boolean\n}\n\n/* 🔑 Discriminated union */\nexport type FeatureFileStorageOptions =\n | {\n storageType: \"local\"\n storageConfiguration: FeatureFileStorageConfiguration\n localStorageOptions: FeatureFileStorageLocalOptions\n }\n | {\n storageType: \"gcloud\"\n storageConfiguration: FeatureFileStorageConfiguration\n gcloudStorageOptions: FeatureFileStorageGoogleCloudOptions\n }\n\ntype DefaultUpload = {\n fieldRef: FileUploadProps[\"field_ref\"],\n fieldModule: FileUploadProps[\"field_module\"],\n tagName: FileUploadProps[\"tagName\"],\n label: FileUploadProps[\"label\"],\n refId: FileUploadProps[\"refId\"],\n refId2: FileUploadProps[\"refId2\"],\n refLabel: FileUploadProps[\"refLabel\"],\n refLabel2: FileUploadProps[\"refLabel2\"],\n remark: FileUploadProps[\"remark\"],\n description: FileUploadProps[\"description\"],\n foldernameDate: FileUploadProps[\"foldernameDate\"],\n file: FileUploadItem,\n storageProviderName: FileStorageProviderType,\n storageProviderOptions: FileLocalProviderOptions | FileGoogleCloudProviderOptions,\n fileCategoryName: FileCategoryName,\n batchCode: string,\n mimeType: string,\n bufferFilebuffer: Buffer,\n bufferFileThumbnail?: Buffer,\n outputSizeBytes: number,\n fileCompressFormat: any,\n imageCompressionOptions?: FileImageCompressionOptions,\n videoCompressionOptions?: FileVideoCompressionOptions\n}\n\nexport type FeatureFileStorageStartUploadProps = DefaultUpload & {\n\n}\n\nexport type FeatureFileStorageSuccessUploadProps = DefaultUpload & {\n fileId: number,\n fileThumbnailUrl: string,\n fileAssetUrl: string,\n fileDurationSeconds: number,\n}\n\nexport type FeatureFileStorageProps = {\n onSetup: () => Promise<FeatureFileStorageOptions>,\n onStartUpload: (payload: FeatureFileStorageStartUploadProps) => Promise<any>\n onSuccessUpload: (payload: FeatureFileStorageSuccessUploadProps) => Promise<any>\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialPrisma.js","sourceRoot":"","sources":["../../../src/middlewares/request/initialPrisma.ts"],"names":[],"mappings":";;;AAEA,+BAA+B;AAW/B,+BAA+B;AACxB,MAAM,aAAa,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAE7E,uBAAuB;IACvB,mDAAmD;IAEnD,0EAA0E;IAE1E,IAAI,CAAE,GAAW,CAAC,IAAI,EAAE,CAAC;QACpB,GAAW,CAAC,IAAI,GAAG;YAChB,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,KAAK;YACjB,qCAAqC;SACxC,CAAC;QACD,GAAW,CAAC,MAAM,GAAG,YAAM,CAAA;IAChC,CAAC;SAAM,CAAC;QACJ,2EAA2E;QAC1E,GAAW,CAAC,MAAM,GAAG,YAAM,CAAA;IAChC,CAAC;IAED,sCAAsC;IACtC,6BAA6B;IAC7B,mBAAmB;IACnB,mBAAmB;IACnB,wBAAwB;IACxB,2BAA2B;IAC3B,yBAAyB;IACzB,6BAA6B;IAC7B,yCAAyC;IACzC,SAAS;IACT,WAAW;IACX,gCAAgC;IAChC,IAAI;IAEJ,
|
|
1
|
+
{"version":3,"file":"initialPrisma.js","sourceRoot":"","sources":["../../../src/middlewares/request/initialPrisma.ts"],"names":[],"mappings":";;;AAEA,+BAA+B;AAW/B,+BAA+B;AACxB,MAAM,aAAa,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAE7E,uBAAuB;IACvB,mDAAmD;IAEnD,0EAA0E;IAE1E,IAAI,CAAE,GAAW,CAAC,IAAI,EAAE,CAAC;QACpB,GAAW,CAAC,IAAI,GAAG;YAChB,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,KAAK;YACjB,qCAAqC;SACxC,CAAC;QACD,GAAW,CAAC,MAAM,GAAG,YAAM,CAAA;IAChC,CAAC;SAAM,CAAC;QACJ,2EAA2E;QAC1E,GAAW,CAAC,MAAM,GAAG,YAAM,CAAA;IAChC,CAAC;IAED,sCAAsC;IACtC,6BAA6B;IAC7B,mBAAmB;IACnB,mBAAmB;IACnB,wBAAwB;IACxB,2BAA2B;IAC3B,yBAAyB;IACzB,6BAA6B;IAC7B,yCAAyC;IACzC,SAAS;IACT,WAAW;IACX,gCAAgC;IAChC,IAAI;IAEJ,0BAA0B;IAE1B,IAAI,EAAE,CAAC;AACX,CAAC,CAAC;AAtCW,QAAA,aAAa,iBAsCxB","sourcesContent":["// src/middlewares/request/initialPrisma.ts\nimport { Request, Response, NextFunction } from \"express\";\nimport { prisma } from \"@/lib\";\nimport { PrismaClient } from \"@prisma/client\";\n\nimport { AuthorizeRequest } from \"./validateAuthorization\";\n\nexport type RequestAuthContext = AuthorizeRequest & {\n auth: AuthorizeRequest[\"auth\"] & {\n prisma: PrismaClient;\n }\n};\n\n// append the existing req.auth\nexport const initialPrisma = (req: Request, res: Response, next: NextFunction) => {\n\n // req.prisma = prisma;\n // (req as RequestAuthContext).auth.prisma = prisma\n\n // const r = req as Request & { auth?: { prisma?: typeof prisma } & any };\n\n if (!(req as any).auth) {\n (req as any).auth = {\n accountId: 0,\n actionUserId: 0,\n authToken: \"\",\n isOperator: false,\n // prisma: prisma, // add prisma here\n };\n (req as any).prisma = prisma\n } else {\n // (req as any).auth.prisma = prisma; // if auth exists, just attach prisma\n (req as any).prisma = prisma\n }\n\n // attach Prisma client to auth object\n // initialize auth if missing\n // if (!req.auth) {\n // req.auth = {\n // accountId: 0,\n // actionUserId: 0,\n // authToken: \"\",\n // isOperator: false,\n // prisma, // assign PrismaClient\n // };\n // } else {\n // req.auth.prisma = prisma;\n // }\n\n // console.log('req', req)\n\n next();\n};"]}
|
|
@@ -108,14 +108,19 @@ const AccountService = (props) => {
|
|
|
108
108
|
return true;
|
|
109
109
|
}
|
|
110
110
|
};
|
|
111
|
+
const validateAccountCodeIsUsed = async (accountCode) => {
|
|
112
|
+
const accountCodeIsUsed = await checkAccoutCodeIsUsed(accountCode);
|
|
113
|
+
if (accountCodeIsUsed === true) {
|
|
114
|
+
(0, utils_1.throwError)(`Account code has been used: ${accountCode}`);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
111
117
|
const createAccount = async ({ data }) => {
|
|
112
118
|
// only operator token/access key allowed to access
|
|
113
|
-
if (rest.isOperator !== true)
|
|
114
|
-
(0, utils_1.throwError)(`Only operator token/access key allowed to perform`);
|
|
119
|
+
// if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)
|
|
115
120
|
// check account code cannot duplicated
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
121
|
+
await validateAccountCodeIsUsed(data.accountCode);
|
|
122
|
+
// const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode)
|
|
123
|
+
// if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)
|
|
119
124
|
// have to check the administrator allowed to create
|
|
120
125
|
// if failed throw error
|
|
121
126
|
// create account
|
|
@@ -198,12 +203,11 @@ const AccountService = (props) => {
|
|
|
198
203
|
};
|
|
199
204
|
const updateAccount = async ({ accountId, data }) => {
|
|
200
205
|
// only operator token/access key allowed to access
|
|
201
|
-
if (rest.isOperator !== true)
|
|
202
|
-
(0, utils_1.throwError)(`Only operator token/access key allowed to perform`);
|
|
206
|
+
// if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)
|
|
203
207
|
// check account code cannot duplicated
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
208
|
+
await validateAccountCodeIsUsed(data.accountCode);
|
|
209
|
+
// const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode, accountId)
|
|
210
|
+
// if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)
|
|
207
211
|
const _data = getUpdatePayload(data);
|
|
208
212
|
if (!_data) {
|
|
209
213
|
throw new Error(`Invalid update account payload: ${JSON.stringify(_data)}`);
|
|
@@ -213,8 +217,7 @@ const AccountService = (props) => {
|
|
|
213
217
|
};
|
|
214
218
|
const getAccount = async ({ id, datatypes = [] }) => {
|
|
215
219
|
// only operator token/access key allowed to access
|
|
216
|
-
if (rest.isOperator !== true)
|
|
217
|
-
(0, utils_1.throwError)(`Only operator token/access key allowed to perform`);
|
|
220
|
+
// if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)
|
|
218
221
|
let { data } = await listAccounts({
|
|
219
222
|
limit: 1,
|
|
220
223
|
offset: 0,
|
|
@@ -227,8 +230,7 @@ const AccountService = (props) => {
|
|
|
227
230
|
};
|
|
228
231
|
const listAccounts = async ({ limit, offset, filters, sortfield, sortorder, datatypes = [] }) => {
|
|
229
232
|
// only operator token/access key allowed to access
|
|
230
|
-
if (rest.isOperator !== true)
|
|
231
|
-
(0, utils_1.throwError)(`Only operator token/access key allowed to perform`);
|
|
233
|
+
// if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)
|
|
232
234
|
let data = [];
|
|
233
235
|
let sqlSelect = [
|
|
234
236
|
`COUNT(acc.*) OVER() as filtered_count`,
|
|
@@ -278,8 +280,7 @@ const AccountService = (props) => {
|
|
|
278
280
|
};
|
|
279
281
|
const removeAccounts = async ({ accountIds }) => {
|
|
280
282
|
// only operator token/access key allowed to access
|
|
281
|
-
if (rest.isOperator !== true)
|
|
282
|
-
(0, utils_1.throwError)(`Only operator token/access key allowed to perform`);
|
|
283
|
+
// if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)
|
|
283
284
|
if (!accountIds.length)
|
|
284
285
|
(0, utils_1.throwError)('accountIds is required');
|
|
285
286
|
let accountResponse = await accountModel.remove({ where: { [`${models_1.ModelAccountFields.account_id}`]: { in: accountIds } } });
|
|
@@ -317,6 +318,12 @@ const AccountService = (props) => {
|
|
|
317
318
|
updateAccount,
|
|
318
319
|
removeAccounts,
|
|
319
320
|
listAccounts
|
|
321
|
+
// validateAccountCodeIsUsed: protectServiceOnlyOperator(validateAccountCodeIsUsed, rest, "validate account code is used"),
|
|
322
|
+
// getAccount: protectServiceOnlyOperator(getAccount, rest, "get account"),
|
|
323
|
+
// createAccount: protectServiceOnlyOperator(createAccount, rest, "create account"),
|
|
324
|
+
// updateAccount: protectServiceOnlyOperator(updateAccount, rest, "update account"),
|
|
325
|
+
// removeAccounts: protectServiceOnlyOperator(removeAccounts, rest, "remove accounts"),
|
|
326
|
+
// listAccounts: protectServiceOnlyOperator(listAccounts, rest, "list accounts"),
|
|
320
327
|
};
|
|
321
328
|
};
|
|
322
329
|
exports.AccountService = AccountService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountService.js","sourceRoot":"","sources":["../../../src/services/account/AccountService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport {\n ModelUserFields,\n ModelAccountFields,\n AccountModel,\n ModelUserBranchFields,\n ModelBusinessFields,\n} from \"@/models\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport {\n BusinessService,\n BusinessCreateProps,\n UserService,\n UserCreateProps,\n AccessKeyService\n} from \"@/services\";\n\nexport type AccountServiceProps = DefaultServiceProps & {};\n\nexport type AccountGetProps = QueryGet & {\n id: number,\n // datatypes: AccountDataType[]\n};\n\nexport type AccountListProps = QueryList & {\n // datatypes: AccountDataType[]\n};\n\nexport type AccountRemoveProps = {\n accountIds: BigInt[]\n};\n\nexport type Account = {\n accountId: number,\n name: string,\n accountCode: string,\n businessId: number,\n ownerUserId: number,\n status: boolean\n}\n\nexport type AccountCreateProps = {\n data: Omit<Account, \"accountId\" | \"businessId\" | \"ownerUserId\"> & {\n administrator: Omit<UserCreateProps[\"data\"][\"user\"], \"status\">,\n business: Omit<BusinessCreateProps[\"data\"], \"status\">\n }\n}\n\nexport type AccountUpdateProps = {\n accountId: number,\n data: Omit<Account, \"accountId\" | \"ownerUserId\">\n}\n\nconst getCreatePayload = (data: AccountCreateProps[\"data\"]) => {\n\n return {\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.status}`]: Boolean(data.status),\n [`${ModelAccountFields.account_code}`]: data.accountCode\n }\n\n}\n\nconst getCreateUpdatePayload = (businessId: number, ownerUserId: number) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: data.accountId,\n [`${ModelAccountFields.business_id}`]: businessId,\n [`${ModelAccountFields.owner_user_id}`]: ownerUserId,\n }\n\n}\n\nconst getUpdatePayload = (data: AccountUpdateProps[\"data\"]) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: accoundId,\n [`${ModelAccountFields.business_id}`]: data.businessId,\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.account_code}`]: data.accountCode,\n [`${ModelAccountFields.status}`]: Boolean(data.status)\n }\n\n}\n\nlet mainSqlSelect = {\n [`acc.${ModelAccountFields.account_id}`]: \"account_id\",\n [`acc.${ModelAccountFields.business_id}`]: \"business_id\",\n [`acc.${ModelAccountFields.name}`]: \"name\",\n [`acc.${ModelAccountFields.account_code}`]: \"account_code\",\n [`acc.${ModelAccountFields.status}`]: \"account_status\",\n}\n\nlet businessSqlSelect = {\n [`bus.${ModelBusinessFields.address_1}`]: \"address_1\",\n [`bus.${ModelBusinessFields.address_2}`]: \"address_2\",\n [`bus.${ModelBusinessFields.company_contact}`]: \"company_contact\",\n [`bus.${ModelBusinessFields.company_name}`]: \"company_name\",\n [`bus.${ModelBusinessFields.email}`]: \"email\",\n [`bus.${ModelBusinessFields.area_id}`]: \"area_id\",\n [`bus.${ModelBusinessFields.state_id}`]: \"state_id\",\n [`bus.${ModelBusinessFields.country_id}`]: \"country_id\",\n [`bus.${ModelBusinessFields.postcode}`]: \"postcode\",\n [`bus.${ModelBusinessFields.registration_number}`]: \"registration_number\",\n [`bus.${ModelBusinessFields.status}`]: \"business_status\",\n [`bus.${ModelBusinessFields.website}`]: \"website\",\n}\n\nlet ownerSqlSelectItem = {\n [`usrowner.${ModelUserFields.user_id}`]: \"user_id\",\n [`usrowner.${ModelUserFields.login_username}`]: \"login_username\",\n [`usrowner.${ModelUserFields.user_type}`]: \"user_type\",\n [`usrowner.${ModelUserFields.firstname}`]: \"firstname\",\n [`usrowner.${ModelUserFields.lastname}`]: \"lastname\",\n [`usrowner.${ModelUserFields.contact}`]: \"contact\",\n [`usrowner.${ModelUserFields.email}`]: \"email\",\n [`usrowner.${ModelUserFields.address}`]: \"address\",\n [`usrowner.${ModelUserFields.status}`]: \"status\",\n}\n\nlet ownerSqlSelect = {\n [`COALESCE(\n JSONB_BUILD_OBJECT(\n ${Object.entries(ownerSqlSelectItem).map(([key, alias]) => `'${alias}', ${key}`).join(\", \")}\n ),\n '{}'::jsonb\n )`]: \"owner\"\n}\n\nlet defaultSqlSelect = {\n [`acc.${ModelAccountFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`acc.${ModelAccountFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`acc.${ModelAccountFields.isdelete}`]: \"isdelete\",\n [`acc.${ModelAccountFields.istrash}`]: \"istrash\",\n [`acc.${ModelAccountFields.accountid}`]: \"accountid\",\n}\n\nexport const AccountService = (props: AccountServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const accountModel = AccountModel({ ...rest })\n const accessKeyService = AccessKeyService({ ...rest, accessKeyUserType: \"administrator\" })\n\n const checkAccoutCodeIsUsed = async (\n accountCode: Account[\"accountCode\"],\n selfAccountId?: Account[\"accountId\"]\n ) => {\n\n const { data } = await listAccounts({\n limit: 1,\n offset: 0,\n sortfield: `${ModelAccountFields.account_id}`,\n sortorder: \"ASC\",\n filters: [{\n field: `${ModelAccountFields.account_code}`,\n operator: \"=\",\n value: accountCode\n }],\n datatypes: []\n })\n\n if (data.length <= 0) return false\n\n if (selfAccountId) {\n\n if (Number(data[0].account_id) === Number(selfAccountId)) {\n return false\n } else {\n return true\n }\n\n } else {\n\n return true\n }\n\n }\n\n const createAccount = async ({ data }: AccountCreateProps) => {\n\n // only operator token/access key allowed to access\n if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n // check account code cannot duplicated\n const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode)\n\n if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n // have to check the administrator allowed to create\n // if failed throw error\n\n // create account\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.create({ data: _data })\n\n const newAccountId = response?.account_id ?? 0\n\n const businessService = BusinessService({ ...rest, accountId: Number(newAccountId) })\n const userService = UserService({ ...rest, accountId: Number(newAccountId), userType: \"administrator\" })\n\n let accountBusinessId = 0\n let accountUserId = 0\n let accountId = 0\n\n // create user(administrator)\n if (data?.administrator) {\n\n let userData = data?.administrator ?? {}\n\n let userPayload: UserCreateProps = {\n userType: \"administrator\",\n data: {\n user: {\n address: userData.address,\n contact: userData.contact,\n email: userData.email,\n firstname: userData.firstname,\n lastname: userData.lastname,\n loginPassword: userData.loginPassword,\n loginUsername: userData.loginUsername,\n status: true // always true for first time\n },\n administrator: {\n isOwner: true // first create must be owner\n },\n props: {\n locationIds: []\n }\n }\n }\n\n const responseOwner = await userService.createUser(userPayload)\n\n accountUserId = Number(responseOwner?.user_id) ?? 0\n accountId = Number(responseOwner?.accountid) ?? 0\n\n }\n\n // create default administrator access key\n await accessKeyService.createAccessKey({\n data: {\n userId: accountUserId,\n isDefault: true,\n overrideAccountId: accountId\n }\n })\n\n // create business\n if (data?.business) {\n\n let businessData = data?.business ?? {}\n\n let businessPayload: BusinessCreateProps = {\n data: {\n address1: businessData.address1,\n address2: businessData.address2,\n areaId: businessData.areaId,\n companyContact: businessData.companyContact,\n companyName: businessData.companyName,\n countryId: businessData.countryId,\n email: businessData.email,\n postcode: businessData.postcode,\n registrationNumber: businessData.registrationNumber,\n stateId: businessData.stateId,\n website: businessData.website,\n status: true // always true for first time\n }\n }\n\n const responseBusiness = await businessService.createBusiness(businessPayload)\n\n accountBusinessId = Number(responseBusiness?.business_id) ?? 0\n\n }\n\n // update account for additional info\n const createUpdatedata = getCreateUpdatePayload(accountBusinessId, accountUserId)\n\n if (!createUpdatedata) {\n throw new Error(`Invalid create update account payload: ${JSON.stringify(_data)}`);\n }\n\n await accountModel.update({ id: Number(newAccountId), data: createUpdatedata })\n\n return await getAccount({ id: Number(newAccountId), datatypes: [] })\n }\n\n const updateAccount = async ({ accountId, data }: AccountUpdateProps) => {\n\n // only operator token/access key allowed to access\n if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n // check account code cannot duplicated\n const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode, accountId)\n\n if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n const _data = getUpdatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid update account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.update({ where: { [`${ModelAccountFields.account_id}`]: accountId }, data: _data })\n\n return await getAccount({ id: accountId, datatypes: [] })\n }\n\n const getAccount = async ({ id, datatypes = [] }: AccountGetProps) => {\n\n // only operator token/access key allowed to access\n if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let { data } = await listAccounts({\n limit: 1,\n offset: 0,\n filters: [{ field: \"account_id\", operator: \"=\", value: id }],\n sortfield: \"account_id\",\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n };\n\n const listAccounts = async ({\n limit,\n offset,\n filters,\n sortfield,\n sortorder,\n datatypes = []\n }: AccountListProps) => {\n\n // only operator token/access key allowed to access\n if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let data = []\n\n let sqlSelect = [\n `COUNT(acc.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, businessSqlSelect),\n buildSqlSelect(``, ownerSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"acc\", \"businesses\", \"bus\", [\"acc.business_id = bus.business_id\", \"bus.isdelete = false\", \"bus.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"usrowner\", [\"acc.owner_user_id = usrowner.user_id\", \"usrowner.isdelete = false\", \"usrowner.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"creator\", [\"acc.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"updater\", [\"acc.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(businessSqlSelect),\n ...Object.keys(ownerSqlSelectItem),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = { ...mainSqlSelect, ...businessSqlSelect, ...ownerSqlSelectItem, ...defaultSqlSelect }\n\n let sqlWhere = [\n `acc.isdelete = false`,\n `acc.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"accounts\",\n mainAlias: \"acc\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId: Boolean(rest.isOperator === true)\n })\n\n data = await accountModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n const removeAccounts = async ({ accountIds }: AccountRemoveProps) => {\n\n // only operator token/access key allowed to access\n if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n if (!accountIds.length) throwError('accountIds is required');\n\n let accountResponse = await accountModel.remove({ where: { [`${ModelAccountFields.account_id}`]: { in: accountIds } } });\n\n let response: any[] = []\n\n await Promise.all(\n accountResponse.map(async (item) => {\n const accountId = item?.account_id ?? 0;\n const ownerUserId = item?.owner_user_id ?? 0;\n const businessId = item?.business_id ?? 0;\n\n const businessService = BusinessService({ ...rest, accountId: Number(accountId) })\n const userService = UserService({ ...rest, accountId: Number(accountId), userType: \"administrator\" })\n\n let responseBusiness: any[] = []\n let responseUser: any[] = []\n\n // remove business\n if (businessId) {\n responseBusiness = await businessService.removeBusinesses({ businessIds: [BigInt(businessId)] });\n }\n\n // remove user administrator\n if (ownerUserId) {\n responseUser = await userService.removeUsers({ ids: [BigInt(ownerUserId)] });\n }\n\n response.push({\n ...item,\n business: responseBusiness.length > 0 ? responseBusiness[0] : {},\n user: responseUser.length > 0 ? responseUser[0] : {}\n })\n\n })\n );\n\n return response\n\n };\n\n // const getDataTypes = () => {\n // return Object.values(accountDataTypes);\n // }\n\n return {\n getAccount,\n createAccount,\n updateAccount,\n removeAccounts,\n listAccounts\n }\n\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"AccountService.js","sourceRoot":"","sources":["../../../src/services/account/AccountService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport {\n ModelUserFields,\n ModelAccountFields,\n AccountModel,\n ModelUserBranchFields,\n ModelBusinessFields,\n} from \"@/models\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps, protectServiceOnlyOperator } from \"@/utils\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport {\n BusinessService,\n BusinessCreateProps,\n UserService,\n UserCreateProps,\n AccessKeyService\n} from \"@/services\";\n\nexport type AccountServiceProps = DefaultServiceProps & {};\n\nexport type AccountGetProps = QueryGet & {\n id: number,\n // datatypes: AccountDataType[]\n};\n\nexport type AccountListProps = QueryList & {\n // datatypes: AccountDataType[]\n};\n\nexport type AccountRemoveProps = {\n accountIds: BigInt[]\n};\n\nexport type Account = {\n accountId: number,\n name: string,\n accountCode: string,\n businessId: number,\n ownerUserId: number,\n status: boolean\n}\n\nexport type AccountCreateProps = {\n data: Omit<Account, \"accountId\" | \"businessId\" | \"ownerUserId\"> & {\n administrator: Omit<UserCreateProps[\"data\"][\"user\"], \"status\">,\n business: Omit<BusinessCreateProps[\"data\"], \"status\">\n }\n}\n\nexport type AccountUpdateProps = {\n accountId: number,\n data: Omit<Account, \"accountId\" | \"ownerUserId\">\n}\n\nconst getCreatePayload = (data: AccountCreateProps[\"data\"]) => {\n\n return {\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.status}`]: Boolean(data.status),\n [`${ModelAccountFields.account_code}`]: data.accountCode\n }\n\n}\n\nconst getCreateUpdatePayload = (businessId: number, ownerUserId: number) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: data.accountId,\n [`${ModelAccountFields.business_id}`]: businessId,\n [`${ModelAccountFields.owner_user_id}`]: ownerUserId,\n }\n\n}\n\nconst getUpdatePayload = (data: AccountUpdateProps[\"data\"]) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: accoundId,\n [`${ModelAccountFields.business_id}`]: data.businessId,\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.account_code}`]: data.accountCode,\n [`${ModelAccountFields.status}`]: Boolean(data.status)\n }\n\n}\n\nlet mainSqlSelect = {\n [`acc.${ModelAccountFields.account_id}`]: \"account_id\",\n [`acc.${ModelAccountFields.business_id}`]: \"business_id\",\n [`acc.${ModelAccountFields.name}`]: \"name\",\n [`acc.${ModelAccountFields.account_code}`]: \"account_code\",\n [`acc.${ModelAccountFields.status}`]: \"account_status\",\n}\n\nlet businessSqlSelect = {\n [`bus.${ModelBusinessFields.address_1}`]: \"address_1\",\n [`bus.${ModelBusinessFields.address_2}`]: \"address_2\",\n [`bus.${ModelBusinessFields.company_contact}`]: \"company_contact\",\n [`bus.${ModelBusinessFields.company_name}`]: \"company_name\",\n [`bus.${ModelBusinessFields.email}`]: \"email\",\n [`bus.${ModelBusinessFields.area_id}`]: \"area_id\",\n [`bus.${ModelBusinessFields.state_id}`]: \"state_id\",\n [`bus.${ModelBusinessFields.country_id}`]: \"country_id\",\n [`bus.${ModelBusinessFields.postcode}`]: \"postcode\",\n [`bus.${ModelBusinessFields.registration_number}`]: \"registration_number\",\n [`bus.${ModelBusinessFields.status}`]: \"business_status\",\n [`bus.${ModelBusinessFields.website}`]: \"website\",\n}\n\nlet ownerSqlSelectItem = {\n [`usrowner.${ModelUserFields.user_id}`]: \"user_id\",\n [`usrowner.${ModelUserFields.login_username}`]: \"login_username\",\n [`usrowner.${ModelUserFields.user_type}`]: \"user_type\",\n [`usrowner.${ModelUserFields.firstname}`]: \"firstname\",\n [`usrowner.${ModelUserFields.lastname}`]: \"lastname\",\n [`usrowner.${ModelUserFields.contact}`]: \"contact\",\n [`usrowner.${ModelUserFields.email}`]: \"email\",\n [`usrowner.${ModelUserFields.address}`]: \"address\",\n [`usrowner.${ModelUserFields.status}`]: \"status\",\n}\n\nlet ownerSqlSelect = {\n [`COALESCE(\n JSONB_BUILD_OBJECT(\n ${Object.entries(ownerSqlSelectItem).map(([key, alias]) => `'${alias}', ${key}`).join(\", \")}\n ),\n '{}'::jsonb\n )`]: \"owner\"\n}\n\nlet defaultSqlSelect = {\n [`acc.${ModelAccountFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`acc.${ModelAccountFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`acc.${ModelAccountFields.isdelete}`]: \"isdelete\",\n [`acc.${ModelAccountFields.istrash}`]: \"istrash\",\n [`acc.${ModelAccountFields.accountid}`]: \"accountid\",\n}\n\nexport const AccountService = (props: AccountServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const accountModel = AccountModel({ ...rest })\n const accessKeyService = AccessKeyService({ ...rest, accessKeyUserType: \"administrator\" })\n\n const checkAccoutCodeIsUsed = async (\n accountCode: Account[\"accountCode\"],\n selfAccountId?: Account[\"accountId\"]\n ) => {\n\n const { data } = await listAccounts({\n limit: 1,\n offset: 0,\n sortfield: `${ModelAccountFields.account_id}`,\n sortorder: \"ASC\",\n filters: [{\n field: `${ModelAccountFields.account_code}`,\n operator: \"=\",\n value: accountCode\n }],\n datatypes: []\n })\n\n if (data.length <= 0) return false\n\n if (selfAccountId) {\n\n if (Number(data[0].account_id) === Number(selfAccountId)) {\n return false\n } else {\n return true\n }\n\n } else {\n\n return true\n }\n\n }\n\n const validateAccountCodeIsUsed = async (accountCode: string) => {\n\n const accountCodeIsUsed = await checkAccoutCodeIsUsed(accountCode)\n\n if (accountCodeIsUsed === true) {\n throwError(`Account code has been used: ${accountCode}`)\n }\n\n }\n\n const createAccount = async ({ data }: AccountCreateProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(data.accountCode)\n\n // const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode)\n\n // if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n // have to check the administrator allowed to create\n // if failed throw error\n\n // create account\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.create({ data: _data })\n\n const newAccountId = response?.account_id ?? 0\n\n const businessService = BusinessService({ ...rest, accountId: Number(newAccountId) })\n const userService = UserService({ ...rest, accountId: Number(newAccountId), userType: \"administrator\" })\n\n let accountBusinessId = 0\n let accountUserId = 0\n let accountId = 0\n\n // create user(administrator)\n if (data?.administrator) {\n\n let userData = data?.administrator ?? {}\n\n let userPayload: UserCreateProps = {\n userType: \"administrator\",\n data: {\n user: {\n address: userData.address,\n contact: userData.contact,\n email: userData.email,\n firstname: userData.firstname,\n lastname: userData.lastname,\n loginPassword: userData.loginPassword,\n loginUsername: userData.loginUsername,\n status: true // always true for first time\n },\n administrator: {\n isOwner: true // first create must be owner\n },\n props: {\n locationIds: []\n }\n }\n }\n\n const responseOwner = await userService.createUser(userPayload)\n\n accountUserId = Number(responseOwner?.user_id) ?? 0\n accountId = Number(responseOwner?.accountid) ?? 0\n\n }\n\n // create default administrator access key\n await accessKeyService.createAccessKey({\n data: {\n userId: accountUserId,\n isDefault: true,\n overrideAccountId: accountId\n }\n })\n\n // create business\n if (data?.business) {\n\n let businessData = data?.business ?? {}\n\n let businessPayload: BusinessCreateProps = {\n data: {\n address1: businessData.address1,\n address2: businessData.address2,\n areaId: businessData.areaId,\n companyContact: businessData.companyContact,\n companyName: businessData.companyName,\n countryId: businessData.countryId,\n email: businessData.email,\n postcode: businessData.postcode,\n registrationNumber: businessData.registrationNumber,\n stateId: businessData.stateId,\n website: businessData.website,\n status: true // always true for first time\n }\n }\n\n const responseBusiness = await businessService.createBusiness(businessPayload)\n\n accountBusinessId = Number(responseBusiness?.business_id) ?? 0\n\n }\n\n // update account for additional info\n const createUpdatedata = getCreateUpdatePayload(accountBusinessId, accountUserId)\n\n if (!createUpdatedata) {\n throw new Error(`Invalid create update account payload: ${JSON.stringify(_data)}`);\n }\n\n await accountModel.update({ id: Number(newAccountId), data: createUpdatedata })\n\n return await getAccount({ id: Number(newAccountId), datatypes: [] })\n }\n\n const updateAccount = async ({ accountId, data }: AccountUpdateProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(data.accountCode)\n\n // const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode, accountId)\n\n // if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n const _data = getUpdatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid update account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.update({ where: { [`${ModelAccountFields.account_id}`]: accountId }, data: _data })\n\n return await getAccount({ id: accountId, datatypes: [] })\n }\n\n const getAccount = async ({ id, datatypes = [] }: AccountGetProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let { data } = await listAccounts({\n limit: 1,\n offset: 0,\n filters: [{ field: \"account_id\", operator: \"=\", value: id }],\n sortfield: \"account_id\",\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n };\n\n const listAccounts = async ({\n limit,\n offset,\n filters,\n sortfield,\n sortorder,\n datatypes = []\n }: AccountListProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let data = []\n\n let sqlSelect = [\n `COUNT(acc.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, businessSqlSelect),\n buildSqlSelect(``, ownerSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"acc\", \"businesses\", \"bus\", [\"acc.business_id = bus.business_id\", \"bus.isdelete = false\", \"bus.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"usrowner\", [\"acc.owner_user_id = usrowner.user_id\", \"usrowner.isdelete = false\", \"usrowner.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"creator\", [\"acc.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"updater\", [\"acc.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(businessSqlSelect),\n ...Object.keys(ownerSqlSelectItem),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = { ...mainSqlSelect, ...businessSqlSelect, ...ownerSqlSelectItem, ...defaultSqlSelect }\n\n let sqlWhere = [\n `acc.isdelete = false`,\n `acc.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"accounts\",\n mainAlias: \"acc\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId: Boolean(rest.isOperator === true)\n })\n\n data = await accountModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n const removeAccounts = async ({ accountIds }: AccountRemoveProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n if (!accountIds.length) throwError('accountIds is required');\n\n let accountResponse = await accountModel.remove({ where: { [`${ModelAccountFields.account_id}`]: { in: accountIds } } });\n\n let response: any[] = []\n\n await Promise.all(\n accountResponse.map(async (item) => {\n const accountId = item?.account_id ?? 0;\n const ownerUserId = item?.owner_user_id ?? 0;\n const businessId = item?.business_id ?? 0;\n\n const businessService = BusinessService({ ...rest, accountId: Number(accountId) })\n const userService = UserService({ ...rest, accountId: Number(accountId), userType: \"administrator\" })\n\n let responseBusiness: any[] = []\n let responseUser: any[] = []\n\n // remove business\n if (businessId) {\n responseBusiness = await businessService.removeBusinesses({ businessIds: [BigInt(businessId)] });\n }\n\n // remove user administrator\n if (ownerUserId) {\n responseUser = await userService.removeUsers({ ids: [BigInt(ownerUserId)] });\n }\n\n response.push({\n ...item,\n business: responseBusiness.length > 0 ? responseBusiness[0] : {},\n user: responseUser.length > 0 ? responseUser[0] : {}\n })\n\n })\n );\n\n return response\n\n };\n\n // const getDataTypes = () => {\n // return Object.values(accountDataTypes);\n // }\n\n return {\n getAccount,\n createAccount,\n updateAccount,\n removeAccounts,\n listAccounts\n // validateAccountCodeIsUsed: protectServiceOnlyOperator(validateAccountCodeIsUsed, rest, \"validate account code is used\"),\n // getAccount: protectServiceOnlyOperator(getAccount, rest, \"get account\"),\n // createAccount: protectServiceOnlyOperator(createAccount, rest, \"create account\"),\n // updateAccount: protectServiceOnlyOperator(updateAccount, rest, \"update account\"),\n // removeAccounts: protectServiceOnlyOperator(removeAccounts, rest, \"remove accounts\"),\n // listAccounts: protectServiceOnlyOperator(listAccounts, rest, \"list accounts\"),\n }\n\n}\n\n"]}
|
|
@@ -72,6 +72,9 @@ const getFileCategoryNameByMimeType = (mimeType) => {
|
|
|
72
72
|
return "video";
|
|
73
73
|
if (lower.startsWith("audio/"))
|
|
74
74
|
return "audio";
|
|
75
|
+
// Edge-case audio MIME types
|
|
76
|
+
if (["application/ogg"].includes(lower))
|
|
77
|
+
return "audio";
|
|
75
78
|
if (lower.startsWith("text/") ||
|
|
76
79
|
[
|
|
77
80
|
"application/pdf",
|
|
@@ -247,9 +250,9 @@ const FileService = (props) => {
|
|
|
247
250
|
batchCode,
|
|
248
251
|
mimeType,
|
|
249
252
|
bufferFilebuffer: bufferToUpload,
|
|
250
|
-
bufferFileThumbnail: bufferThumbnail
|
|
253
|
+
bufferFileThumbnail: bufferThumbnail?.buffer,
|
|
251
254
|
outputSizeBytes,
|
|
252
|
-
fileCompressFormat: JSON.parse(fileCompressFormat),
|
|
255
|
+
fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : "",
|
|
253
256
|
imageCompressionOptions,
|
|
254
257
|
videoCompressionOptions
|
|
255
258
|
});
|
|
@@ -314,11 +317,11 @@ const FileService = (props) => {
|
|
|
314
317
|
referLabel2
|
|
315
318
|
},
|
|
316
319
|
};
|
|
317
|
-
let
|
|
320
|
+
let responseFile = await createFile(payload);
|
|
318
321
|
// Call the consumer hook, if registered
|
|
319
322
|
if (features_1.FileStorageHook.onSuccessUpload) {
|
|
320
323
|
await features_1.FileStorageHook.onSuccessUpload({
|
|
321
|
-
fileId:
|
|
324
|
+
fileId: Number(responseFile?.file_id),
|
|
322
325
|
fileThumbnailUrl: thumbnailUrl,
|
|
323
326
|
fileAssetUrl: assetUrl,
|
|
324
327
|
fileDurationSeconds,
|
|
@@ -342,12 +345,12 @@ const FileService = (props) => {
|
|
|
342
345
|
bufferFilebuffer: bufferToUpload,
|
|
343
346
|
bufferFileThumbnail: bufferThumbnail.buffer,
|
|
344
347
|
outputSizeBytes,
|
|
345
|
-
fileCompressFormat: JSON.parse(fileCompressFormat),
|
|
348
|
+
fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : "",
|
|
346
349
|
imageCompressionOptions,
|
|
347
350
|
videoCompressionOptions
|
|
348
351
|
});
|
|
349
352
|
}
|
|
350
|
-
allResponses.push(
|
|
353
|
+
allResponses.push(responseFile);
|
|
351
354
|
}
|
|
352
355
|
return allResponses;
|
|
353
356
|
};
|