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.
- package/dist/configs/config.d.ts +8 -0
- package/dist/configs/config.js +8 -0
- package/dist/configs/config.js.map +1 -1
- package/dist/controllers/file/fileController.js +28 -18
- package/dist/controllers/file/fileController.js.map +1 -1
- package/dist/controllers/injection_field/injectionFieldController.js +6 -0
- package/dist/controllers/injection_field/injectionFieldController.js.map +1 -1
- package/dist/models/injection_field/DocumentInjectionFieldModel.d.ts +13 -13
- package/dist/schema/payload/file/schemaFile.d.ts +6 -0
- package/dist/schema/payload/file/schemaFile.js +2 -0
- package/dist/schema/payload/file/schemaFile.js.map +1 -1
- package/dist/services/file/FileGoogleCloudStorageProvider.js +8 -3
- package/dist/services/file/FileGoogleCloudStorageProvider.js.map +1 -1
- package/dist/services/file/FileService.d.ts +4 -1
- package/dist/services/file/FileService.js +5 -4
- package/dist/services/file/FileService.js.map +1 -1
- package/dist/services/injection_field/DocumentInjectionFieldService.d.ts +7 -7
- package/dist/services/injection_field/DocumentInjectionFieldService.js +11 -11
- package/dist/services/injection_field/DocumentInjectionFieldService.js.map +1 -1
- package/package.json +1 -1
- package/prisma/schema.prisma +1 -1
package/dist/configs/config.d.ts
CHANGED
|
@@ -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;
|
package/dist/configs/config.js
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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" | "
|
|
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" | "
|
|
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
|
-
|
|
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
|
-
|
|
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":";;;;;;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,IAAI,kBAAkB,GAAG,
|
|
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 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
|
|
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":";;;;;;AAAA,mCAAyD;AACzD,gDAAwB;AACxB,2DAA6B;AAE7B,qCAGkB;AAIlB,+EAAgG;AAQhG,+BAAuH;AAEvH,+BAGe;AAEF,QAAA,aAAa,GAAG;AACzB,uDAAuD;CAC1D,CAAA;AAiFD,6BAA6B;AAC7B,cAAc;AACd,6BAA6B;AAC7B,kCAAkC;AAClC,wBAAwB;AACxB,QAAQ;AACR,IAAI;AAEJ,kCAAkC;AAClC,0BAA0B;AAC1B,iBAAiB;AACjB,IAAI;AAEJ,IAAI,aAAa,GAAG,IAAA,4BAAsB,GAAE,CAAA;AAC5C,IAAI,gBAAgB,GAAG,IAAA,+BAAyB,GAAE,CAAA;AAElD,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,IAAA,4BAAsB,EAAC,EAAE,CAAC,CAAA;AAEpE,MAAM,gBAAgB,GAAG,CAAC,IAA6B,EAAE,EAAE;IAEvD,OAAO;QACH,4CAA4C;QAC5C,CAAC,GAAG,wBAAe,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS;QACjD,CAAC,GAAG,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ;QAC/C,CAAC,GAAG,wBAAe,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS;QACjD,CAAC,GAAG,wBAAe,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW;QACrD,CAAC,GAAG,wBAAe,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW;QACrD,CAAC,GAAG,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ;QAC/C,CAAC,GAAG,wBAAe,CAAC,oBAAoB,EAAE,CAAC,EAAE,IAAI,CAAC,kBAAkB;QACpE,CAAC,GAAG,wBAAe,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS;QACjD,CAAC,GAAG,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ;QAC/C,CAAC,GAAG,wBAAe,CAAC,eAAe,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa;QAC1D,CAAC,GAAG,wBAAe,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO;QAC7C,CAAC,GAAG,wBAAe,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW;QACpD,CAAC,GAAG,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QACjE,CAAC,GAAG,wBAAe,CAAC,gBAAgB,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;QACrE,CAAC,GAAG,wBAAe,CAAC,eAAe,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;QACnE,CAAC,GAAG,wBAAe,CAAC,eAAe,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa;QAC1D,CAAC,GAAG,wBAAe,CAAC,qBAAqB,EAAE,CAAC,EAAE,IAAI,CAAC,kBAAkB;QACrE,CAAC,GAAG,wBAAe,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS;QACjD,CAAC,GAAG,wBAAe,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ;QAChD,CAAC,GAAG,wBAAe,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ;QAChD,CAAC,GAAG,wBAAe,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;QAC1C,CAAC,GAAG,wBAAe,CAAC,qBAAqB,EAAE,CAAC,EAAE,IAAI,CAAC,mBAAmB;KACzE,CAAA;AAEL,CAAC,CAAA;AAEM,MAAM,mBAAmB,GAAG,KAAK,EACpC,MAAc,EACd,QAAgB,EAChB,UAAuC,EAAE,EAK1C,EAAE;IAED,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAElD,MAAM,qBAAqB,GAAG;QAC1B,YAAY;QACZ,WAAW;QACX,YAAY;QACZ,YAAY;QACZ,WAAW;KACd,CAAC;IAEF,0BAA0B;IAC1B,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;IACxE,CAAC;IAED,IAAI,QAAQ,GAAG,IAAA,aAAK,EAAC,MAAM,CAAC,CAAC;IAE7B,IAAI,QAAQ,EAAE,CAAC;QACX,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,gBAAwB,CAAC;IAE7B,QAAQ,QAAQ,EAAE,CAAC;QACf,KAAK,WAAW;YACZ,gBAAgB,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC9D,MAAM;QACV,KAAK,YAAY;YACb,gBAAgB,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC/D,MAAM;QACV,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY,CAAC;QAClB,KAAK,WAAW,CAAC;QACjB;YACI,gBAAgB,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC/D,MAAM;IACd,CAAC;IAED,OAAO;QACH,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QACvC,MAAM,EAAE,gBAAgB;QACxB,SAAS,EAAE,gBAAgB,CAAC,UAAU;KACzC,CAAC;AAEN,CAAC,CAAC;AAtDW,QAAA,mBAAmB,uBAsD9B;AAEK,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAE,EAAE;IAEnD,MAAM,EACF,MAAM,EACN,SAAS,GAAG,CAAC,EACb,YAAY,GAAG,CAAC,GACnB,GAAG,KAAK,CAAA;IAET,MAAM,SAAS,GAAG,IAAA,kBAAS,EAAC,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAA;IAEhE,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,SAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IAC/C,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,KAAK,EAAE,EACvB,SAAS,GAAG,MAAM,EAClB,YAAY,GAAG,MAAM,EACrB,OAAO,EACP,KAAK,EACL,KAAK,EACL,MAAM,EACN,MAAM,EACN,WAAW,EACX,cAAc,EACd,mBAAmB,GAAG,OAAO,EAC7B,sBAAsB,EACtB,KAAK,GAAG,EAAE,EACV,uBAAuB,EACT,EAAE,EAAE;QAElB,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,IAAA,oDAAsB,EAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;QAErF,MAAM,YAAY,GAAG,EAAE,CAAA;QAEvB,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;QAElC,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE,CAAA;QAC7B,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC,CAAA;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,CAAA;QAC5B,MAAM,UAAU,GAAG,MAAM,IAAI,EAAE,CAAA;QAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAEvB,IAAI,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;YACjC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;YAClC,IAAI,SAAS,GAAG,IAAI,EAAE,SAAS,CAAA;YAC/B,IAAI,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC;YAEzC,IAAI,eAAe,GAAG,SAAS,CAAA,CAAC,mBAAmB;YACnD,IAAI,kBAAkB,GAAG,EAAE,CAAA,CAAC,wBAAwB;YAEpD,wEAAwE;YAExE,8CAA8C;YAC9C,IAAI,uBAAuB,EAAE,CAAC;gBAC1B,MAAM,UAAU,GAAG,MAAM,IAAA,2BAAmB,EACxC,cAAc,EACd,QAAQ,EACR,uBAAuB,CAC1B,CAAC;gBAEF,kBAAkB,GAAG,UAAU,CAAC,cAAc;oBAC1C,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC;gBACvC,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,uBAAuB;YACnE,CAAC;YAED,qCAAqC;YACrC,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC;gBAC3C,SAAS;gBACT,YAAY;gBACZ,MAAM,EAAE,cAAc;gBACtB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,QAAQ;gBACR,QAAQ,EAAE,gBAAgB;aAC6C,CAAC,CAAC;YAE7E,MAAM,QAAQ,GAAG,SAAS,CAAA;YAC1B,MAAM,WAAW,GAAG,YAAY,CAAA;YAEhC,MAAM,QAAQ,GAAG,YAAY,EAAE,QAAQ,IAAI,EAAE,CAAA;YAC7C,MAAM,WAAW,GAAG,QAAQ,IAAI,EAAE,CAAA;YAClC,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,IAAI,EAAE,CAAA;YAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,IAAI,EAAE,CAAA;YAC5C,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,IAAI,EAAE,CAAA;YAE9C,MAAM,SAAS,GAAG,QAAQ,CAAA;YAC1B,MAAM,kBAAkB,GAAG,SAAS,IAAI,CAAC,CAAA;YACzC,MAAM,aAAa,GAAG,gBAAgB,IAAI,EAAE,CAAA;YAE5C,MAAM,aAAa,GAAG,eAAe,IAAI,CAAC,CAAA;YAC1C,gCAAgC;YAEhC,MAAM,aAAa,GAAG,YAAY,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,CAAA;YACzD,MAAM,eAAe,GAAG,YAAY,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE,CAAA;YAC7D,MAAM,cAAc,GAAG,YAAY,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAA;YAE3D,MAAM,OAAO,GAAoB;gBAC7B,IAAI,EAAE;oBACF,QAAQ;oBACR,WAAW;oBACX,OAAO;oBACP,WAAW;oBACX,MAAM,EAAE,UAAU;oBAClB,UAAU;oBACV,QAAQ;oBACR,SAAS;oBACT,SAAS;oBACT,QAAQ;oBACR,WAAW;oBACX,SAAS;oBACT,kBAAkB;oBAClB,aAAa;oBACb,aAAa;oBACb,kBAAkB;oBAClB,mBAAmB;oBACnB,aAAa;oBACb,eAAe;oBACf,cAAc;oBACd,SAAS;oBACT,QAAQ;oBACR,QAAQ;iBACgB;aAC/B,CAAC;YAEF,IAAI,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YAEzC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC/B,CAAC;QAED,OAAO,YAAY,CAAA;IAEvB,CAAC,CAAA;IAED,UAAU;IACV,MAAM,UAAU,GAAG,KAAK,EAAE,EAAE,IAAI,EAAmB,EAAE,EAAE;QAEnD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAEpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAExD,MAAM,SAAS,GAAG,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAA;QAEzC,OAAO,SAAS,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEtE,CAAC,CAAA;IAED,wEAAwE;IAExE,+CAA+C;IAC/C,IAAI;IAEJ,MAAM,OAAO,GAAG,KAAK,EAAE,EAAE,EAAE,EAAgB,EAAE,EAAE;QAE3C,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,CAAC;YAC3B,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,wBAAe,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAC5E,SAAS,EAAE,GAAG,wBAAe,CAAC,OAAO,EAAE;YACvC,SAAS,EAAE,KAAK;SACnB,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAE3B,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,EAAE,EACrB,KAAK,EACL,MAAM,EACN,OAAO,EACP,SAAS,EACT,SAAS,GACG,EAAE,EAAE;QAEhB,IAAI,SAAS,GAAa,EAAE,CAAA;QAC5B,IAAI,WAAW,GAAa,EAAE,CAAA;QAC9B,IAAI,UAAU,GAAa,EAAE,CAAA;QAE7B,IAAI,YAAY,GAAa,EAAE,CAAA;QAC/B,IAAI,cAAc,GAAa,EAAE,CAAA;QAEjC,SAAS,GAAG;YACR,IAAA,oBAAc,EAAC,EAAE,EAAE,aAAa,CAAC;YACjC,IAAA,oBAAc,EAAC,EAAE,EAAE,gBAAgB,CAAC;SACvC,CAAA;QAED,WAAW,GAAG;YACV,eAAe,CAAC,OAAO;YACvB,eAAe,CAAC,OAAO;SAC1B,CAAA;QAED,sBAAsB;QAEtB,UAAU,GAAG;YACT,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;YAC7B,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;SACnC,CAAA;QAED,IAAI,aAAa,GAAG;YAChB,GAAG,aAAa;YAChB,GAAG,gBAAgB;SACtB,CAAA;QAED,IAAI,QAAQ,GAAG;YACX,2BAA2B;YAC3B,0BAA0B;YAC1B,2DAA2D;SAC9D,CAAA;QAED,IAAI,UAAU,GAAG,IAAA,qBAAe,EAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QACtD,IAAI,cAAc,GAAG,IAAA,yBAAmB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAEvD,+BAA+B;QAC/B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,sBAAgB,EAAC;YAC3C,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,UAAU;YACrB,QAAQ,EAAE,GAAG,wBAAe,CAAC,OAAO,EAAE;YACtC,SAAS;YACT,eAAe;YACf,OAAO;YACP,aAAa;YACb,SAAS;YACT,YAAY;YACZ,WAAW;YACX,cAAc;YACd,QAAQ;YACR,UAAU;YACV,UAAU;YACV,cAAc;SACjB,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG;YACb,IAAI;YACJ,KAAK;SACR,CAAA;QAED,OAAO,QAAQ,CAAA;IAEnB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,EAAE,EAAE,OAAO,EAAmB,EAAE,EAAE;QAEvD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,IAAA,kBAAU,EAAC,qBAAqB,CAAC,CAAC;QAEvD,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC;YACvC,KAAK,EAAE;gBACH,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;aAC3B;SACJ,CAAC,CAAC;QAEH,8CAA8C;QAE9C,gCAAgC;QAChC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YAE/B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAA;YAEjC,IAAI,SAAS,EAAE,CAAC;gBACZ,IAAI,CAAC;oBACD,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;oBACxD,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC9B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACX,yCAAyC;oBACzC,OAAO,CAAC,KAAK,CAAC,yBAAyB,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC9D,CAAC;YACL,CAAC;QACL,CAAC;QAED,eAAe;QACf,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAExG,OAAO,QAAQ,CAAA;IACnB,CAAC,CAAC;IAEF,+BAA+B;IAC/B,2CAA2C;IAC3C,IAAI;IAEJ,OAAO;QACH,WAAW;QACX,cAAc;QACd,cAAc;QACd,OAAO;QACP,SAAS;QACT,WAAW;QACX,eAAe;KAClB,CAAA;AAEL,CAAC,CAAA;AArSY,QAAA,WAAW,eAqSvB","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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
...(
|
|
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
package/prisma/schema.prisma
CHANGED
|
@@ -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
|
-
|
|
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)
|