storemw-core-api 1.0.38 → 1.0.40

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.
@@ -5,6 +5,14 @@ export declare const config: {
5
5
  FILE_STORAGE_PROVIDER_NAME: string;
6
6
  FILE_STORAGE_LOCAL_BASE_PATH: string;
7
7
  FILE_STORAGE_LOCAL_BASE_URL: string;
8
+ FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF: string;
9
+ FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_YEAR_MONTH: string;
10
+ FILE_STORAGE_GCLOUD_BUCKET_NAME: string;
11
+ FILE_STORAGE_GCLOUD_BASE_PATH: string;
12
+ FILE_STORAGE_GCLOUD_CREDENTIAL_PATH: string;
13
+ FILE_STORAGE_GCLOUD_BASE_URL: string;
14
+ FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF: string;
15
+ FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH: string;
8
16
  FILE_UPLOAD_MAX_SIZE: string;
9
17
  FILE_UPLOAD_ALLOWED_TYPES: string;
10
18
  FILE_UPLOAD_IMAGE_MAX_WIDTH: string;
@@ -21,6 +21,14 @@ exports.config = {
21
21
  FILE_STORAGE_PROVIDER_NAME: process.env.FILE_STORAGE_PROVIDER_NAME || "",
22
22
  FILE_STORAGE_LOCAL_BASE_PATH: process.env.FILE_STORAGE_LOCAL_BASE_PATH || "",
23
23
  FILE_STORAGE_LOCAL_BASE_URL: process.env.FILE_STORAGE_LOCAL_BASE_URL || "",
24
+ FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF: process.env.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF || "",
25
+ FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_YEAR_MONTH: process.env.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF || "",
26
+ FILE_STORAGE_GCLOUD_BUCKET_NAME: process.env.FILE_STORAGE_GCLOUD_BUCKET_NAME || "",
27
+ FILE_STORAGE_GCLOUD_BASE_PATH: process.env.FILE_STORAGE_GCLOUD_BASE_PATH || "",
28
+ FILE_STORAGE_GCLOUD_CREDENTIAL_PATH: process.env.FILE_STORAGE_GCLOUD_CREDENTIAL_PATH || "",
29
+ FILE_STORAGE_GCLOUD_BASE_URL: process.env.FILE_STORAGE_GCLOUD_BASE_URL || "",
30
+ FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF: process.env.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF || "",
31
+ FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH: process.env.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH || "",
24
32
  FILE_UPLOAD_MAX_SIZE: process.env.FILE_UPLOAD_MAX_SIZE || "",
25
33
  FILE_UPLOAD_ALLOWED_TYPES: process.env.FILE_UPLOAD_ALLOWED_TYPES || "",
26
34
  FILE_UPLOAD_IMAGE_MAX_WIDTH: process.env.FILE_UPLOAD_IMAGE_MAX_WIDTH || "",
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/configs/config.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,gDAAwB;AAExB,uDAAuD;AACvD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;AAElD,mCAAmC;AACnC,qEAAqE;AACrE,kBAAkB;AAElB,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;AAE/D,0DAA0D;AAC1D,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAEhD,QAAA,MAAM,GAAG;IAClB,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI;IAC9B,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE;IAElD,0BAA0B,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,EAAE;IACxE,4BAA4B,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,EAAE;IAC5E,2BAA2B,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE;IAE1E,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE;IAC5D,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE;IACtE,2BAA2B,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE;IAC1E,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE;IACtE,gEAAgE;IAChE,uDAAuD;CAE1D,CAAC","sourcesContent":["import dotenv from \"dotenv\";\nimport path from \"path\";\n\n// Determine the environment (default to \"development\")\nconst env = process.env.NODE_ENV || \"development\";\n\n// Load the corresponding .env file\n// dotenv.config({ path: path.resolve(__dirname, `../${env}.env`) });\n// dotenv.config()\n\nconsole.log('in core-api/process.cwd()', process.cwd(), '.env')\n\n// Always load from the project root where the app started\ndotenv.config({ path: path.resolve(process.cwd(), `.env`) });\n\nexport const config = {\n NODE_ENV: env,\n PORT: process.env.PORT || 8080,\n AUTH_SECRET_KEY: process.env.AUTH_SECRET_KEY || \"\",\n\n FILE_STORAGE_PROVIDER_NAME: process.env.FILE_STORAGE_PROVIDER_NAME || \"\",\n FILE_STORAGE_LOCAL_BASE_PATH: process.env.FILE_STORAGE_LOCAL_BASE_PATH || \"\",\n FILE_STORAGE_LOCAL_BASE_URL: process.env.FILE_STORAGE_LOCAL_BASE_URL || \"\",\n\n FILE_UPLOAD_MAX_SIZE: process.env.FILE_UPLOAD_MAX_SIZE || \"\",\n FILE_UPLOAD_ALLOWED_TYPES: process.env.FILE_UPLOAD_ALLOWED_TYPES || \"\",\n FILE_UPLOAD_IMAGE_MAX_WIDTH: process.env.FILE_UPLOAD_IMAGE_MAX_WIDTH || \"\",\n FILE_UPLOAD_IMAGE_QUALITY: process.env.FILE_UPLOAD_IMAGE_QUALITY || \"\",\n // SUPABASE_PROJECT_URL: process.env.SUPABASE_PROJECT_URL || \"\",\n // SUPABASE_API_KEY: process.env.SUPABASE_API_KEY || \"\"\n\n};"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/configs/config.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,gDAAwB;AAExB,uDAAuD;AACvD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;AAElD,mCAAmC;AACnC,qEAAqE;AACrE,kBAAkB;AAElB,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;AAE/D,0DAA0D;AAC1D,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAEhD,QAAA,MAAM,GAAG;IAClB,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI;IAC9B,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE;IAElD,0BAA0B,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,EAAE;IACxE,4BAA4B,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,EAAE;IAC5E,2BAA2B,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE;IAC1E,6CAA6C,EAAE,OAAO,CAAC,GAAG,CAAC,6CAA6C,IAAI,EAAE;IAC9G,6CAA6C,EAAE,OAAO,CAAC,GAAG,CAAC,6CAA6C,IAAI,EAAE;IAE9G,+BAA+B,EAAE,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,EAAE;IAClF,6BAA6B,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,EAAE;IAC9E,mCAAmC,EAAE,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,EAAE;IAC1F,4BAA4B,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,EAAE;IAC5E,8CAA8C,EAAE,OAAO,CAAC,GAAG,CAAC,8CAA8C,IAAI,EAAE;IAChH,8CAA8C,EAAE,OAAO,CAAC,GAAG,CAAC,8CAA8C,IAAI,EAAE;IAEhH,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE;IAC5D,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE;IACtE,2BAA2B,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE;IAC1E,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE;IACtE,gEAAgE;IAChE,uDAAuD;CAE1D,CAAC","sourcesContent":["import dotenv from \"dotenv\";\nimport path from \"path\";\n\n// Determine the environment (default to \"development\")\nconst env = process.env.NODE_ENV || \"development\";\n\n// Load the corresponding .env file\n// dotenv.config({ path: path.resolve(__dirname, `../${env}.env`) });\n// dotenv.config()\n\nconsole.log('in core-api/process.cwd()', process.cwd(), '.env')\n\n// Always load from the project root where the app started\ndotenv.config({ path: path.resolve(process.cwd(), `.env`) });\n\nexport const config = {\n NODE_ENV: env,\n PORT: process.env.PORT || 8080,\n AUTH_SECRET_KEY: process.env.AUTH_SECRET_KEY || \"\",\n\n FILE_STORAGE_PROVIDER_NAME: process.env.FILE_STORAGE_PROVIDER_NAME || \"\",\n FILE_STORAGE_LOCAL_BASE_PATH: process.env.FILE_STORAGE_LOCAL_BASE_PATH || \"\",\n FILE_STORAGE_LOCAL_BASE_URL: process.env.FILE_STORAGE_LOCAL_BASE_URL || \"\",\n FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF: process.env.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF || \"\",\n FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_YEAR_MONTH: process.env.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF || \"\",\n\n FILE_STORAGE_GCLOUD_BUCKET_NAME: process.env.FILE_STORAGE_GCLOUD_BUCKET_NAME || \"\",\n FILE_STORAGE_GCLOUD_BASE_PATH: process.env.FILE_STORAGE_GCLOUD_BASE_PATH || \"\",\n FILE_STORAGE_GCLOUD_CREDENTIAL_PATH: process.env.FILE_STORAGE_GCLOUD_CREDENTIAL_PATH || \"\",\n FILE_STORAGE_GCLOUD_BASE_URL: process.env.FILE_STORAGE_GCLOUD_BASE_URL || \"\",\n FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF: process.env.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF || \"\",\n FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH: process.env.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH || \"\",\n\n FILE_UPLOAD_MAX_SIZE: process.env.FILE_UPLOAD_MAX_SIZE || \"\",\n FILE_UPLOAD_ALLOWED_TYPES: process.env.FILE_UPLOAD_ALLOWED_TYPES || \"\",\n FILE_UPLOAD_IMAGE_MAX_WIDTH: process.env.FILE_UPLOAD_IMAGE_MAX_WIDTH || \"\",\n FILE_UPLOAD_IMAGE_QUALITY: process.env.FILE_UPLOAD_IMAGE_QUALITY || \"\",\n // SUPABASE_PROJECT_URL: process.env.SUPABASE_PROJECT_URL || \"\",\n // SUPABASE_API_KEY: process.env.SUPABASE_API_KEY || \"\"\n\n};"]}
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.deleteFiles = exports.listFiles = exports.updateFile = exports.uploadFiles = exports.getFile = void 0;
7
+ const path_1 = __importDefault(require("path"));
4
8
  const utils_1 = require("../../utils");
5
9
  const services_1 = require("../../services");
6
10
  const payload_1 = require("../../schema/payload");
@@ -38,6 +42,8 @@ const uploadFiles = async (req, res, next) => {
38
42
  tagName: reqBody.tag_name,
39
43
  label: reqBody.label,
40
44
  refId: Number(reqBody.ref_id),
45
+ refId2: Number(reqBody.ref_id_2),
46
+ ...(reqBody?.remark ? { remark: reqBody.remark } : {}),
41
47
  files: Array.isArray(reqFiles) ? reqFiles.map((file) => ({
42
48
  originalname: file.originalname,
43
49
  mimetype: file.mimetype,
@@ -45,25 +51,26 @@ const uploadFiles = async (req, res, next) => {
45
51
  buffer: file.buffer,
46
52
  })) : [],
47
53
  });
48
- // hardcode here
49
- // local storage
50
54
  const storageProviderName = configs_1.config.FILE_STORAGE_PROVIDER_NAME;
51
- const storageProviderOptions = {
52
- basePath: `${configs_1.config.FILE_STORAGE_LOCAL_BASE_PATH}`,
53
- publicBaseUrl: `${configs_1.config.FILE_STORAGE_LOCAL_BASE_URL}`,
54
- skipFoldernameByModuleRef: false,
55
- skipFoldernameByDate: false
56
- };
57
- // google cloud storage
58
- // const storageProviderName = "gcloud"
59
- // const storageProviderOptions = {
60
- // bucketName: `chinlai-erp-delivery`,
61
- // basePath: `today`,
62
- // credentials: `${path.resolve(process.cwd(), "config/chinlai-erp-api-253ac2637a8e.json")}`,
63
- // publicBaseUrl: `https://storage.googleapis.com/${process.env.GCLOUD_BUCKET}`,
64
- // skipFoldernameByModuleRef: true,
65
- // skipFoldernameByDate: true
66
- // }
55
+ let storageProviderOptions = {};
56
+ if (storageProviderName === "local") {
57
+ storageProviderOptions = {
58
+ basePath: `${configs_1.config.FILE_STORAGE_LOCAL_BASE_PATH}`,
59
+ publicBaseUrl: `${configs_1.config.FILE_STORAGE_LOCAL_BASE_URL}`,
60
+ skipFoldernameByModuleRef: Boolean(configs_1.config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF),
61
+ skipFoldernameByDate: Boolean(configs_1.config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_YEAR_MONTH)
62
+ };
63
+ }
64
+ if (storageProviderName === "gcloud") {
65
+ storageProviderOptions = {
66
+ bucketName: `${configs_1.config.FILE_STORAGE_GCLOUD_BUCKET_NAME}`,
67
+ basePath: `${configs_1.config.FILE_STORAGE_GCLOUD_BASE_PATH}`,
68
+ credentials: `${path_1.default.resolve(process.cwd(), `${configs_1.config.FILE_STORAGE_GCLOUD_CREDENTIAL_PATH}`)}`,
69
+ publicBaseUrl: `${configs_1.config.FILE_STORAGE_GCLOUD_BASE_URL}`,
70
+ skipFoldernameByModuleRef: Boolean(configs_1.config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF),
71
+ skipFoldernameByDate: Boolean(configs_1.config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH)
72
+ };
73
+ }
67
74
  const imageCompressionOptions = configs_1.config.FILE_UPLOAD_IMAGE_MAX_WIDTH && configs_1.config.FILE_UPLOAD_IMAGE_QUALITY
