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.
@@ -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 response = await fileService.uploadFiles(payload);
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: "https://localhost:8080/public/uploads",
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;aACd;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,uCAAuC;gBAChD,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 ],\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: \"https://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}"]}
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: Buffer;
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: 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
+ {"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}"]}
@@ -34,7 +34,7 @@ const initialPrisma = (req, res, next) => {
34
34
  // } else {
35
35
  // req.auth.prisma = prisma;
36
36
  // }
37
- console.log('req', req);
37
+ // console.log('req', req)
38
38
  next();
39
39
  };
40
40
  exports.initialPrisma = initialPrisma;
@@ -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,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAEvB,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};"]}
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
- const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode);
117
- if (accountCodeIsUsed === true)
118
- (0, utils_1.throwError)(`Account code has been used: ${data.accountCode}`);
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
- const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode, accountId);
205
- if (accountCodeIsUsed === true)
206
- (0, utils_1.throwError)(`Account code has been used: ${data.accountCode}`);
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.buffer,
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 newFileId = await createFile(payload);
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: newFileId,
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(newFileId);
353
+ allResponses.push(responseFile);
351
354
  }
352
355
  return allResponses;
353
356
  };