68
75
  ? {
69
76
  maxWidth: Number(configs_1.config.FILE_UPLOAD_IMAGE_MAX_WIDTH),
@@ -80,6 +87,9 @@ const uploadFiles = async (req, res, next) => {
80
87
  label: request.label,
81
88
  tagName: request.tagName ?? "",
82
89
  refId: request.refId ?? 0,
90
+ refId2: request.refId2 ?? 0,
91
+ remark: request.remark ?? "",
92
+ // foldernameDate: "2025-01-01", // empty to use current datetime
83
93
  storageProviderName,
84
94
  storageProviderOptions,
85
95
  ...(imageCompressionOptions ? { imageCompressionOptions } : {}),
@@ -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\nimport path from \"path\";\n\nimport { getDefaultServiceProps, sendSuccess, sendError, HTTP_STATUS } from \"@/utils\"\n\nimport { FileService, FileUploadProps, FileImageCompressionOptions } from \"@/services\"\nimport {\n schemaFileDeletePayload,\n schemaFileUploadPayload,\n} from \"@/schema/payload\";\n\nimport { QueryList } from \"@/schema/middleware/route\";\n\nimport { config } from \"@/configs\";\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 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 // hardcode here\n // local storage\n const storageProviderName = config.FILE_STORAGE_PROVIDER_NAME as FileUploadProps[\"storageProviderName\"]\n const storageProviderOptions = {\n basePath: `${config.FILE_STORAGE_LOCAL_BASE_PATH}`,\n publicBaseUrl: `${config.FILE_STORAGE_LOCAL_BASE_URL}`,\n skipFoldernameByModuleRef: false,\n skipFoldernameByDate: false\n }\n\n // google cloud storage\n // const storageProviderName = \"gcloud\"\n // const storageProviderOptions = {\n // bucketName: `chinlai-erp-delivery`,\n // basePath: `today`,\n // credentials: `${path.resolve(process.cwd(), \"config/chinlai-erp-api-253ac2637a8e.json\")}`,\n // publicBaseUrl: `https://storage.googleapis.com/${process.env.GCLOUD_BUCKET}`,\n // skipFoldernameByModuleRef: true,\n // skipFoldernameByDate: true\n // }\n\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 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 storageProviderName,\n storageProviderOptions,\n ...(imageCompressionOptions ? { imageCompressionOptions } : {}),\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 */\nexport 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 payload = {\n fileIds: request.payload.ids.map(i => BigInt(i))\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\nimport path from \"path\";\n\nimport { getDefaultServiceProps, sendSuccess, sendError, HTTP_STATUS } from \"@/utils\"\n\nimport { FileService, FileUploadProps, FileImageCompressionOptions } from \"@/services\"\nimport {\n schemaFileDeletePayload,\n schemaFileUploadPayload,\n} from \"@/schema/payload\";\n\nimport { QueryList } from \"@/schema/middleware/route\";\n\nimport { config } from \"@/configs\";\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?.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 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 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 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 remark: request.remark ?? \"\",\n // foldernameDate: \"2025-01-01\", // empty to use current datetime\n storageProviderName,\n storageProviderOptions,\n ...(imageCompressionOptions ? { imageCompressionOptions } : {}),\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 */\nexport 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 payload = {\n fileIds: request.payload.ids.map(i => BigInt(i))\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"]}
@@ -103,6 +103,12 @@ const replaceInjectionFields = async (req, res, next) => {
103
103
  uom: "uomId",
104
104
  });
105
105
  }
106
+ if (requestInjectionFieldType === "document") {
107
+ groupInjectionFields = (0, utils_2.groupPayloadInjectionFields)(request.payload.injection_fields, {}, {
108
+ document: "documentId",
109
+ documentItem: "documentItemId"
110
+ });
111
+ }
106
112
  const responseAll = await Promise.all(groupInjectionFields.map(async (i) => {
107
113
  const payload = {
108
114
  injectionFieldType: requestInjectionFieldType,
@@ -1 +1 @@
1
- {"version":3,"file":"injectionFieldController.js","sourceRoot":"","sources":["../../../src/controllers/injection_field/injectionFieldController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request, Response, NextFunction } from \"express\";\n\nimport { getDefaultServiceProps, sendSuccess, sendError, HTTP_STATUS } from \"@/utils\"\nimport { groupPayloadInjectionFields } from '@/utils'\n\nimport { InjectionFieldService, InjectionFieldListProps, InjectionFieldServiceProps, InjectionFieldCreateProps, InjectionFieldReplaceProps } from \"@/services\"\nimport { schemaInjectionFieldReplacePayload, schemaInjectionFieldCreatePayload, schemaInjectionFieldDeletePayload } from \"@/schema/payload\";\nimport { QueryList } from \"@/schema/middleware/route\";\n\nconst getRootName = (requestInjectionFieldType: InjectionFieldServiceProps[\"injectionFieldType\"], toSingular: boolean) => {\n\n let rootName: any = ``\n\n switch (requestInjectionFieldType) {\n case \"user\": rootName = toSingular ? \"injection_field\" : \"injection_fields\"; break;\n case \"item\": rootName = toSingular ? \"injection_field\" : \"injection_fields\"; break;\n case \"document\": rootName = toSingular ? \"injection_field\" : \"injection_fields\"; break;\n case \"repository\": rootName = toSingular ? \"injection_field\" : \"injection_fields\"; break;\n case \"logistic\": rootName = toSingular ? \"injection_field\" : \"injection_fields\"; break;\n }\n\n return rootName\n}\n\n/** injection_field : create injection field */\nexport const createInjectionField = async (req: Request, res: Response, next: NextFunction): Promise<void> => {\n try {\n\n // const requestUserType = req.body.scope.target as InjectionFieldServiceProps[\"injectionFieldType\"]\n\n const injectionFieldService = InjectionFieldService({\n ...getDefaultServiceProps(req),\n injectionFieldType: \"user\"\n })\n\n let response: any = {}\n\n let reqScope = req.body.scope\n let reqPayload = req.body.payload\n\n let request = schemaInjectionFieldCreatePayload.parse({\n scope: {\n target: reqScope.target,\n action: reqScope.action\n },\n payload: {\n injection_fields: reqPayload?.injection_fields.map((i: any) => ({\n field_module: `${i.field_module}`,\n field_ref: `${i.field_ref}`,\n field_key: `${i.field_key}`,\n field_type: `${i.field_type}`,\n }))\n }\n })\n\n response = await Promise.all(\n request.payload.injection_fields.map(i => {\n const payload: InjectionFieldCreateProps = {\n data: {\n ...i,\n is_multiple: false,\n merge_multiple_inline: false,\n multiple_count: false,\n },\n };\n\n return injectionFieldService.createInjectionField(payload);\n })\n );\n\n sendSuccess(res, response, `Injection Fields created successfully`, `injection_field`)\n\n } catch (error: any) {\n next(error);\n }\n};\n\n/** injection_fields : replace injection fields */\nexport const replaceInjectionFields = async (req: Request, res: Response, next: NextFunction): Promise<void> => {\n try {\n\n const requestInjectionFieldType = req.body.scope.target as InjectionFieldServiceProps[\"injectionFieldType\"]\n\n const injectionFieldService = InjectionFieldService({\n ...getDefaultServiceProps(req),\n injectionFieldType: requestInjectionFieldType\n })\n\n let reqScope = req.body.scope\n let reqPayload = req.body.payload\n\n let response: any = {}\n\n let request = schemaInjectionFieldReplacePayload.parse({\n scope: {\n target: reqScope.target,\n action: reqScope.action,\n },\n payload: reqPayload\n })\n\n let groupInjectionFields: any = []\n\n if (requestInjectionFieldType === \"user\") {\n\n groupInjectionFields = groupPayloadInjectionFields(request.payload.injection_fields, {\n user: \"userId\",\n branch: \"branchId\",\n });\n\n }\n\n if (requestInjectionFieldType === \"item\") {\n\n groupInjectionFields = groupPayloadInjectionFields(request.payload.injection_fields, {}, {\n item: \"itemId\",\n product: \"productId\",\n category: \"categoryId\",\n brand: \"brandId\",\n uom: \"uomId\",\n });\n\n }\n\n const responseAll = await Promise.all(\n groupInjectionFields.map(async (i: any) => {\n const payload = {\n injectionFieldType: requestInjectionFieldType,\n data: i as InjectionFieldReplaceProps[\"data\"],\n };\n\n try {\n return injectionFieldService.replaceInjectionField(payload);\n } catch (error) {\n // console.log('err', error)\n return error\n }\n\n })\n );\n\n // console.log('responseAll', JSON.stringify(responseAll))\n\n response = {\n [`${getRootName(requestInjectionFieldType, false)}`]: responseAll\n }\n\n sendSuccess(res, response, `Injection Fields(${requestInjectionFieldType}) replaced successfully`)\n\n } catch (err: any) {\n next(err);\n }\n};\n\n/** injection_field/definition/:id : get injection field (registered) */\nexport const getInjectionField = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n try {\n\n const { id } = req.params;\n const requestQuery = req.query as unknown as QueryList;\n\n const injectionFieldService = InjectionFieldService({\n ...getDefaultServiceProps(req),\n injectionFieldType: \"user\" // any\n })\n\n const data = await injectionFieldService.getInjectionField({ id: Number(id), datatypes: requestQuery.datatypes })\n\n return sendSuccess(res, data, \"Retrieved successfully\", `injection_field`);\n\n } catch (error: any) {\n next(error);\n }\n}\n\n/** injection_fields/injection_field : list injection fields registered */\nexport const listInjectionFields = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n try {\n\n const requestQuery = req.query as unknown as QueryList;\n // const requestInjectionFieldType = req.params.locationType as InjectionFieldServiceProps[\"injectionFieldType\"];\n\n const injectionFieldService = InjectionFieldService({\n ...getDefaultServiceProps(req),\n injectionFieldType: \"document\" // any\n })\n\n let payload: InjectionFieldListProps = requestQuery\n\n payload = {\n ...requestQuery\n }\n\n\n const { data, total } = await injectionFieldService.listInjectionFields(payload);\n\n let response = {\n [`injection_fields`]: data,\n total,\n }\n\n return sendSuccess(res, response, \"Retrieved successfully\");\n\n } catch (error: any) {\n next(error);\n }\n};\n\n/** injection_fields/delete : delete injection fields */\nexport const deleteInjectionFields = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n try {\n\n const requestInjectionFieldType = req.body.scope.target as InjectionFieldServiceProps[\"injectionFieldType\"]\n // const requestQuery = req.query as unknown as QueryList;\n // const requestFileId = Number(req.params.fileId)\n\n const request = schemaInjectionFieldDeletePayload.parse(req.body)\n\n const injectionFieldService = InjectionFieldService({\n ...getDefaultServiceProps(req),\n injectionFieldType: requestInjectionFieldType\n })\n\n const payload = {\n injectionFieldIds: request.payload.ids.map(i => BigInt(i))\n }\n\n const data = await injectionFieldService.removeInjectionFields(payload);\n\n return sendSuccess(res, data, \"Deleted\", `injection_fields`);\n\n } catch (error: any) {\n next(error);\n }\n};"]}
1
+ {"version":3,"file":"injectionFieldController.js","sourceRoot":"","sources":["../../../src/controllers/injection_field/injectionFieldController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request, Response, NextFunction } from \"express\";\n\nimport { getDefaultServiceProps, sendSuccess, sendError, HTTP_STATUS } from \"@/utils\"\nimport { groupPayloadInjectionFields } from '@/utils'\n\nimport { InjectionFieldService, InjectionFieldListProps, InjectionFieldServiceProps, InjectionFieldCreateProps, InjectionFieldReplaceProps } from \"@/services\"\nimport { schemaInjectionFieldReplacePayload, schemaInjectionFieldCreatePayload, schemaInjectionFieldDeletePayload } from \"@/schema/payload\";\nimport { QueryList } from \"@/schema/middleware/route\";\n\nconst getRootName = (requestInjectionFieldType: InjectionFieldServiceProps[\"injectionFieldType\"], toSingular: boolean) => {\n\n let rootName: any = ``\n\n switch (requestInjectionFieldType) {\n case \"user\": rootName = toSingular ? \"injection_field\" : \"injection_fields\"; break;\n case \"item\": rootName = toSingular ? \"injection_field\" : \"injection_fields\"; break;\n case \"document\": rootName = toSingular ? \"injection_field\" : \"injection_fields\"; break;\n case \"repository\": rootName = toSingular ? \"injection_field\" : \"injection_fields\"; break;\n case \"logistic\": rootName = toSingular ? \"injection_field\" : \"injection_fields\"; break;\n }\n\n return rootName\n}\n\n/** injection_field : create injection field */\nexport const createInjectionField = async (req: Request, res: Response, next: NextFunction): Promise<void> => {\n try {\n\n // const requestUserType = req.body.scope.target as InjectionFieldServiceProps[\"injectionFieldType\"]\n\n const injectionFieldService = InjectionFieldService({\n ...getDefaultServiceProps(req),\n injectionFieldType: \"user\"\n })\n\n let response: any = {}\n\n let reqScope = req.body.scope\n let reqPayload = req.body.payload\n\n let request = schemaInjectionFieldCreatePayload.parse({\n scope: {\n target: reqScope.target,\n action: reqScope.action\n },\n payload: {\n injection_fields: reqPayload?.injection_fields.map((i: any) => ({\n field_module: `${i.field_module}`,\n field_ref: `${i.field_ref}`,\n field_key: `${i.field_key}`,\n field_type: `${i.field_type}`,\n }))\n }\n })\n\n response = await Promise.all(\n request.payload.injection_fields.map(i => {\n const payload: InjectionFieldCreateProps = {\n data: {\n ...i,\n is_multiple: false,\n merge_multiple_inline: false,\n multiple_count: false,\n },\n };\n\n return injectionFieldService.createInjectionField(payload);\n })\n );\n\n sendSuccess(res, response, `Injection Fields created successfully`, `injection_field`)\n\n } catch (error: any) {\n next(error);\n }\n};\n\n/** injection_fields : replace injection fields */\nexport const replaceInjectionFields = async (req: Request, res: Response, next: NextFunction): Promise<void> => {\n try {\n\n const requestInjectionFieldType = req.body.scope.target as InjectionFieldServiceProps[\"injectionFieldType\"]\n\n const injectionFieldService = InjectionFieldService({\n ...getDefaultServiceProps(req),\n injectionFieldType: requestInjectionFieldType\n })\n\n let reqScope = req.body.scope\n let reqPayload = req.body.payload\n\n let response: any = {}\n\n let request = schemaInjectionFieldReplacePayload.parse({\n scope: {\n target: reqScope.target,\n action: reqScope.action,\n },\n payload: reqPayload\n })\n\n let groupInjectionFields: any = []\n\n if (requestInjectionFieldType === \"user\") {\n\n groupInjectionFields = groupPayloadInjectionFields(request.payload.injection_fields, {\n user: \"userId\",\n branch: \"branchId\",\n });\n\n }\n\n if (requestInjectionFieldType === \"item\") {\n\n groupInjectionFields = groupPayloadInjectionFields(request.payload.injection_fields, {}, {\n item: \"itemId\",\n product: \"productId\",\n category: \"categoryId\",\n brand: \"brandId\",\n uom: \"uomId\",\n });\n\n }\n\n if (requestInjectionFieldType === \"document\") {\n\n groupInjectionFields = groupPayloadInjectionFields(request.payload.injection_fields, {}, {\n document: \"documentId\",\n documentItem: \"documentItemId\"\n });\n\n }\n\n const responseAll = await Promise.all(\n groupInjectionFields.map(async (i: any) => {\n const payload = {\n injectionFieldType: requestInjectionFieldType,\n data: i as InjectionFieldReplaceProps[\"data\"],\n };\n\n try {\n return injectionFieldService.replaceInjectionField(payload);\n } catch (error) {\n // console.log('err', error)\n return error\n }\n\n })\n );\n\n // console.log('responseAll', JSON.stringify(responseAll))\n\n response = {\n [`${getRootName(requestInjectionFieldType, false)}`]: responseAll\n }\n\n sendSuccess(res, response, `Injection Fields(${requestInjectionFieldType}) replaced successfully`)\n\n } catch (err: any) {\n next(err);\n }\n};\n\n/** injection_field/definition/:id : get injection field (registered) */\nexport const getInjectionField = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n try {\n\n const { id } = req.params;\n const requestQuery = req.query as unknown as QueryList;\n\n const injectionFieldService = InjectionFieldService({\n ...getDefaultServiceProps(req),\n injectionFieldType: \"user\" // any\n })\n\n const data = await injectionFieldService.getInjectionField({ id: Number(id), datatypes: requestQuery.datatypes })\n\n return sendSuccess(res, data, \"Retrieved successfully\", `injection_field`);\n\n } catch (error: any) {\n next(error);\n }\n}\n\n/** injection_fields/injection_field : list injection fields registered */\nexport const listInjectionFields = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n try {\n\n const requestQuery = req.query as unknown as QueryList;\n // const requestInjectionFieldType = req.params.locationType as InjectionFieldServiceProps[\"injectionFieldType\"];\n\n const injectionFieldService = InjectionFieldService({\n ...getDefaultServiceProps(req),\n injectionFieldType: \"document\" // any\n })\n\n let payload: InjectionFieldListProps = requestQuery\n\n payload = {\n ...requestQuery\n }\n\n\n const { data, total } = await injectionFieldService.listInjectionFields(payload);\n\n let response = {\n [`injection_fields`]: data,\n total,\n }\n\n return sendSuccess(res, response, \"Retrieved successfully\");\n\n } catch (error: any) {\n next(error);\n }\n};\n\n/** injection_fields/delete : delete injection fields */\nexport const deleteInjectionFields = async (req: Request, res: Response, next: NextFunction): Promise<any> => {\n\n try {\n\n const requestInjectionFieldType = req.body.scope.target as InjectionFieldServiceProps[\"injectionFieldType\"]\n // const requestQuery = req.query as unknown as QueryList;\n // const requestFileId = Number(req.params.fileId)\n\n const request = schemaInjectionFieldDeletePayload.parse(req.body)\n\n const injectionFieldService = InjectionFieldService({\n ...getDefaultServiceProps(req),\n injectionFieldType: requestInjectionFieldType\n })\n\n const payload = {\n injectionFieldIds: request.payload.ids.map(i => BigInt(i))\n }\n\n const data = await injectionFieldService.removeInjectionFields(payload);\n\n return sendSuccess(res, data, \"Deleted\", `injection_fields`);\n\n } catch (error: any) {\n next(error);\n }\n};"]}
@@ -8,13 +8,13 @@ export declare const ModelDocumentInjectionFieldFields: {
8
8
  updateuserid: "updateuserid";
9
9
  isdelete: "isdelete";
10
10
  istrash: "istrash";
11
+ accountid: "accountid";
11
12
  document_id: "document_id";
12
13
  document_item_id: "document_item_id";
13
14
  document_doc_id: "document_doc_id";
14
15
  field_module: "field_module";
15
16
  field_ref: "field_ref";
16
17
  document_injection_field_id: "document_injection_field_id";
17
- ax_accountid: "ax_accountid";
18
18
  doc_do_pack_qty2_bk_39: "doc_do_pack_qty2_bk_39";
19
19
  doc_do_pack_qty2: "doc_do_pack_qty2";
20
20
  doci_do_pack_item_qty: "doci_do_pack_item_qty";
@@ -91,7 +91,7 @@ export declare const DocumentInjectionFieldModel: ({ prisma, accountId, actionUs
91
91
  accountId: number;
92
92
  actionUserId: number;
93
93
  }) => {
94
- primaryKey: "createdatetime" | "createuserid" | "updatedatetime" | "updateuserid" | "isdelete" | "istrash" | "document_id" | "document_item_id" | "document_doc_id" | "field_module" | "field_ref" | "document_injection_field_id" | "ax_accountid" | "doc_do_pack_qty2_bk_39" | "doc_do_pack_qty2" | "doci_do_pack_item_qty" | "doc_do_pack_item_qty" | "doc_so_test" | "doci_so_testitem" | "doc_so_pack_qty2" | "doc_do_aaaa" | "doc_do_remark_ids" | "doc_do_remark_id" | "doci_ir_batch_no" | "doci_ir_expiry_date" | "doci_ir_production_date" | "doc_scn_is_adhoc" | "doc_scn_shipment_address" | "doci_scn_existing_mp_quantity" | "doci_scn_is_bulk" | "doc_do_is_adhoc" | "doc_do_shipment_address" | "doci_do_existing_mp_quantity" | "doci_do_is_bulk" | "doc_cs_is_adhoc" | "doc_cs_shipment_address" | "doci_cs_existing_mp_quantity" | "doci_cs_is_bulk" | "doc_rdo_is_adhoc" | "doc_rdo_shipment_address" | "doci_rdo_existing_mp_quantity" | "doci_rdo_is_bulk" | "doc_pr_is_adhoc" | "doc_pr_shipment_address" | "doci_pr_existing_mp_quantity" | "doci_pr_is_bulk" | "doc_sdn_is_adhoc" | "doc_sdn_shipment_address" | "doci_sdn_existing_mp_quantity" | "doci_sdn_is_bulk" | "removed_doci_do_4sdfsdfd7s" | "doc_trp_samepltrip_date" | "doc_trp_sampletrip_no" | "doci_trp_sampletrip_item_no" | "doci_trp_samepltrip_item_date";
94
+ primaryKey: "createdatetime" | "createuserid" | "updatedatetime" | "updateuserid" | "isdelete" | "istrash" | "accountid" | "document_id" | "document_item_id" | "document_doc_id" | "field_module" | "field_ref" | "document_injection_field_id" | "doc_do_pack_qty2_bk_39" | "doc_do_pack_qty2" | "doci_do_pack_item_qty" | "doc_do_pack_item_qty" | "doc_so_test" | "doci_so_testitem" | "doc_so_pack_qty2" | "doc_do_aaaa" | "doc_do_remark_ids" | "doc_do_remark_id" | "doci_ir_batch_no" | "doci_ir_expiry_date" | "doci_ir_production_date" | "doc_scn_is_adhoc" | "doc_scn_shipment_address" | "doci_scn_existing_mp_quantity" | "doci_scn_is_bulk" | "doc_do_is_adhoc" | "doc_do_shipment_address" | "doci_do_existing_mp_quantity" | "doci_do_is_bulk" | "doc_cs_is_adhoc" | "doc_cs_shipment_address" | "doci_cs_existing_mp_quantity" | "doci_cs_is_bulk" | "doc_rdo_is_adhoc" | "doc_rdo_shipment_address" | "doci_rdo_existing_mp_quantity" | "doci_rdo_is_bulk" | "doc_pr_is_adhoc" | "doc_pr_shipment_address" | "doci_pr_existing_mp_quantity" | "doci_pr_is_bulk" | "doc_sdn_is_adhoc" | "doc_sdn_shipment_address" | "doci_sdn_existing_mp_quantity" | "doci_sdn_is_bulk" | "removed_doci_do_4sdfsdfd7s" | "doc_trp_samepltrip_date" | "doc_trp_sampletrip_no" | "doci_trp_sampletrip_item_no" | "doci_trp_samepltrip_item_date";
95
95
  getFields: (prefix?: string, excludeKeywords?: string[]) => Promise<{
96
96
  name: string;
97
97
  type: string;
@@ -105,13 +105,13 @@ export declare const DocumentInjectionFieldModel: ({ prisma, accountId, actionUs
105
105
  updateuserid: bigint;
106
106
  isdelete: boolean | null;
107
107
  istrash: boolean | null;
108
+ accountid: bigint;
108
109
  document_id: bigint;
109
110
  document_item_id: bigint;
110
111
  document_doc_id: bigint;
111
112
  field_module: string | null;
112
113
  field_ref: string | null;
113
114
  document_injection_field_id: bigint;
114
- ax_accountid: bigint;
115
115
  doc_do_pack_qty2_bk_39: bigint;
116
116
  doc_do_pack_qty2: bigint | null;
117
117
  doci_do_pack_item_qty: bigint | null;
@@ -165,13 +165,13 @@ export declare const DocumentInjectionFieldModel: ({ prisma, accountId, actionUs
165
165
  updateuserid: bigint;
166
166
  isdelete: boolean | null;
167
167
  istrash: boolean | null;
168
+ accountid: bigint;
168
169
  document_id: bigint;
169
170
  document_item_id: bigint;
170
171
  document_doc_id: bigint;
171
172
  field_module: string | null;
172
173
  field_ref: string | null;
173
174
  document_injection_field_id: bigint;
174
- ax_accountid: bigint;
175
175
  doc_do_pack_qty2_bk_39: bigint;
176
176
  doc_do_pack_qty2: bigint | null;
177
177
  doci_do_pack_item_qty: bigint | null;
@@ -226,13 +226,13 @@ export declare const DocumentInjectionFieldModel: ({ prisma, accountId, actionUs
226
226
  updateuserid: bigint;
227
227
  isdelete: boolean | null;
228
228
  istrash: boolean | null;
229
+ accountid: bigint;
229
230
  document_id: bigint;
230
231
  document_item_id: bigint;
231
232
  document_doc_id: bigint;
232
233
  field_module: string | null;
233
234
  field_ref: string | null;
234
235
  document_injection_field_id: bigint;
235
- ax_accountid: bigint;
236
236
  doc_do_pack_qty2_bk_39: bigint;
237
237
  doc_do_pack_qty2: bigint | null;
238
238
  doci_do_pack_item_qty: bigint | null;
@@ -283,13 +283,13 @@ export declare const DocumentInjectionFieldModel: ({ prisma, accountId, actionUs
283
283
  updateuserid: bigint;
284
284
  isdelete: boolean | null;
285
285
  istrash: boolean | null;
286
+ accountid: bigint;
286
287
  document_id: bigint;
287
288
  document_item_id: bigint;
288
289
  document_doc_id: bigint;
289
290
  field_module: string | null;
290
291
  field_ref: string | null;
291
292
  document_injection_field_id: bigint;
292
- ax_accountid: bigint;
293
293
  doc_do_pack_qty2_bk_39: bigint;
294
294
  doc_do_pack_qty2: bigint | null;
295
295
  doci_do_pack_item_qty: bigint | null;
@@ -337,7 +337,7 @@ export declare const DocumentInjectionFieldModel: ({ prisma, accountId, actionUs
337
337
  where?: Record<string, any>;
338
338
  }) => Promise<number>;
339
339
  aggregate: ({ field, operation, where, }: {
340
- field: "createdatetime" | "createuserid" | "updatedatetime" | "updateuserid" | "isdelete" | "istrash" | "document_id" | "document_item_id" | "document_doc_id" | "field_module" | "field_ref" | "document_injection_field_id" | "ax_accountid" | "doc_do_pack_qty2_bk_39" | "doc_do_pack_qty2" | "doci_do_pack_item_qty" | "doc_do_pack_item_qty" | "doc_so_test" | "doci_so_testitem" | "doc_so_pack_qty2" | "doc_do_aaaa" | "doc_do_remark_ids" | "doc_do_remark_id" | "doci_ir_batch_no" | "doci_ir_expiry_date" | "doci_ir_production_date" | "doc_scn_is_adhoc" | "doc_scn_shipment_address" | "doci_scn_existing_mp_quantity" | "doci_scn_is_bulk" | "doc_do_is_adhoc" | "doc_do_shipment_address" | "doci_do_existing_mp_quantity" | "doci_do_is_bulk" | "doc_cs_is_adhoc" | "doc_cs_shipment_address" | "doci_cs_existing_mp_quantity" | "doci_cs_is_bulk" | "doc_rdo_is_adhoc" | "doc_rdo_shipment_address" | "doci_rdo_existing_mp_quantity" | "doci_rdo_is_bulk" | "doc_pr_is_adhoc" | "doc_pr_shipment_address" | "doci_pr_existing_mp_quantity" | "doci_pr_is_bulk" | "doc_sdn_is_adhoc" | "doc_sdn_shipment_address" | "doci_sdn_existing_mp_quantity" | "doci_sdn_is_bulk" | "removed_doci_do_4sdfsdfd7s" | "doc_trp_samepltrip_date" | "doc_trp_sampletrip_no" | "doci_trp_sampletrip_item_no" | "doci_trp_samepltrip_item_date";
340
+ field: "createdatetime" | "createuserid" | "updatedatetime" | "updateuserid" | "isdelete" | "istrash" | "accountid" | "document_id" | "document_item_id" | "document_doc_id" | "field_module" | "field_ref" | "document_injection_field_id" | "doc_do_pack_qty2_bk_39" | "doc_do_pack_qty2" | "doci_do_pack_item_qty" | "doc_do_pack_item_qty" | "doc_so_test" | "doci_so_testitem" | "doc_so_pack_qty2" | "doc_do_aaaa" | "doc_do_remark_ids" | "doc_do_remark_id" | "doci_ir_batch_no" | "doci_ir_expiry_date" | "doci_ir_production_date" | "doc_scn_is_adhoc" | "doc_scn_shipment_address" | "doci_scn_existing_mp_quantity" | "doci_scn_is_bulk" | "doc_do_is_adhoc" | "doc_do_shipment_address" | "doci_do_existing_mp_quantity" | "doci_do_is_bulk" | "doc_cs_is_adhoc" | "doc_cs_shipment_address" | "doci_cs_existing_mp_quantity" | "doci_cs_is_bulk" | "doc_rdo_is_adhoc" | "doc_rdo_shipment_address" | "doci_rdo_existing_mp_quantity" | "doci_rdo_is_bulk" | "doc_pr_is_adhoc" | "doc_pr_shipment_address" | "doci_pr_existing_mp_quantity" | "doci_pr_is_bulk" | "doc_sdn_is_adhoc" | "doc_sdn_shipment_address" | "doci_sdn_existing_mp_quantity" | "doci_sdn_is_bulk" | "removed_doci_do_4sdfsdfd7s" | "doc_trp_samepltrip_date" | "doc_trp_sampletrip_no" | "doci_trp_sampletrip_item_no" | "doci_trp_samepltrip_item_date";
341
341
  operation?: "sum" | "avg" | "min" | "max" | "count";
342
342
  where?: Record<string, any>;
343
343
  }) => Promise<number>;
@@ -351,13 +351,13 @@ export declare const DocumentInjectionFieldModel: ({ prisma, accountId, actionUs
351
351
  updateuserid: bigint;
352
352
  isdelete: boolean | null;
353
353
  istrash: boolean | null;
354
+ accountid: bigint;
354
355
  document_id: bigint;
355
356
  document_item_id: bigint;
356
357
  document_doc_id: bigint;
357
358
  field_module: string | null;
358
359
  field_ref: string | null;
359
360
  document_injection_field_id: bigint;
360
- ax_accountid: bigint;
361
361
  doc_do_pack_qty2_bk_39: bigint;
362
362
  doc_do_pack_qty2: bigint | null;
363
363
  doci_do_pack_item_qty: bigint | null;
@@ -409,13 +409,13 @@ export declare const DocumentInjectionFieldModel: ({ prisma, accountId, actionUs
409
409
  updateuserid: bigint;
410
410
  isdelete: boolean | null;
411
411
  istrash: boolean | null;
412
+ accountid: bigint;
412
413
  document_id: bigint;
413
414
  document_item_id: bigint;
414
415
  document_doc_id: bigint;
415
416
  field_module: string | null;
416
417
  field_ref: string | null;
417
418
  document_injection_field_id: bigint;
418
- ax_accountid: bigint;
419
419
  doc_do_pack_qty2_bk_39: bigint;
420
420
  doc_do_pack_qty2: bigint | null;
421
421
  doci_do_pack_item_qty: bigint | null;
@@ -469,13 +469,13 @@ export declare const DocumentInjectionFieldModel: ({ prisma, accountId, actionUs
469
469
  updateuserid: bigint;
470
470
  isdelete: boolean | null;
471
471
  istrash: boolean | null;
472
+ accountid: bigint;
472
473
  document_id: bigint;
473
474
  document_item_id: bigint;
474
475
  document_doc_id: bigint;
475
476
  field_module: string | null;
476
477
  field_ref: string | null;
477
478
  document_injection_field_id: bigint;
478
- ax_accountid: bigint;
479
479
  doc_do_pack_qty2_bk_39: bigint;
480
480
  doc_do_pack_qty2: bigint | null;
481
481
  doci_do_pack_item_qty: bigint | null;
@@ -528,13 +528,13 @@ export declare const DocumentInjectionFieldModel: ({ prisma, accountId, actionUs
528
528
  updateuserid: bigint;
529
529
  isdelete: boolean | null;
530
530
  istrash: boolean | null;
531
+ accountid: bigint;
531
532
  document_id: bigint;
532
533
  document_item_id: bigint;
533
534
  document_doc_id: bigint;
534
535
  field_module: string | null;
535
536
  field_ref: string | null;
536
537
  document_injection_field_id: bigint;
537
- ax_accountid: bigint;
538
538
  doc_do_pack_qty2_bk_39: bigint;
539
539
  doc_do_pack_qty2: bigint | null;
540
540
  doci_do_pack_item_qty: bigint | null;
@@ -587,13 +587,13 @@ export declare const DocumentInjectionFieldModel: ({ prisma, accountId, actionUs
587
587
  updateuserid: bigint;
588
588
  isdelete: boolean | null;
589
589
  istrash: boolean | null;
590
+ accountid: bigint;
590
591
  document_id: bigint;
591
592
  document_item_id: bigint;
592
593
  document_doc_id: bigint;
593
594
  field_module: string | null;
594
595
  field_ref: string | null;
595
596
  document_injection_field_id: bigint;
596
- ax_accountid: bigint;
597
597
  doc_do_pack_qty2_bk_39: bigint;
598
598
  doc_do_pack_qty2: bigint | null;
599
599
  doci_do_pack_item_qty: bigint | null;
@@ -647,13 +647,13 @@ export declare const DocumentInjectionFieldModel: ({ prisma, accountId, actionUs
647
647
  updateuserid: bigint;
648
648
  isdelete: boolean | null;
649
649
  istrash: boolean | null;
650
+ accountid: bigint;
650
651
  document_id: bigint;
651
652
  document_item_id: bigint;
652
653
  document_doc_id: bigint;
653
654
  field_module: string | null;
654
655
  field_ref: string | null;
655
656
  document_injection_field_id: bigint;
656
- ax_accountid: bigint;
657
657
  doc_do_pack_qty2_bk_39: bigint;
658
658
  doc_do_pack_qty2: bigint | null;
659
659
  doci_do_pack_item_qty: bigint | null;
@@ -7,6 +7,8 @@ export declare const schemaFileUploadPayload: z.ZodObject<{
7
7
  label: z.ZodOptional<z.ZodString>;
8
8
  description: z.ZodOptional<z.ZodString>;
9
9
  refId: z.ZodNumber;
10
+ refId2: z.ZodOptional<z.ZodNumber>;
11
+ remark: z.ZodOptional<z.ZodString>;
10
12
  files: z.ZodArray<z.ZodObject<{
11
13
  originalname: z.ZodString;
12
14
  mimetype: z.ZodString;
@@ -33,9 +35,11 @@ export declare const schemaFileUploadPayload: z.ZodObject<{
33
35
  field_module: string;
34
36
  field_ref: string;
35
37
  refId: number;
38
+ remark?: string | undefined;
36
39
  description?: string | undefined;
37
40
  tagName?: string | undefined;
38
41
  label?: string | undefined;
42
+ refId2?: number | undefined;
39
43
  }, {
40
44
  files: {
41
45
  buffer: Buffer<ArrayBufferLike>;
@@ -46,9 +50,11 @@ export declare const schemaFileUploadPayload: z.ZodObject<{
46
50
  field_module: string;
47
51
  field_ref: string;
48
52
  refId: number;
53
+ remark?: string | undefined;
49
54
  description?: string | undefined;
50
55
  tagName?: string | undefined;
51
56
  label?: string | undefined;
57
+ refId2?: number | undefined;
52
58
  }>;
53
59
  export type SchemaFileUploadPayload = z.infer<typeof schemaFileUploadPayload>;
54
60
  /** Update */
@@ -16,6 +16,8 @@ exports.schemaFileUploadPayload = zod_1.z.object({
16
16
  label: zod_1.z.string().optional(),
17
17
  description: zod_1.z.string().optional(),
18
18
  refId: zod_1.z.number(),
19
+ refId2: zod_1.z.number().optional(),
20
+ remark: zod_1.z.string().optional(),
19
21
  files: zod_1.z
20
22
  .array(schemaFileUploadItem)
21
23
  .min(1, "At least one file must be uploaded"),
@@ -1 +1 @@
1
- {"version":3,"file":"schemaFile.js","sourceRoot":"","sources":["../../../../src/schema/payload/file/schemaFile.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAIxB,MAAM,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IAClC,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE;IACxB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACpC,MAAM,EAAE,OAAC,CAAC,UAAU,CAAC,MAAM,CAAC;CAC/B,CAAC,CAAA;AAEF,aAAa;AACA,QAAA,uBAAuB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC;IACrD,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;IAC3D,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,OAAC;SACH,KAAK,CAAC,oBAAoB,CAAC;SAC3B,GAAG,CAAC,CAAC,EAAE,oCAAoC,CAAC;CACpD,CAAC,CAAC;AAIH,aAAa;AACb,oDAAoD;AACpD,wBAAwB;AACxB,uEAAuE;AACvE,UAAU;AACV,0BAA0B;AAC1B,gCAAgC;AAChC,UAAU;AACV,MAAM;AAEN,iFAAiF;AAEjF,aAAa;AACA,QAAA,uBAAuB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC;QACZ,MAAM,EAAE,OAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,sBAAsB;KACpD,CAAC;IACF,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;QACd,GAAG,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,KAAK,CAAC,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,sCAAsC,CAAC;KACjG,CAAC;CACL,CAAC,CAAC","sourcesContent":["import { z } from \"zod\";\n\nimport { _, dayjs } from \"@/utils\";\n\nconst schemaFileUploadItem = z.object({\n originalname: z.string(),\n mimetype: z.string(),\n size: z.number().int().nonnegative(),\n buffer: z.instanceof(Buffer)\n})\n\n/** Upload */\nexport const schemaFileUploadPayload = z.object({\n field_ref: z.string().min(1, \"field_ref is required\"),\n field_module: z.string().min(1, \"field_module is required\"),\n tagName: z.string().optional(),\n label: z.string().optional(),\n description: z.string().optional(),\n refId: z.number(),\n files: z\n .array(schemaFileUploadItem)\n .min(1, \"At least one file must be uploaded\"),\n});\n\nexport type SchemaFileUploadPayload = z.infer<typeof schemaFileUploadPayload>;\n\n/** Update */\n// export const schemaFileUpdatePayload = z.object({\n// scope: z.object({\n// target: z.literal(\"location\"), // only \"location\" is allowed\n// }),\n// payload: z.object({\n// location: schemaFile,\n// }),\n// });\n\n// export type SchemaFileUpdatePayload = z.infer<typeof schemaFileUpdatePayload>;\n\n/** Delete */\nexport const schemaFileDeletePayload = z.object({\n scope: z.object({\n target: z.literal(\"file\"), // only \"role\" allowed\n }),\n payload: z.object({\n ids: z.array(z.union([z.string(), z.number()])).min(1, \"ids must contain at least one number\"),\n }),\n});\n\nexport type SchemaFileDeletePayload = z.infer<typeof schemaFileDeletePayload>;"]}
1
+ {"version":3,"file":"schemaFile.js","sourceRoot":"","sources":["../../../../src/schema/payload/file/schemaFile.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAIxB,MAAM,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IAClC,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE;IACxB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACpC,MAAM,EAAE,OAAC,CAAC,UAAU,CAAC,MAAM,CAAC;CAC/B,CAAC,CAAA;AAEF,aAAa;AACA,QAAA,uBAAuB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC;IACrD,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;IAC3D,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,OAAC;SACH,KAAK,CAAC,oBAAoB,CAAC;SAC3B,GAAG,CAAC,CAAC,EAAE,oCAAoC,CAAC;CACpD,CAAC,CAAC;AAIH,aAAa;AACb,oDAAoD;AACpD,wBAAwB;AACxB,uEAAuE;AACvE,UAAU;AACV,0BAA0B;AAC1B,gCAAgC;AAChC,UAAU;AACV,MAAM;AAEN,iFAAiF;AAEjF,aAAa;AACA,QAAA,uBAAuB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC;QACZ,MAAM,EAAE,OAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,sBAAsB;KACpD,CAAC;IACF,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;QACd,GAAG,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,KAAK,CAAC,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,sCAAsC,CAAC;KACjG,CAAC;CACL,CAAC,CAAC","sourcesContent":["import { z } from \"zod\";\n\nimport { _, dayjs } from \"@/utils\";\n\nconst schemaFileUploadItem = z.object({\n originalname: z.string(),\n mimetype: z.string(),\n size: z.number().int().nonnegative(),\n buffer: z.instanceof(Buffer)\n})\n\n/** Upload */\nexport const schemaFileUploadPayload = z.object({\n field_ref: z.string().min(1, \"field_ref is required\"),\n field_module: z.string().min(1, \"field_module is required\"),\n tagName: z.string().optional(),\n label: z.string().optional(),\n description: z.string().optional(),\n refId: z.number(),\n refId2: z.number().optional(),\n remark: z.string().optional(),\n files: z\n .array(schemaFileUploadItem)\n .min(1, \"At least one file must be uploaded\"),\n});\n\nexport type SchemaFileUploadPayload = z.infer<typeof schemaFileUploadPayload>;\n\n/** Update */\n// export const schemaFileUpdatePayload = z.object({\n// scope: z.object({\n// target: z.literal(\"location\"), // only \"location\" is allowed\n// }),\n// payload: z.object({\n// location: schemaFile,\n// }),\n// });\n\n// export type SchemaFileUpdatePayload = z.infer<typeof schemaFileUpdatePayload>;\n\n/** Delete */\nexport const schemaFileDeletePayload = z.object({\n scope: z.object({\n target: z.literal(\"file\"), // only \"role\" allowed\n }),\n payload: z.object({\n ids: z.array(z.union([z.string(), z.number()])).min(1, \"ids must contain at least one number\"),\n }),\n});\n\nexport type SchemaFileDeletePayload = z.infer<typeof schemaFileDeletePayload>;"]}
@@ -21,7 +21,8 @@ const FileGoogleCloudStorageProvider = (options) => {
21
21
  const year = now.format("YYYY");
22
22
  const month = now.format("MM");
23
23
  const day = now.format("DD");
24
- let finalPublicBaseUrl = `https://storage.googleapis.com/${bucketName}`;
24
+ // let finalPublicBaseUrl = `https://storage.googleapis.com/${bucketName}`
25
+ let finalPublicBaseUrl = `${publicBaseUrl}`;
25
26
  let dirParts = [];
26
27
  if (skipFoldernameByModuleRef === false) {
27
28
  dirParts.push(field_ref, field_module);
@@ -29,11 +30,15 @@ const FileGoogleCloudStorageProvider = (options) => {
29
30
  if (skipFoldernameByDate === false) {
30
31
  dirParts.push(year, month, day);
31
32
  }
32
- const finalBasePath = path_1.default.join(basePath, ...dirParts);
33
+ let finalBasePath = path_1.default.join(basePath, ...dirParts);
34
+ // basePath is empty & dirParts are nothing
35
+ if (!basePath && dirParts.length <= 0) {
36
+ finalBasePath = ``;
37
+ }
33
38
  finalPublicBaseUrl = [finalPublicBaseUrl, basePath, ...dirParts].filter(Boolean).join('/');
34
39
  const ext = path_1.default.extname(fileName);
35
40
  const uniqueName = `${(0, crypto_1.randomUUID)()}${ext}`; // `${base}-${randomUUID()}${ext}`;
36
- const objectPath = `${finalBasePath}/${uniqueName}`;
41
+ let objectPath = finalBasePath ? `${finalBasePath}/${uniqueName}` : `${uniqueName}`;
37
42
  const file = bucket.file(objectPath);
38
43
  await file.save(buffer, {
39
44
  resumable: false,
@@ -1 +1 @@
1
- {"version":3,"file":"FileGoogleCloudStorageProvider.js","sourceRoot":"","sources":["../../../src/services/file/FileGoogleCloudStorageProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { Storage } from \"@google-cloud/storage\";\nimport path from \"path\";\nimport { randomUUID } from \"crypto\";\n\nimport { dayjs } from \"@/utils\";\n\nimport { FileModuleRef } from \"./FileService\";\n\nimport { FileStorageProviderResult } from \"./FileStorageProviderRegistry\"\n\nexport interface FileGoogleCloudProviderOptions {\n bucketName: string;\n basePath?: string; // e.g. \"uploads\"\n skipFoldernameByModuleRef?: boolean; // skip the folder [ref]/[module]\n skipFoldernameByDate?: boolean; // skip the yyyy/mm/dd folder structure\n publicBaseUrl?: string; // e.g. \"[https://storage.googleapis.com/](https://storage.googleapis.com/)<bucket>\"\n credentials?: string; // path to service account key JSON\n}\n\nexport const FileGoogleCloudStorageProvider = (options: FileGoogleCloudProviderOptions) => {\n\n const {\n bucketName,\n basePath = \"\",\n skipFoldernameByModuleRef = false,\n skipFoldernameByDate = false,\n publicBaseUrl,\n credentials,\n } = options;\n\n const storage = new Storage(credentials ? { keyFilename: credentials } : undefined);\n const bucket = storage.bucket(bucketName);\n\n /**\n * Upload file to Google Cloud Storage.\n * Files will be stored under: basePath/ref/module/YYYY/MM/DD/\n */\n const uploadFile = async <\n T extends FileModuleRef\n >({\n field_ref,\n field_module,\n buffer,\n mimeType,\n foldernameDate,\n fileName,\n }: T & {\n buffer: Buffer;\n mimeType: string;\n foldernameDate?: string; // organize the foldername y/m/d using this date\n fileName: string;\n }): Promise<FileStorageProviderResult> => {\n\n const now = dayjs(foldernameDate).isValid() ? dayjs(foldernameDate) : dayjs();\n const year = now.format(\"YYYY\");\n const month = now.format(\"MM\");\n const day = now.format(\"DD\");\n\n let finalPublicBaseUrl = `https://storage.googleapis.com/${bucketName}`\n let dirParts = []\n\n if (skipFoldernameByModuleRef === false) {\n dirParts.push(field_ref, field_module)\n }\n\n if (skipFoldernameByDate === false) {\n dirParts.push(year, month, day)\n }\n\n const finalBasePath = path.join(basePath, ...dirParts)\n finalPublicBaseUrl = [finalPublicBaseUrl, basePath, ...dirParts].filter(Boolean).join('/');\n\n const ext = path.extname(fileName);\n const uniqueName = `${randomUUID()}${ext}`; // `${base}-${randomUUID()}${ext}`;\n const objectPath = `${finalBasePath}/${uniqueName}`;\n const file = bucket.file(objectPath);\n\n await file.save(buffer, {\n resumable: false,\n metadata: {\n contentType: mimeType || \"application/octet-stream\",\n },\n });\n\n try {\n await file.makePublic();\n } catch (err) {\n console.warn(\"⚠️ Failed to make file public:\", err);\n }\n\n const assetPath = objectPath;\n const assetUrl = `${finalPublicBaseUrl}/${uniqueName}`;\n\n return {\n assetPath,\n assetUrl,\n filename: uniqueName,\n basePath: finalBasePath,\n ...(skipFoldernameByDate === false ? {\n folderName: {\n day: Number(day),\n month: Number(month),\n year: Number(year)\n }\n } : {})\n };\n };\n\n return { uploadFile };\n\n};\n"]}
1
+ {"version":3,"file":"FileGoogleCloudStorageProvider.js","sourceRoot":"","sources":["../../../src/services/file/FileGoogleCloudStorageProvider.ts"],"names":[],"mappings":";;;;;;AAAA,mDAAgD;AAChD,gDAAwB;AACxB,mCAAoC;AAEpC,mCAAgC;AAezB,MAAM,8BAA8B,GAAG,CAAC,OAAuC,EAAE,EAAE;IAEtF,MAAM,EACF,UAAU,EACV,QAAQ,GAAG,EAAE,EACb,yBAAyB,GAAG,KAAK,EACjC,oBAAoB,GAAG,KAAK,EAC5B,aAAa,EACb,WAAW,GACd,GAAG,OAAO,CAAC;IAEZ,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE1C;;;OAGG;IACH,MAAM,UAAU,GAAG,KAAK,EAEtB,EACE,SAAS,EACT,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,cAAc,EACd,QAAQ,GAMX,EAAsC,EAAE;QAErC,MAAM,GAAG,GAAG,IAAA,aAAK,EAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAA,aAAK,EAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAA,aAAK,GAAE,CAAC;QAC9E,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE7B,0EAA0E;QAC1E,IAAI,kBAAkB,GAAG,GAAG,aAAa,EAAE,CAAA;QAC3C,IAAI,QAAQ,GAAG,EAAE,CAAA;QAEjB,IAAI,yBAAyB,KAAK,KAAK,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAC1C,CAAC;QAED,IAAI,oBAAoB,KAAK,KAAK,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QACnC,CAAC;QAED,IAAI,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAA;QAEpD,2CAA2C;QAC3C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACpC,aAAa,GAAG,EAAE,CAAA;QACtB,CAAC;QAED,kBAAkB,GAAG,CAAC,kBAAkB,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE3F,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,GAAG,IAAA,mBAAU,GAAE,GAAG,GAAG,EAAE,CAAC,CAAE,mCAAmC;QAChF,IAAI,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,CAAA;QAEnF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACpB,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE;gBACN,WAAW,EAAE,QAAQ,IAAI,0BAA0B;aACtD;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC;QAC7B,MAAM,QAAQ,GAAG,GAAG,kBAAkB,IAAI,UAAU,EAAE,CAAC;QAEvD,OAAO;YACH,SAAS;YACT,QAAQ;YACR,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,aAAa;YACvB,GAAG,CAAC,oBAAoB,KAAK,KAAK,CAAC,CAAC,CAAC;gBACjC,UAAU,EAAE;oBACR,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;oBAChB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;oBACpB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;iBACrB;aACJ,CAAC,CAAC,CAAC,EAAE,CAAC;SACV,CAAC;IACN,CAAC,CAAC;IAEF,OAAO,EAAE,UAAU,EAAE,CAAC;AAE1B,CAAC,CAAC;AAnGW,QAAA,8BAA8B,kCAmGzC","sourcesContent":["import { Storage } from \"@google-cloud/storage\";\nimport path from \"path\";\nimport { randomUUID } from \"crypto\";\n\nimport { dayjs } from \"@/utils\";\n\nimport { FileModuleRef } from \"./FileService\";\n\nimport { FileStorageProviderResult } from \"./FileStorageProviderRegistry\"\n\nexport interface FileGoogleCloudProviderOptions {\n bucketName: string;\n basePath?: string; // e.g. \"uploads\"\n skipFoldernameByModuleRef?: boolean; // skip the folder [ref]/[module]\n skipFoldernameByDate?: boolean; // skip the yyyy/mm/dd folder structure\n publicBaseUrl?: string; // e.g. \"[https://storage.googleapis.com/](https://storage.googleapis.com/)<bucket>\"\n credentials?: string; // path to service account key JSON\n}\n\nexport const FileGoogleCloudStorageProvider = (options: FileGoogleCloudProviderOptions) => {\n\n const {\n bucketName,\n basePath = \"\",\n skipFoldernameByModuleRef = false,\n skipFoldernameByDate = false,\n publicBaseUrl,\n credentials,\n } = options;\n\n const storage = new Storage(credentials ? { keyFilename: credentials } : undefined);\n const bucket = storage.bucket(bucketName);\n\n /**\n * Upload file to Google Cloud Storage.\n * Files will be stored under: basePath/ref/module/YYYY/MM/DD/\n */\n const uploadFile = async <\n T extends FileModuleRef\n >({\n field_ref,\n field_module,\n buffer,\n mimeType,\n foldernameDate,\n fileName,\n }: T & {\n buffer: Buffer;\n mimeType: string;\n foldernameDate?: string; // organize the foldername y/m/d using this date\n fileName: string;\n }): Promise<FileStorageProviderResult> => {\n\n const now = dayjs(foldernameDate).isValid() ? dayjs(foldernameDate) : dayjs();\n const year = now.format(\"YYYY\");\n const month = now.format(\"MM\");\n const day = now.format(\"DD\");\n\n // let finalPublicBaseUrl = `https://storage.googleapis.com/${bucketName}`\n let finalPublicBaseUrl = `${publicBaseUrl}`\n let dirParts = []\n\n if (skipFoldernameByModuleRef === false) {\n dirParts.push(field_ref, field_module)\n }\n\n if (skipFoldernameByDate === false) {\n dirParts.push(year, month, day)\n }\n\n let finalBasePath = path.join(basePath, ...dirParts)\n\n // basePath is empty & dirParts are nothing\n if (!basePath && dirParts.length <= 0) {\n finalBasePath = ``\n }\n\n finalPublicBaseUrl = [finalPublicBaseUrl, basePath, ...dirParts].filter(Boolean).join('/');\n\n const ext = path.extname(fileName);\n const uniqueName = `${randomUUID()}${ext}`; // `${base}-${randomUUID()}${ext}`;\n let objectPath = finalBasePath ? `${finalBasePath}/${uniqueName}` : `${uniqueName}`\n\n const file = bucket.file(objectPath);\n\n await file.save(buffer, {\n resumable: false,\n metadata: {\n contentType: mimeType || \"application/octet-stream\",\n },\n });\n\n try {\n await file.makePublic();\n } catch (err) {\n console.warn(\"⚠️ Failed to make file public:\", err);\n }\n\n const assetPath = objectPath;\n const assetUrl = `${finalPublicBaseUrl}/${uniqueName}`;\n\n return {\n assetPath,\n assetUrl,\n filename: uniqueName,\n basePath: finalBasePath,\n ...(skipFoldernameByDate === false ? {\n folderName: {\n day: Number(day),\n month: Number(month),\n year: Number(year)\n }\n } : {})\n };\n };\n\n return { uploadFile };\n\n};\n"]}
@@ -59,6 +59,9 @@ export type FileUploadProps = FileModuleRef & {
59
59
  tagName?: string;
60
60
  label?: string;
61
61
  refId: number;
62
+ refId2: number;
63
+ remark: string;
64
+ foldernameDate?: string;
62
65
  storageProviderName?: FileStorageProviderType;
63
66
  storageProviderOptions?: FileLocalProviderOptions | FileGoogleCloudProviderOptions;
64
67
  files: FileUploadItem[];
@@ -70,7 +73,7 @@ export declare const compressImageBuffer: (buffer: Buffer, mimeType: string, opt
70
73
  sizeBytes: number;
71
74
  }>;
72
75
  export declare const FileService: (props: FileServiceProps) => {
73
- uploadFiles: ({ field_ref, field_module, tagName, label, refId, description, storageProviderName, storageProviderOptions, files, imageCompressionOptions }: FileUploadProps) => Promise<any[]>;
76
+ uploadFiles: ({ field_ref, field_module, tagName, label, refId, refId2, remark, description, foldernameDate, storageProviderName, storageProviderOptions, files, imageCompressionOptions }: FileUploadProps) => Promise<any[]>;
74
77
  getFile: ({ id }: FileGetProps) => Promise<any>;
75
78
  listFiles: ({ limit, offset, filters, sortfield, sortorder, }: FileListProps) => Promise<{
76
79
  data: any;
@@ -100,15 +100,15 @@ const FileService = (props) => {
100
100
  const initBatchCode = () => {
101
101
  return `${Date.now()}_${utils_1._.random(0, 999)}`;
102
102
  };
103
- const uploadFiles = async ({ field_ref = "item", field_module = "item", tagName, label, refId, description, storageProviderName = "local", storageProviderOptions, files = [], imageCompressionOptions }) => {
103
+ const uploadFiles = async ({ field_ref = "item", field_module = "item", tagName, label, refId, refId2, remark, description, foldernameDate, storageProviderName = "local", storageProviderOptions, files = [], imageCompressionOptions }) => {
104
104
  // get the correct provider
105
105
  const provider = (0, FileStorageProviderRegistry_1.getFileStorageProvider)(storageProviderName, storageProviderOptions);
106
106
  const allResponses = [];
107
107
  const batchCode = initBatchCode();
108
108
  const fileLabel = label ?? "";
109
109
  const referId1 = refId ?? 0;
110
- const referId2 = 0;
111
- const remark = ``;
110
+ const referId2 = refId2 ?? 0;
111
+ const fileRemark = remark ?? "";
112
112
  for (const file of files) {
113
113
  let bufferToUpload = file.buffer;
114
114
  let mimeType = file.mimeType ?? "";
@@ -129,6 +129,7 @@ const FileService = (props) => {
129
129
  field_ref,
130
130
  field_module,
131
131
  buffer: bufferToUpload,
132
+ ...(foldernameDate ? { foldernameDate } : {}),
132
133
  mimeType,
133
134
  fileName: fileOriginalName
134
135
  });
@@ -153,7 +154,7 @@ const FileService = (props) => {
153
154
  fieldModule,
154
155
  tagName,
155
156
  description,
156
- remark,
157
+ remark: fileRemark,
157
158
  folderPath,
158
159
  assetUrl,
159
160
  assetPath,
@@ -1 +1 @@
1
- {"version":3,"file":"FileService.js","sourceRoot":"","sources":["../../../src/services/file/FileService.ts"],"names":[],"mappings":"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","sourcesContent":["import { _, sharp, logError, throwError } from \"@/utils\";\nimport path from \"path\";\nimport fs from \"fs/promises\";\n\nimport {\n FileModel,\n ModelFileFields,\n} from \"@/models\";\n\nimport { FileLocalProviderOptions } from \"./FileLocalStorageProvider\"\nimport { FileGoogleCloudProviderOptions } from \"./FileGoogleCloudStorageProvider\"\nimport { getFileStorageProvider, FileStorageProviderType } from \"./FileStorageProviderRegistry\";\n\nimport { InjectionFieldModuleRef } from \"@/services\"\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { getFileSqlRelationMaps, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, getListWithCount } from \"@/lib\";\n\nimport {\n buildFileMainSqlSelect,\n buildFileDefaultSqlSelect\n} from \"@/lib\";\n\nexport const fileDataTypes = {\n // salesOrderInjectionFields: \"sales_injection_fields\",\n}\n\nexport type FileModuleRef = InjectionFieldModuleRef\n\nexport type FileDataType = keyof typeof fileDataTypes;\n\nexport type FileServiceProps = DefaultServiceProps & {\n};\n\nexport type FileImageCompressionOptions = {\n maxWidth?: number;\n quality?: number;\n}\n\nexport type FileGetProps = Omit<QueryGet, \"datatypes\"> & {\n id: number,\n // datatypes: FileDataType[]\n};\n\nexport type FileListProps = Omit<QueryList, \"datatypes\"> & {\n // datatypes: FileDataType[]\n}\n\nexport type FileRemoveProps = {\n fileIds: BigInt[]\n};\n\nexport type File = {\n tagName: string;\n description: string;\n folderPath: string;\n assetUrl: string;\n assetPath: string;\n fileLabel: string;\n fileName: string;\n contentType: string;\n inputType: string;\n inputFileSizeBytes: number;\n inputFileName: string;\n fileSizeBytes: number;\n fileCompressFormat: string;\n storageProviderName: string;\n foldernameDay: number;\n foldernameMonth: number;\n foldernameYear: number;\n batchCode: string;\n referId1: number;\n referId2: number;\n remark: string;\n}\n\nexport type FileUploadItem = {\n buffer: Buffer; // Raw file data\n originalName: string; // Client filename\n mimeType: string; // e.g. \"image/png\"\n sizeBytes: number; // File size in bytes\n // providerName?: FileStorageProviderType; // optional: override global provider\n};\n\n\nexport type FileCreateProps = {\n data: File & {\n fieldRef: FileModuleRef[\"field_ref\"],\n fieldModule: FileModuleRef[\"field_module\"]\n }\n}\n\nexport type FileUploadProps = FileModuleRef & {\n description?: string,\n tagName?: string,\n label?: string,\n refId: number\n storageProviderName?: FileStorageProviderType;\n storageProviderOptions?: FileLocalProviderOptions | FileGoogleCloudProviderOptions;\n files: FileUploadItem[]\n imageCompressionOptions?: FileImageCompressionOptions\n}\n\n// let a: FileCreateProps = {\n// data: {\n// field_ref: \"user\",\n// field_module: \"driver\",\n// fileLabel: ''\n// }\n// }\n\n// export type FileUpdateProps = {\n// documentId: number,\n// data: File\n// }\n\nlet mainSqlSelect = buildFileMainSqlSelect()\nlet defaultSqlSelect = buildFileDefaultSqlSelect()\n\nconst { relationKeys, sqlRelationMaps } = getFileSqlRelationMaps(``)\n\nconst getCreatePayload = (data: FileCreateProps[\"data\"]) => {\n\n return {\n // [`${ModelFileFields.file_id}`]: fileType,\n [`${ModelFileFields.asset_path}`]: data.assetPath,\n [`${ModelFileFields.asset_url}`]: data.assetUrl,\n [`${ModelFileFields.batch_code}`]: data.batchCode,\n [`${ModelFileFields.content_type}`]: data.contentType,\n [`${ModelFileFields.field_module}`]: data.fieldModule,\n [`${ModelFileFields.field_ref}`]: data.fieldRef,\n [`${ModelFileFields.file_compress_format}`]: data.fileCompressFormat,\n [`${ModelFileFields.file_label}`]: data.fileLabel,\n [`${ModelFileFields.file_name}`]: data.fileName,\n [`${ModelFileFields.file_size_bytes}`]: data.fileSizeBytes,\n [`${ModelFileFields.tag_name}`]: data.tagName,\n [`${ModelFileFields.description}`]: data.description,\n [`${ModelFileFields.foldername_day}`]: Number(data.foldernameDay),\n [`${ModelFileFields.foldername_month}`]: Number(data.foldernameMonth),\n [`${ModelFileFields.foldername_year}`]: Number(data.foldernameYear),\n [`${ModelFileFields.input_file_name}`]: data.inputFileName,\n [`${ModelFileFields.input_file_size_bytes}`]: data.inputFileSizeBytes,\n [`${ModelFileFields.input_type}`]: data.inputType,\n [`${ModelFileFields.refer_id_1}`]: data.referId1,\n [`${ModelFileFields.refer_id_2}`]: data.referId2,\n [`${ModelFileFields.remark}`]: data.remark,\n [`${ModelFileFields.storage_provider_name}`]: data.storageProviderName,\n }\n\n}\n\nexport const compressImageBuffer = async (\n buffer: Buffer,\n mimeType: string,\n options: FileImageCompressionOptions = {}\n): Promise<{\n compressFormat: string;\n buffer: Buffer;\n sizeBytes: number;\n}> => {\n\n const { maxWidth = 1024, quality = 80 } = options;\n\n const SUPPORTED_IMAGE_MIMES = [\n \"image/jpeg\",\n \"image/png\",\n \"image/webp\",\n \"image/tiff\",\n \"image/bmp\",\n ];\n\n // Skip unsupported images\n if (!SUPPORTED_IMAGE_MIMES.includes(mimeType)) {\n return { compressFormat: '', buffer, sizeBytes: buffer.byteLength };\n }\n\n let pipeline = sharp(buffer);\n\n if (maxWidth) {\n pipeline = pipeline.resize({ width: maxWidth });\n }\n\n let compressedBuffer: Buffer;\n\n switch (mimeType) {\n case \"image/png\":\n compressedBuffer = await pipeline.png({ quality }).toBuffer();\n break;\n case \"image/webp\":\n compressedBuffer = await pipeline.webp({ quality }).toBuffer();\n break;\n case \"image/jpeg\":\n case \"image/tiff\":\n case \"image/bmp\":\n default:\n compressedBuffer = await pipeline.jpeg({ quality }).toBuffer();\n break;\n }\n\n return {\n compressFormat: JSON.stringify(options),\n buffer: compressedBuffer,\n sizeBytes: compressedBuffer.byteLength\n };\n\n};\n\nexport const FileService = (props: FileServiceProps) => {\n\n const {\n prisma,\n accountId = 0,\n actionUserId = 0,\n } = props\n\n const fileModel = FileModel({ prisma, accountId, actionUserId })\n\n const initBatchCode = () => {\n return `${Date.now()}_${_.random(0, 999)}`;\n }\n\n const uploadFiles = async ({\n field_ref = \"item\",\n field_module = \"item\",\n tagName,\n label,\n refId,\n description,\n storageProviderName = \"local\",\n storageProviderOptions,\n files = [],\n imageCompressionOptions\n }: FileUploadProps) => {\n\n // get the correct provider\n const provider = getFileStorageProvider(storageProviderName, storageProviderOptions);\n\n const allResponses = []\n\n const batchCode = initBatchCode();\n\n const fileLabel = label ?? \"\"\n const referId1 = refId ?? 0\n const referId2 = 0\n const remark = ``\n\n for (const file of files) {\n\n let bufferToUpload = file.buffer;\n let mimeType = file.mimeType ?? \"\"\n let sizeBytes = file?.sizeBytes\n let fileOriginalName = file.originalName;\n\n let outputSizeBytes = sizeBytes // output file size\n let fileCompressFormat = `` // output image compress\n\n // const ext = file.originalName?.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n // Only compress if image and options provided\n if (imageCompressionOptions) {\n const compressed = await compressImageBuffer(\n bufferToUpload,\n mimeType,\n imageCompressionOptions\n );\n\n fileCompressFormat = compressed.compressFormat,\n bufferToUpload = compressed.buffer;\n outputSizeBytes = compressed.sizeBytes; // update the file size\n }\n\n // upload using the provider - buffer\n const uploadResult = await provider.uploadFile({\n field_ref,\n field_module,\n buffer: bufferToUpload,\n mimeType,\n fileName: fileOriginalName\n } as FileModuleRef & { buffer: Buffer; mimeType: string; fileName: string });\n\n const fieldRef = field_ref\n const fieldModule = field_module\n\n const fileName = uploadResult?.filename ?? \"\"\n const contentType = mimeType ?? \"\"\n const folderPath = uploadResult.assetPath ?? \"\"\n const assetUrl = uploadResult.assetUrl ?? \"\"\n const assetPath = uploadResult.assetPath ?? \"\"\n\n const inputType = `buffer`\n const inputFileSizeBytes = sizeBytes ?? 0\n const inputFileName = fileOriginalName ?? \"\"\n\n const fileSizeBytes = outputSizeBytes ?? 0\n // const fileCompressFormat = ``\n\n const foldernameDay = uploadResult?.folderName?.day ?? \"\"\n const foldernameMonth = uploadResult?.folderName?.month ?? \"\"\n const foldernameYear = uploadResult?.folderName?.year ?? \"\"\n\n const payload: FileCreateProps = {\n data: {\n fieldRef,\n fieldModule,\n tagName,\n description,\n remark,\n folderPath,\n assetUrl,\n assetPath,\n fileLabel,\n fileName,\n contentType,\n inputType,\n inputFileSizeBytes,\n inputFileName,\n fileSizeBytes,\n fileCompressFormat,\n storageProviderName,\n foldernameDay,\n foldernameMonth,\n foldernameYear,\n batchCode,\n referId1,\n referId2,\n } as FileCreateProps[\"data\"],\n };\n\n let response = await createFile(payload);\n\n allResponses.push(response)\n }\n\n return allResponses\n\n }\n\n // private\n const createFile = async ({ data }: FileCreateProps) => {\n\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create file payload: ${JSON.stringify(_data)}`);\n }\n\n const response = await fileModel.create({ data: _data })\n\n const newFileId = response?.file_id ?? \"\"\n\n return newFileId ? await getFile({ id: Number(newFileId) }) : null\n\n }\n\n // const updateFile = async ({ documentId, data }: FileUpdateProps) => {\n\n // return await getFile({ id: documentId })\n // }\n\n const getFile = async ({ id }: FileGetProps) => {\n\n let { data } = await listFiles({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelFileFields.file_id}`, operator: \"=\", value: id }],\n sortfield: `${ModelFileFields.file_id}`,\n sortorder: \"ASC\"\n })\n\n return data[0] ?? null;\n\n };\n\n const listFiles = async ({\n limit,\n offset,\n filters,\n sortfield,\n sortorder,\n }: FileListProps) => {\n\n let sqlSelect: string[] = []\n let sqlRelation: string[] = []\n let sqlGroupBy: string[] = []\n\n let sqlSelectAgg: string[] = []\n let sqlRelationAgg: string[] = []\n\n sqlSelect = [\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n sqlRelation = [\n sqlRelationMaps.creator,\n sqlRelationMaps.updater\n ]\n\n // sqlRelationAgg = []\n\n sqlGroupBy = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...defaultSqlSelect\n }\n\n let sqlWhere = [\n `mainfile.isdelete = false`,\n `mainfile.istrash = false`,\n // `LOWER(mainfile.doc_type) = LOWER('${documentTypeKey}')`\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n // get the listing data & count\n const { data, total } = await getListWithCount({\n model: fileModel,\n tableName: \"files\",\n mainAlias: \"mainfile\",\n countKey: `${ModelFileFields.file_id}`,\n accountId,\n sqlRelationMaps,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n const response = {\n data,\n total\n }\n\n return response\n\n };\n\n const removeFiles = async ({ fileIds }: FileRemoveProps) => {\n\n if (!fileIds.length) throwError('fileIds is required');\n\n const filesToDelete = await fileModel.list({\n where: {\n file_id: { in: fileIds }\n }\n });\n\n // console.log('filesToDelete', filesToDelete)\n\n // 2️⃣ Delete the physical files\n for (const file of filesToDelete) {\n\n const assetPath = file.asset_path\n\n if (assetPath) {\n try {\n const filePath = path.resolve(process.cwd(), assetPath);\n await fs.unlink(filePath);\n } catch (err) {\n // Log error but continue deleting others\n console.error(`Failed to delete file ${assetPath}:`, err);\n }\n }\n }\n\n // remove files\n const response = await fileModel.remove({ where: { [`${ModelFileFields.file_id}`]: { in: fileIds } } });\n\n return response\n };\n\n // const getDataTypes = () => {\n // return Object.values(fileDataTypes);\n // }\n\n return {\n uploadFiles,\n // createFile,\n // updateFile,\n getFile,\n listFiles,\n removeFiles,\n // getDataTypes\n }\n\n}\n\n"]}
1
+ {"version":3,"file":"FileService.js","sourceRoot":"","sources":["../../../src/services/file/FileService.ts"],"names":[],"mappings":"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","sourcesContent":["import { _, sharp, logError, throwError } from \"@/utils\";\nimport path from \"path\";\nimport fs from \"fs/promises\";\n\nimport {\n FileModel,\n ModelFileFields,\n} from \"@/models\";\n\nimport { FileLocalProviderOptions } from \"./FileLocalStorageProvider\"\nimport { FileGoogleCloudProviderOptions } from \"./FileGoogleCloudStorageProvider\"\nimport { getFileStorageProvider, FileStorageProviderType } from \"./FileStorageProviderRegistry\";\n\nimport { InjectionFieldModuleRef } from \"@/services\"\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { getFileSqlRelationMaps, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, getListWithCount } from \"@/lib\";\n\nimport {\n buildFileMainSqlSelect,\n buildFileDefaultSqlSelect\n} from \"@/lib\";\n\nexport const fileDataTypes = {\n // salesOrderInjectionFields: \"sales_injection_fields\",\n}\n\nexport type FileModuleRef = InjectionFieldModuleRef\n\nexport type FileDataType = keyof typeof fileDataTypes;\n\nexport type FileServiceProps = DefaultServiceProps & {\n};\n\nexport type FileImageCompressionOptions = {\n maxWidth?: number;\n quality?: number;\n}\n\nexport type FileGetProps = Omit<QueryGet, \"datatypes\"> & {\n id: number,\n // datatypes: FileDataType[]\n};\n\nexport type FileListProps = Omit<QueryList, \"datatypes\"> & {\n // datatypes: FileDataType[]\n}\n\nexport type FileRemoveProps = {\n fileIds: BigInt[]\n};\n\nexport type File = {\n tagName: string;\n description: string;\n folderPath: string;\n assetUrl: string;\n assetPath: string;\n fileLabel: string;\n fileName: string;\n contentType: string;\n inputType: string;\n inputFileSizeBytes: number;\n inputFileName: string;\n fileSizeBytes: number;\n fileCompressFormat: string;\n storageProviderName: string;\n foldernameDay: number;\n foldernameMonth: number;\n foldernameYear: number;\n batchCode: string;\n referId1: number;\n referId2: number;\n remark: string;\n}\n\nexport type FileUploadItem = {\n buffer: Buffer; // Raw file data\n originalName: string; // Client filename\n mimeType: string; // e.g. \"image/png\"\n sizeBytes: number; // File size in bytes\n // providerName?: FileStorageProviderType; // optional: override global provider\n};\n\n\nexport type FileCreateProps = {\n data: File & {\n fieldRef: FileModuleRef[\"field_ref\"],\n fieldModule: FileModuleRef[\"field_module\"]\n }\n}\n\nexport type FileUploadProps = FileModuleRef & {\n description?: string,\n tagName?: string,\n label?: string,\n refId: number\n refId2: number\n remark: string\n foldernameDate?: string,\n storageProviderName?: FileStorageProviderType;\n storageProviderOptions?: FileLocalProviderOptions | FileGoogleCloudProviderOptions;\n files: FileUploadItem[]\n imageCompressionOptions?: FileImageCompressionOptions\n}\n\n// let a: FileCreateProps = {\n// data: {\n// field_ref: \"user\",\n// field_module: \"driver\",\n// fileLabel: ''\n// }\n// }\n\n// export type FileUpdateProps = {\n// documentId: number,\n// data: File\n// }\n\nlet mainSqlSelect = buildFileMainSqlSelect()\nlet defaultSqlSelect = buildFileDefaultSqlSelect()\n\nconst { relationKeys, sqlRelationMaps } = getFileSqlRelationMaps(``)\n\nconst getCreatePayload = (data: FileCreateProps[\"data\"]) => {\n\n return {\n // [`${ModelFileFields.file_id}`]: fileType,\n [`${ModelFileFields.asset_path}`]: data.assetPath,\n [`${ModelFileFields.asset_url}`]: data.assetUrl,\n [`${ModelFileFields.batch_code}`]: data.batchCode,\n [`${ModelFileFields.content_type}`]: data.contentType,\n [`${ModelFileFields.field_module}`]: data.fieldModule,\n [`${ModelFileFields.field_ref}`]: data.fieldRef,\n [`${ModelFileFields.file_compress_format}`]: data.fileCompressFormat,\n [`${ModelFileFields.file_label}`]: data.fileLabel,\n [`${ModelFileFields.file_name}`]: data.fileName,\n [`${ModelFileFields.file_size_bytes}`]: data.fileSizeBytes,\n [`${ModelFileFields.tag_name}`]: data.tagName,\n [`${ModelFileFields.description}`]: data.description,\n [`${ModelFileFields.foldername_day}`]: Number(data.foldernameDay),\n [`${ModelFileFields.foldername_month}`]: Number(data.foldernameMonth),\n [`${ModelFileFields.foldername_year}`]: Number(data.foldernameYear),\n [`${ModelFileFields.input_file_name}`]: data.inputFileName,\n [`${ModelFileFields.input_file_size_bytes}`]: data.inputFileSizeBytes,\n [`${ModelFileFields.input_type}`]: data.inputType,\n [`${ModelFileFields.refer_id_1}`]: data.referId1,\n [`${ModelFileFields.refer_id_2}`]: data.referId2,\n [`${ModelFileFields.remark}`]: data.remark,\n [`${ModelFileFields.storage_provider_name}`]: data.storageProviderName,\n }\n\n}\n\nexport const compressImageBuffer = async (\n buffer: Buffer,\n mimeType: string,\n options: FileImageCompressionOptions = {}\n): Promise<{\n compressFormat: string;\n buffer: Buffer;\n sizeBytes: number;\n}> => {\n\n const { maxWidth = 1024, quality = 80 } = options;\n\n const SUPPORTED_IMAGE_MIMES = [\n \"image/jpeg\",\n \"image/png\",\n \"image/webp\",\n \"image/tiff\",\n \"image/bmp\",\n ];\n\n // Skip unsupported images\n if (!SUPPORTED_IMAGE_MIMES.includes(mimeType)) {\n return { compressFormat: '', buffer, sizeBytes: buffer.byteLength };\n }\n\n let pipeline = sharp(buffer);\n\n if (maxWidth) {\n pipeline = pipeline.resize({ width: maxWidth });\n }\n\n let compressedBuffer: Buffer;\n\n switch (mimeType) {\n case \"image/png\":\n compressedBuffer = await pipeline.png({ quality }).toBuffer();\n break;\n case \"image/webp\":\n compressedBuffer = await pipeline.webp({ quality }).toBuffer();\n break;\n case \"image/jpeg\":\n case \"image/tiff\":\n case \"image/bmp\":\n default:\n compressedBuffer = await pipeline.jpeg({ quality }).toBuffer();\n break;\n }\n\n return {\n compressFormat: JSON.stringify(options),\n buffer: compressedBuffer,\n sizeBytes: compressedBuffer.byteLength\n };\n\n};\n\nexport const FileService = (props: FileServiceProps) => {\n\n const {\n prisma,\n accountId = 0,\n actionUserId = 0,\n } = props\n\n const fileModel = FileModel({ prisma, accountId, actionUserId })\n\n const initBatchCode = () => {\n return `${Date.now()}_${_.random(0, 999)}`;\n }\n\n const uploadFiles = async ({\n field_ref = \"item\",\n field_module = \"item\",\n tagName,\n label,\n refId,\n refId2,\n remark,\n description,\n foldernameDate,\n storageProviderName = \"local\",\n storageProviderOptions,\n files = [],\n imageCompressionOptions\n }: FileUploadProps) => {\n\n // get the correct provider\n const provider = getFileStorageProvider(storageProviderName, storageProviderOptions);\n\n const allResponses = []\n\n const batchCode = initBatchCode();\n\n const fileLabel = label ?? \"\"\n const referId1 = refId ?? 0\n const referId2 = refId2 ?? 0\n const fileRemark = remark ?? \"\"\n\n for (const file of files) {\n\n let bufferToUpload = file.buffer;\n let mimeType = file.mimeType ?? \"\"\n let sizeBytes = file?.sizeBytes\n let fileOriginalName = file.originalName;\n\n let outputSizeBytes = sizeBytes // output file size\n let fileCompressFormat = `` // output image compress\n\n // const ext = file.originalName?.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n // Only compress if image and options provided\n if (imageCompressionOptions) {\n const compressed = await compressImageBuffer(\n bufferToUpload,\n mimeType,\n imageCompressionOptions\n );\n\n fileCompressFormat = compressed.compressFormat,\n bufferToUpload = compressed.buffer;\n outputSizeBytes = compressed.sizeBytes; // update the file size\n }\n\n // upload using the provider - buffer\n const uploadResult = await provider.uploadFile({\n field_ref,\n field_module,\n buffer: bufferToUpload,\n ...(foldernameDate ? { foldernameDate } : {}),\n mimeType,\n fileName: fileOriginalName\n } as FileModuleRef & { buffer: Buffer; mimeType: string; fileName: string });\n\n const fieldRef = field_ref\n const fieldModule = field_module\n\n const fileName = uploadResult?.filename ?? \"\"\n const contentType = mimeType ?? \"\"\n const folderPath = uploadResult.assetPath ?? \"\"\n const assetUrl = uploadResult.assetUrl ?? \"\"\n const assetPath = uploadResult.assetPath ?? \"\"\n\n const inputType = `buffer`\n const inputFileSizeBytes = sizeBytes ?? 0\n const inputFileName = fileOriginalName ?? \"\"\n\n const fileSizeBytes = outputSizeBytes ?? 0\n // const fileCompressFormat = ``\n\n const foldernameDay = uploadResult?.folderName?.day ?? \"\"\n const foldernameMonth = uploadResult?.folderName?.month ?? \"\"\n const foldernameYear = uploadResult?.folderName?.year ?? \"\"\n\n const payload: FileCreateProps = {\n data: {\n fieldRef,\n fieldModule,\n tagName,\n description,\n remark: fileRemark,\n folderPath,\n assetUrl,\n assetPath,\n fileLabel,\n fileName,\n contentType,\n inputType,\n inputFileSizeBytes,\n inputFileName,\n fileSizeBytes,\n fileCompressFormat,\n storageProviderName,\n foldernameDay,\n foldernameMonth,\n foldernameYear,\n batchCode,\n referId1,\n referId2,\n } as FileCreateProps[\"data\"],\n };\n\n let response = await createFile(payload);\n\n allResponses.push(response)\n }\n\n return allResponses\n\n }\n\n // private\n const createFile = async ({ data }: FileCreateProps) => {\n\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create file payload: ${JSON.stringify(_data)}`);\n }\n\n const response = await fileModel.create({ data: _data })\n\n const newFileId = response?.file_id ?? \"\"\n\n return newFileId ? await getFile({ id: Number(newFileId) }) : null\n\n }\n\n // const updateFile = async ({ documentId, data }: FileUpdateProps) => {\n\n // return await getFile({ id: documentId })\n // }\n\n const getFile = async ({ id }: FileGetProps) => {\n\n let { data } = await listFiles({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelFileFields.file_id}`, operator: \"=\", value: id }],\n sortfield: `${ModelFileFields.file_id}`,\n sortorder: \"ASC\"\n })\n\n return data[0] ?? null;\n\n };\n\n const listFiles = async ({\n limit,\n offset,\n filters,\n sortfield,\n sortorder,\n }: FileListProps) => {\n\n let sqlSelect: string[] = []\n let sqlRelation: string[] = []\n let sqlGroupBy: string[] = []\n\n let sqlSelectAgg: string[] = []\n let sqlRelationAgg: string[] = []\n\n sqlSelect = [\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n sqlRelation = [\n sqlRelationMaps.creator,\n sqlRelationMaps.updater\n ]\n\n // sqlRelationAgg = []\n\n sqlGroupBy = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...defaultSqlSelect\n }\n\n let sqlWhere = [\n `mainfile.isdelete = false`,\n `mainfile.istrash = false`,\n // `LOWER(mainfile.doc_type) = LOWER('${documentTypeKey}')`\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n // get the listing data & count\n const { data, total } = await getListWithCount({\n model: fileModel,\n tableName: \"files\",\n mainAlias: \"mainfile\",\n countKey: `${ModelFileFields.file_id}`,\n accountId,\n sqlRelationMaps,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n const response = {\n data,\n total\n }\n\n return response\n\n };\n\n const removeFiles = async ({ fileIds }: FileRemoveProps) => {\n\n if (!fileIds.length) throwError('fileIds is required');\n\n const filesToDelete = await fileModel.list({\n where: {\n file_id: { in: fileIds }\n }\n });\n\n // console.log('filesToDelete', filesToDelete)\n\n // 2️⃣ Delete the physical files\n for (const file of filesToDelete) {\n\n const assetPath = file.asset_path\n\n if (assetPath) {\n try {\n const filePath = path.resolve(process.cwd(), assetPath);\n await fs.unlink(filePath);\n } catch (err) {\n // Log error but continue deleting others\n console.error(`Failed to delete file ${assetPath}:`, err);\n }\n }\n }\n\n // remove files\n const response = await fileModel.remove({ where: { [`${ModelFileFields.file_id}`]: { in: fileIds } } });\n\n return response\n };\n\n // const getDataTypes = () => {\n // return Object.values(fileDataTypes);\n // }\n\n return {\n uploadFiles,\n // createFile,\n // updateFile,\n getFile,\n listFiles,\n removeFiles,\n // getDataTypes\n }\n\n}\n\n"]}
@@ -5,7 +5,7 @@ type DocumentInjectionFieldMap = {
5
5
  documentId: any;
6
6
  };
7
7
  document_item: {
8
- documentId: any;
8
+ documentItemId: any;
9
9
  };
10
10
  };
11
11
  cash_sales: {
@@ -13,7 +13,7 @@ type DocumentInjectionFieldMap = {
13
13
  documentId: any;
14
14
  };
15
15
  document_item: {
16
- documentId: any;
16
+ documentItemId: any;
17
17
  };
18
18
  };
19
19
  sales: {
@@ -21,7 +21,7 @@ type DocumentInjectionFieldMap = {
21
21
  documentId: any;
22
22
  };
23
23
  document_item: {
24
- documentId: any;
24
+ documentItemId: any;
25
25
  };
26
26
  };
27
27
  proforma_sales: {
@@ -29,7 +29,7 @@ type DocumentInjectionFieldMap = {
29
29
  documentId: any;
30
30
  };
31
31
  document_item: {
32
- documentId: any;
32
+ documentItemId: any;
33
33
  };
34
34
  };
35
35
  retail_cash_sales: {
@@ -37,7 +37,7 @@ type DocumentInjectionFieldMap = {
37
37
  documentId: any;
38
38
  };
39
39
  document_item: {
40
- documentId: any;
40
+ documentItemId: any;
41
41
  };
42
42
  };
43
43
  replacement_delivery_order: {
@@ -45,7 +45,7 @@ type DocumentInjectionFieldMap = {
45
45
  documentId: any;
46
46
  };
47
47
  document_item: {
48
- documentId: any;
48
+ documentItemId: any;
49
49
  };
50
50
  };
51
51
  trip: {
@@ -53,7 +53,7 @@ type DocumentInjectionFieldMap = {
53
53
  documentId: any;
54
54
  };
55
55
  document_item: {
56
- documentId: any;
56
+ documentDocId: any;
57
57
  };
58
58
  };
59
59
  };
@@ -18,7 +18,7 @@ exports.documentRefPrefixMap = {
18
18
  document_item: "doci",
19
19
  };
20
20
  const getReplacePayload = (data) => {
21
- let { module, ref, documentId } = data;
21
+ let { module, ref } = data;
22
22
  let payload = {};
23
23
  payload = {
24
24
  ...payload,
@@ -28,16 +28,14 @@ const getReplacePayload = (data) => {
28
28
  }
29
29
  };
30
30
  if ("documentId" in data) {
31
- payload = { ...payload, ...(data?.documentId ? { [`${models_1.ModelDocumentInjectionFieldFields.document_id}`]: documentId } : {}) };
31
+ payload = { ...payload, ...(data?.documentId ? { [`${models_1.ModelDocumentInjectionFieldFields.document_id}`]: data.documentId } : {}) };
32
+ }
33
+ if ("documentItemId" in data) {
34
+ payload = { ...payload, ...(data?.documentItemId ? { [`${models_1.ModelDocumentInjectionFieldFields.document_item_id}`]: data.documentItemId } : {}) };
35
+ }
36
+ if ("documentDocId" in data) {
37
+ payload = { ...payload, ...(data?.documentDocId ? { [`${models_1.ModelDocumentInjectionFieldFields.document_doc_id}`]: data.documentDocId } : {}) };
32
38
  }
33
- // if ("branchId" in data) {
34
- // const branchId = data.branchId
35
- // payload = { ...payload, ...(data?.branchId ? { [`${ModelDocumentInjectionFieldFields.branch_id}`]: branchId } : {}) }
36
- // }
37
- // if ("memberId" in data) {
38
- // const memberId = data.memberId
39
- // payload = { ...payload, ...(data?.memberId ? { [`${ModelDocumentInjectionFieldFields.member_id}`]: memberId } : {}) }
40
- // }
41
39
  const rest = data.fields;
42
40
  // apply dynamic prefix: refPrefix_modulePrefix_fieldKey
43
41
  const refPrefix = exports.documentRefPrefixMap[ref] ?? ref;
@@ -58,7 +56,9 @@ const DocumentInjectionFieldService = (props) => {
58
56
  const where = {
59
57
  [models_1.ModelDocumentInjectionFieldFields.field_module]: data.module,
60
58
  [models_1.ModelDocumentInjectionFieldFields.field_ref]: data.ref,
61
- ...(data?.documentId ? { [models_1.ModelDocumentInjectionFieldFields.document_id]: data.documentId } : {}),
59
+ ...(("documentId" in data) ? { [models_1.ModelDocumentInjectionFieldFields.document_id]: data.documentId } : {}),
60
+ ...(("documentItemId" in data) ? { [models_1.ModelDocumentInjectionFieldFields.document_item_id]: data.documentItemId } : {}),
61
+ ...(("documentDocId" in data) ? { [models_1.ModelDocumentInjectionFieldFields.document_doc_id]: data.documentDocId } : {}),
62
62
  };
63
63
  // Narrow: only include branchId if data.ref === "branch"
64
64
  // if (data.ref === "branch") {
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentInjectionFieldService.js","sourceRoot":"","sources":["../../../src/services/injection_field/DocumentInjectionFieldService.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DocumentInjectionFieldModel,\n ModelDocumentInjectionFieldFields,\n} from \"@/models\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { convertPayloadByTableSchema, validateModelFieldsWithData } from \"@/utils\";\n\ntype DocumentInjectionFieldMap = {\n delivery: {\n document: { documentId: any };\n document_item: { documentId: any; };\n };\n cash_sales: {\n document: { documentId: any };\n document_item: { documentId: any; };\n };\n sales: {\n document: { documentId: any };\n document_item: { documentId: any; };\n };\n proforma_sales: {\n document: { documentId: any };\n document_item: { documentId: any; };\n };\n retail_cash_sales: {\n document: { documentId: any };\n document_item: { documentId: any; };\n };\n replacement_delivery_order: {\n document: { documentId: any };\n document_item: { documentId: any; };\n },\n trip: {\n document: { documentId: any };\n document_item: { documentId: any; };\n }\n};\n\ntype DocumentInjectionFieldModule = keyof DocumentInjectionFieldMap;\n// type DocumentInjectionFieldRef<M extends DocumentInjectionFieldModule> = keyof DocumentInjectionFieldMap[M];\n\nexport const documentModulePrefixMap: Record<DocumentInjectionFieldModule, string> = {\n delivery: \"do\",\n cash_sales: \"cs\",\n proforma_sales: \"pso\",\n sales: \"so\",\n retail_cash_sales: \"rcs\",\n replacement_delivery_order: \"rdo\",\n trip: \"trp\"\n};\n\nexport const documentRefPrefixMap: Record<\"document\" | \"document_item\", string> = {\n document: \"doc\",\n document_item: \"doci\",\n};\n\nexport type DocumentInjectionFieldModuleRef = {\n [M in DocumentInjectionFieldModule]: {\n [R in keyof DocumentInjectionFieldMap[M]]: {\n module: M;\n ref: R;\n } & DocumentInjectionFieldMap[M][R];\n }[keyof DocumentInjectionFieldMap[M]];\n}[DocumentInjectionFieldModule];\n\nexport type DocumentInjectionFieldServiceProps = DefaultServiceProps & {};\n\nexport type DocumentInjectionFieldRemoveProps = {\n ids: number[]\n};\n\nexport type DocumentInjectionFieldReplaceProps = {\n data: DocumentInjectionFieldModuleRef & {\n fields: any\n }\n}\n\nconst getReplacePayload = (data: DocumentInjectionFieldReplaceProps[\"data\"]) => {\n\n let { module, ref, documentId } = data\n\n let payload: Record<string, any> = {};\n\n payload = {\n ...payload,\n ...{\n [`${ModelDocumentInjectionFieldFields.field_module}`]: module,\n [`${ModelDocumentInjectionFieldFields.field_ref}`]: ref,\n }\n }\n\n if (\"documentId\" in data) {\n payload = { ...payload, ...(data?.documentId ? { [`${ModelDocumentInjectionFieldFields.document_id}`]: documentId } : {}) }\n }\n\n // if (\"branchId\" in data) {\n // const branchId = data.branchId\n // payload = { ...payload, ...(data?.branchId ? { [`${ModelDocumentInjectionFieldFields.branch_id}`]: branchId } : {}) }\n // }\n\n // if (\"memberId\" in data) {\n // const memberId = data.memberId\n // payload = { ...payload, ...(data?.memberId ? { [`${ModelDocumentInjectionFieldFields.member_id}`]: memberId } : {}) }\n // }\n\n const rest = data.fields\n\n // apply dynamic prefix: refPrefix_modulePrefix_fieldKey\n const refPrefix = documentRefPrefixMap[ref as keyof typeof documentRefPrefixMap] ?? ref;\n const modulePrefix = documentModulePrefixMap[module as DocumentInjectionFieldModule] ?? module;\n\n for (const [key, value] of Object.entries(rest)) {\n payload[`${refPrefix}_${modulePrefix}_${key}`] = value;\n }\n\n return payload\n\n}\n\nexport const DocumentInjectionFieldService = (props: DocumentInjectionFieldServiceProps) => {\n\n const {\n prisma,\n accountId = 0,\n actionUserId = 0\n } = props\n\n const documentInjectionFieldModel = DocumentInjectionFieldModel({ prisma, accountId, actionUserId })\n\n const replaceDocumentInjectionField = async ({ data }: DocumentInjectionFieldReplaceProps) => {\n\n const _data = getReplacePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create payload: ${JSON.stringify(_data)}`);\n }\n\n const where: Record<string, any> = {\n [ModelDocumentInjectionFieldFields.field_module]: data.module,\n [ModelDocumentInjectionFieldFields.field_ref]: data.ref,\n ...(data?.documentId ? { [ModelDocumentInjectionFieldFields.document_id]: data.documentId } : {}),\n };\n\n // Narrow: only include branchId if data.ref === \"branch\"\n // if (data.ref === \"branch\") {\n // where[ModelDocumentInjectionFieldFields.branch_id] = (data as Extract<DocumentInjectionFieldModuleRef, { ref: \"branch\" }>).branchId;\n // }\n\n let modelFields = await documentInjectionFieldModel.getFields()\n\n let finalData = convertPayloadByTableSchema(_data, modelFields)\n\n // console.log('modelFields', modelFields)\n // console.log('finalData', finalData)\n\n\n // check the request fields are in the exactly schema\n const resultInvalidFields = validateModelFieldsWithData(modelFields, finalData)\n\n if (resultInvalidFields.length > 0) {\n throw Error(`Invalid injection fields: ${resultInvalidFields.join(\", \")} (Request: ${Object.keys(finalData).join(\", \")})`)\n }\n\n // check the record exists\n let exists = await documentInjectionFieldModel.get({ where })\n\n let response: any = {}\n\n if (exists) { // update existing\n\n // remove unwanted to override\n delete finalData.field_module;\n delete finalData.field_ref;\n delete finalData.document_id;\n delete finalData.document_item_id;\n\n response = await documentInjectionFieldModel.update({ data: finalData, where, disableRollback: true })\n } else { // create new\n response = await documentInjectionFieldModel.create({ data: finalData })\n }\n\n return response\n }\n\n return {\n replaceDocumentInjectionField\n }\n\n}\n\n\n"]}
1
+ {"version":3,"file":"DocumentInjectionFieldService.js","sourceRoot":"","sources":["../../../src/services/injection_field/DocumentInjectionFieldService.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DocumentInjectionFieldModel,\n ModelDocumentInjectionFieldFields,\n} from \"@/models\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { convertPayloadByTableSchema, validateModelFieldsWithData } from \"@/utils\";\n\ntype DocumentInjectionFieldMap = {\n delivery: {\n document: { documentId: any };\n document_item: { documentItemId: any; };\n };\n cash_sales: {\n document: { documentId: any };\n document_item: { documentItemId: any; };\n };\n sales: {\n document: { documentId: any };\n document_item: { documentItemId: any; };\n };\n proforma_sales: {\n document: { documentId: any };\n document_item: { documentItemId: any; };\n };\n retail_cash_sales: {\n document: { documentId: any };\n document_item: { documentItemId: any; };\n };\n replacement_delivery_order: {\n document: { documentId: any };\n document_item: { documentItemId: any; };\n },\n trip: {\n document: { documentId: any };\n document_item: { documentDocId: any; };\n }\n};\n\ntype DocumentInjectionFieldModule = keyof DocumentInjectionFieldMap;\n// type DocumentInjectionFieldRef<M extends DocumentInjectionFieldModule> = keyof DocumentInjectionFieldMap[M];\n\nexport const documentModulePrefixMap: Record<DocumentInjectionFieldModule, string> = {\n delivery: \"do\",\n cash_sales: \"cs\",\n proforma_sales: \"pso\",\n sales: \"so\",\n retail_cash_sales: \"rcs\",\n replacement_delivery_order: \"rdo\",\n trip: \"trp\"\n};\n\nexport const documentRefPrefixMap: Record<\"document\" | \"document_item\", string> = {\n document: \"doc\",\n document_item: \"doci\",\n};\n\nexport type DocumentInjectionFieldModuleRef = {\n [M in DocumentInjectionFieldModule]: {\n [R in keyof DocumentInjectionFieldMap[M]]: {\n module: M;\n ref: R;\n } & DocumentInjectionFieldMap[M][R];\n }[keyof DocumentInjectionFieldMap[M]];\n}[DocumentInjectionFieldModule];\n\nexport type DocumentInjectionFieldServiceProps = DefaultServiceProps & {};\n\nexport type DocumentInjectionFieldRemoveProps = {\n ids: number[]\n};\n\nexport type DocumentInjectionFieldReplaceProps = {\n data: DocumentInjectionFieldModuleRef & {\n fields: any\n }\n}\n\nconst getReplacePayload = (data: DocumentInjectionFieldReplaceProps[\"data\"]) => {\n\n let { module, ref } = data\n\n let payload: Record<string, any> = {};\n\n payload = {\n ...payload,\n ...{\n [`${ModelDocumentInjectionFieldFields.field_module}`]: module,\n [`${ModelDocumentInjectionFieldFields.field_ref}`]: ref,\n }\n }\n\n if (\"documentId\" in data) {\n payload = { ...payload, ...(data?.documentId ? { [`${ModelDocumentInjectionFieldFields.document_id}`]: data.documentId } : {}) }\n }\n\n if (\"documentItemId\" in data) {\n payload = { ...payload, ...(data?.documentItemId ? { [`${ModelDocumentInjectionFieldFields.document_item_id}`]: data.documentItemId } : {}) }\n }\n\n if (\"documentDocId\" in data) {\n payload = { ...payload, ...(data?.documentDocId ? { [`${ModelDocumentInjectionFieldFields.document_doc_id}`]: data.documentDocId } : {}) }\n }\n\n const rest = data.fields\n\n // apply dynamic prefix: refPrefix_modulePrefix_fieldKey\n const refPrefix = documentRefPrefixMap[ref as keyof typeof documentRefPrefixMap] ?? ref;\n const modulePrefix = documentModulePrefixMap[module as DocumentInjectionFieldModule] ?? module;\n\n for (const [key, value] of Object.entries(rest)) {\n payload[`${refPrefix}_${modulePrefix}_${key}`] = value;\n }\n\n return payload\n\n}\n\nexport const DocumentInjectionFieldService = (props: DocumentInjectionFieldServiceProps) => {\n\n const {\n prisma,\n accountId = 0,\n actionUserId = 0\n } = props\n\n const documentInjectionFieldModel = DocumentInjectionFieldModel({ prisma, accountId, actionUserId })\n\n const replaceDocumentInjectionField = async ({ data }: DocumentInjectionFieldReplaceProps) => {\n\n const _data = getReplacePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create payload: ${JSON.stringify(_data)}`);\n }\n\n const where: Record<string, any> = {\n [ModelDocumentInjectionFieldFields.field_module]: data.module,\n [ModelDocumentInjectionFieldFields.field_ref]: data.ref,\n ...((\"documentId\" in data) ? { [ModelDocumentInjectionFieldFields.document_id]: data.documentId } : {}),\n ...((\"documentItemId\" in data) ? { [ModelDocumentInjectionFieldFields.document_item_id]: data.documentItemId } : {}),\n ...((\"documentDocId\" in data) ? { [ModelDocumentInjectionFieldFields.document_doc_id]: data.documentDocId } : {}),\n };\n\n // Narrow: only include branchId if data.ref === \"branch\"\n // if (data.ref === \"branch\") {\n // where[ModelDocumentInjectionFieldFields.branch_id] = (data as Extract<DocumentInjectionFieldModuleRef, { ref: \"branch\" }>).branchId;\n // }\n\n let modelFields = await documentInjectionFieldModel.getFields()\n\n let finalData = convertPayloadByTableSchema(_data, modelFields)\n\n // console.log('modelFields', modelFields)\n // console.log('finalData', finalData)\n\n\n // check the request fields are in the exactly schema\n const resultInvalidFields = validateModelFieldsWithData(modelFields, finalData)\n\n if (resultInvalidFields.length > 0) {\n throw Error(`Invalid injection fields: ${resultInvalidFields.join(\", \")} (Request: ${Object.keys(finalData).join(\", \")})`)\n }\n\n // check the record exists\n let exists = await documentInjectionFieldModel.get({ where })\n\n let response: any = {}\n\n if (exists) { // update existing\n\n // remove unwanted to override\n delete finalData.field_module;\n delete finalData.field_ref;\n delete finalData.document_id;\n delete finalData.document_item_id;\n\n response = await documentInjectionFieldModel.update({ data: finalData, where, disableRollback: true })\n } else { // create new\n response = await documentInjectionFieldModel.create({ data: finalData })\n }\n\n return response\n }\n\n return {\n replaceDocumentInjectionField\n }\n\n}\n\n\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "storemw-core-api",
3
- "version": "1.0.38",
3
+ "version": "1.0.40",
4
4
  "description": "STOREMW Core API",
5
5
  "main": "dist/app.js",
6
6
  "types": "dist/app.d.ts",
@@ -2017,7 +2017,7 @@ model document_injection_fields {
2017
2017
  updateuserid BigInt @default(0)
2018
2018
  isdelete Boolean? @default(false)
2019
2019
  istrash Boolean? @default(false)
2020
- ax_accountid BigInt @default(0)
2020
+ accountid BigInt @default(0)
2021
2021
  doc_do_pack_qty2_bk_39 BigInt @default(0)
2022
2022
  doc_do_pack_qty2 BigInt? @default(0)
2023
2023
  doci_do_pack_item_qty BigInt? @default(0)