storemw-core-api 1.0.164 → 1.0.166

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.
Files changed (29) hide show
  1. package/dist/features/file_storage/fileStorageRegistry.js +2 -1
  2. package/dist/features/file_storage/fileStorageRegistry.js.map +1 -1
  3. package/dist/lib/index.d.ts +2 -0
  4. package/dist/lib/index.js +5 -1
  5. package/dist/lib/index.js.map +1 -1
  6. package/dist/lib/query_builder/queryBuilder.d.ts +1 -1
  7. package/dist/lib/query_builder/queryBuilder.js +66 -15
  8. package/dist/lib/query_builder/queryBuilder.js.map +1 -1
  9. package/dist/lib/query_builder/queryDocumentProfile.d.ts +7 -0
  10. package/dist/lib/query_builder/queryDocumentProfile.js +87 -0
  11. package/dist/lib/query_builder/queryDocumentProfile.js.map +1 -0
  12. package/dist/lib/query_builder/queryUserBranch.d.ts +10 -0
  13. package/dist/lib/query_builder/queryUserBranch.js +31 -0
  14. package/dist/lib/query_builder/queryUserBranch.js.map +1 -0
  15. package/dist/middlewares/route/validateFile.js +1 -1
  16. package/dist/middlewares/route/validateFile.js.map +1 -1
  17. package/dist/services/branch/UserBranchService.d.ts +2 -2
  18. package/dist/services/branch/UserBranchService.js +53 -22
  19. package/dist/services/branch/UserBranchService.js.map +1 -1
  20. package/dist/services/document/DocumentProfileService.js +47 -19
  21. package/dist/services/document/DocumentProfileService.js.map +1 -1
  22. package/dist/services/file/FileAwsS3StorageProvider.js +3 -1
  23. package/dist/services/file/FileAwsS3StorageProvider.js.map +1 -1
  24. package/dist/services/file/FileGoogleCloudStorageProvider.js +3 -1
  25. package/dist/services/file/FileGoogleCloudStorageProvider.js.map +1 -1
  26. package/dist/services/file/FileService.d.ts +1 -0
  27. package/dist/services/file/FileService.js +68 -1
  28. package/dist/services/file/FileService.js.map +1 -1
  29. package/package.json +1 -1
@@ -20,7 +20,8 @@ exports.FileStorageHook = {
20
20
  "audio/x-wav",
21
21
  "audio/webm",
22
22
  "audio/m4a",
23
- "audio/mpeg"
23
+ "audio/mpeg",
24
+ "audio/mp4"
24
25
  ],
25
26
  imageMaxWidth: 800,
26
27
  imageQuality: 80,
@@ -1 +1 @@
1
- {"version":3,"file":"fileStorageRegistry.js","sourceRoot":"","sources":["../../../src/features/file_storage/fileStorageRegistry.ts"],"names":[],"mappings":";;;AACA,mCAAoC;AACpC,0BAA0B;AAE1B,oCAAoC;AACvB,QAAA,eAAe,GAA4B;IACpD,OAAO,EAAE,KAAK,IAAwC,EAAE;QAEpD,MAAM,oBAAoB,GAAsD;YAC5E,aAAa,EAAE,QAAQ;YACvB,gBAAgB,EAAE;gBACd,YAAY;gBACZ,WAAW;gBACX,iBAAiB;gBACjB,WAAW;gBACX,WAAW;gBACX,WAAW;gBACX,WAAW;gBACX,YAAY;gBACZ,aAAa;gBACb,YAAY;gBACZ,WAAW;gBACX,YAAY;aACf;YACD,aAAa,EAAE,GAAG;YAClB,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,UAAU;YACvB,eAAe,EAAE,IAAI;SACxB,CAAA;QAED,QAAQ;QACR,OAAO;YACH,WAAW,EAAE,OAAO;YACpB,oBAAoB;YACpB,mBAAmB,EAAE;gBACjB,OAAO,EAAE,sCAAsC;gBAC/C,QAAQ,EAAE,gBAAgB;gBAC1B,uBAAuB,EAAE,KAAK;gBAC9B,uBAAuB,EAAE,KAAK;aACjC;SACJ,CAAA;QAED,SAAS;QACT,WAAW;QACX,6BAA6B;QAC7B,4BAA4B;QAC5B,8BAA8B;QAC9B,0EAA0E;QAC1E,wBAAwB;QACxB,8CAA8C;QAC9C,sEAAsE;QACtE,0CAA0C;QAC1C,yCAAyC;QACzC,QAAQ;QACR,IAAI;IAER,CAAC;IACD,aAAa,EAAE,KAAK,EAAE,KAAyC,EAAE,EAAE;QAC/D,IAAA,kBAAU,EAAC,uDAAuD,CAAC,CAAA;IACvE,CAAC;IACD,eAAe,EAAE,KAAK,EAAE,KAA2C,EAAE,EAAE;QACnE,IAAA,kBAAU,EAAC,yDAAyD,CAAC,CAAA;IACzE,CAAC;CACJ,CAAA","sourcesContent":["import { FeatureFileStorageProps, FeatureFileStorageOptions, FeatureFileStorageSuccessUploadProps, FeatureFileStorageStartUploadProps } from './fileStorageType'\nimport { throwError } from '@/utils'\n// import path from 'path'\n\n// Runtime storage for injected hook\nexport const FileStorageHook: FeatureFileStorageProps = {\n onSetup: async (): Promise<FeatureFileStorageOptions> => {\n\n const storageConfiguration: FeatureFileStorageOptions[\"storageConfiguration\"] = {\n uploadMaxSize: 52428800,\n allowedFileTypes: [\n \"image/jpeg\",\n \"image/png\",\n \"application/pdf\",\n \"video/mp4\",\n \"audio/ogg\",\n \"audio/wav\",\n \"audio/wav\",\n \"audio/wave\",\n \"audio/x-wav\",\n \"audio/webm\",\n \"audio/m4a\",\n \"audio/mpeg\"\n ],\n imageMaxWidth: 800,\n imageQuality: 80,\n videoCRF: 28,\n videoPreset: \"veryfast\",\n videoResolution: 1280\n }\n\n // local\n return {\n storageType: \"local\",\n storageConfiguration,\n localStorageOptions: {\n baseUrl: \"http://localhost:8080/public/uploads\",\n basePath: \"public/uploads\",\n skipFolderNameModuleRef: false,\n skipFolderNameYearMonth: false\n }\n }\n\n // gcloud\n // return {\n // storageType: \"gcloud\",\n // storageConfiguration,\n // gcloudStorageOptions: {\n // baseUrl: \"https://storage.googleapis.com/chinlai-erp-delivery\",\n // basePath: \"\",\n // bucketName: \"chinlai-erp-delivery\",\n // credentialPath: \"config/chinlai-erp-api-253ac2637a8e.json\",\n // skipFolderNameModuleRef: false,\n // skipFolderNameYearMonth: false\n // }\n // }\n\n },\n onStartUpload: async (props: FeatureFileStorageStartUploadProps) => {\n throwError(`Invalid settings for onStartUpload in FileStorageHook`)\n },\n onSuccessUpload: async (props: FeatureFileStorageSuccessUploadProps) => {\n throwError(`Invalid settings for onSuccessUpload in FileStorageHook`)\n }\n}"]}
1
+ {"version":3,"file":"fileStorageRegistry.js","sourceRoot":"","sources":["../../../src/features/file_storage/fileStorageRegistry.ts"],"names":[],"mappings":";;;AACA,mCAAoC;AACpC,0BAA0B;AAE1B,oCAAoC;AACvB,QAAA,eAAe,GAA4B;IACpD,OAAO,EAAE,KAAK,IAAwC,EAAE;QAEpD,MAAM,oBAAoB,GAAsD;YAC5E,aAAa,EAAE,QAAQ;YACvB,gBAAgB,EAAE;gBACd,YAAY;gBACZ,WAAW;gBACX,iBAAiB;gBACjB,WAAW;gBACX,WAAW;gBACX,WAAW;gBACX,WAAW;gBACX,YAAY;gBACZ,aAAa;gBACb,YAAY;gBACZ,WAAW;gBACX,YAAY;gBACZ,WAAW;aACd;YACD,aAAa,EAAE,GAAG;YAClB,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,UAAU;YACvB,eAAe,EAAE,IAAI;SACxB,CAAA;QAED,QAAQ;QACR,OAAO;YACH,WAAW,EAAE,OAAO;YACpB,oBAAoB;YACpB,mBAAmB,EAAE;gBACjB,OAAO,EAAE,sCAAsC;gBAC/C,QAAQ,EAAE,gBAAgB;gBAC1B,uBAAuB,EAAE,KAAK;gBAC9B,uBAAuB,EAAE,KAAK;aACjC;SACJ,CAAA;QAED,SAAS;QACT,WAAW;QACX,6BAA6B;QAC7B,4BAA4B;QAC5B,8BAA8B;QAC9B,0EAA0E;QAC1E,wBAAwB;QACxB,8CAA8C;QAC9C,sEAAsE;QACtE,0CAA0C;QAC1C,yCAAyC;QACzC,QAAQ;QACR,IAAI;IAER,CAAC;IACD,aAAa,EAAE,KAAK,EAAE,KAAyC,EAAE,EAAE;QAC/D,IAAA,kBAAU,EAAC,uDAAuD,CAAC,CAAA;IACvE,CAAC;IACD,eAAe,EAAE,KAAK,EAAE,KAA2C,EAAE,EAAE;QACnE,IAAA,kBAAU,EAAC,yDAAyD,CAAC,CAAA;IACzE,CAAC;CACJ,CAAA","sourcesContent":["import { FeatureFileStorageProps, FeatureFileStorageOptions, FeatureFileStorageSuccessUploadProps, FeatureFileStorageStartUploadProps } from './fileStorageType'\nimport { throwError } from '@/utils'\n// import path from 'path'\n\n// Runtime storage for injected hook\nexport const FileStorageHook: FeatureFileStorageProps = {\n onSetup: async (): Promise<FeatureFileStorageOptions> => {\n\n const storageConfiguration: FeatureFileStorageOptions[\"storageConfiguration\"] = {\n uploadMaxSize: 52428800,\n allowedFileTypes: [\n \"image/jpeg\",\n \"image/png\",\n \"application/pdf\",\n \"video/mp4\",\n \"audio/ogg\",\n \"audio/wav\",\n \"audio/wav\",\n \"audio/wave\",\n \"audio/x-wav\",\n \"audio/webm\",\n \"audio/m4a\",\n \"audio/mpeg\",\n \"audio/mp4\"\n ],\n imageMaxWidth: 800,\n imageQuality: 80,\n videoCRF: 28,\n videoPreset: \"veryfast\",\n videoResolution: 1280\n }\n\n // local\n return {\n storageType: \"local\",\n storageConfiguration,\n localStorageOptions: {\n baseUrl: \"http://localhost:8080/public/uploads\",\n basePath: \"public/uploads\",\n skipFolderNameModuleRef: false,\n skipFolderNameYearMonth: false\n }\n }\n\n // gcloud\n // return {\n // storageType: \"gcloud\",\n // storageConfiguration,\n // gcloudStorageOptions: {\n // baseUrl: \"https://storage.googleapis.com/chinlai-erp-delivery\",\n // basePath: \"\",\n // bucketName: \"chinlai-erp-delivery\",\n // credentialPath: \"config/chinlai-erp-api-253ac2637a8e.json\",\n // skipFolderNameModuleRef: false,\n // skipFolderNameYearMonth: false\n // }\n // }\n\n },\n onStartUpload: async (props: FeatureFileStorageStartUploadProps) => {\n throwError(`Invalid settings for onStartUpload in FileStorageHook`)\n },\n onSuccessUpload: async (props: FeatureFileStorageSuccessUploadProps) => {\n throwError(`Invalid settings for onSuccessUpload in FileStorageHook`)\n }\n}"]}
@@ -7,5 +7,7 @@ export { CustomizeTransform } from "./customize/CustomizeTransform";
7
7
  export type { CustomizeTransformProps } from "./customize/CustomizeTransform";
8
8
  export { toFieldMap, buildSqlRawSelect, buildSqlRawSelectCount, buildSqlRelation, buildSqlSelect, buildSqlWhere, buildSqlLimitOffset, buildSqlOrderBy, getFieldsByType, buildInjectionFieldsSqlSelect, getListWithCount } from "./query_builder/queryBuilder";
9
9
  export { getDocumentSqlRelationMaps, buildDocumentMainSqlSelect, buildDocumentDefaultSqlSelect, buildDocumentProfileSqlSelect, buildDocumentLocationSqlSelect, buildDocumentTotalSqlSelect, buildDocumentItemSqlSelectAgg, buildDocumentItemSqlSelect, buildDocumentDocumentSqlSelectAgg, buildDocumentDocumentSqlSelect } from "./query_builder/queryDocument";
10
+ export { getDocumentProfileRelationMaps } from "./query_builder/queryDocumentProfile";
11
+ export { getUserBranchRelationMaps } from "./query_builder/queryUserBranch";
10
12
  export { getFileSqlRelationMaps, buildFileMainSqlSelect, buildFileDefaultSqlSelect, } from "./query_builder/queryFile";
11
13
  export { getSchedulerLogSqlRelationMaps, getSchedulerRequestSqlRelationMaps, buildSchedulerLogMainSqlSelect, buildSchedulerRequestMainSqlSelect, buildSchedulerLogDefaultSqlSelect, buildSchedulerRequestDefaultSqlSelect } from "./query_builder/queryScheduler";
package/dist/lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildSchedulerRequestDefaultSqlSelect = exports.buildSchedulerLogDefaultSqlSelect = exports.buildSchedulerRequestMainSqlSelect = exports.buildSchedulerLogMainSqlSelect = exports.getSchedulerRequestSqlRelationMaps = exports.getSchedulerLogSqlRelationMaps = exports.buildFileDefaultSqlSelect = exports.buildFileMainSqlSelect = exports.getFileSqlRelationMaps = exports.buildDocumentDocumentSqlSelect = exports.buildDocumentDocumentSqlSelectAgg = exports.buildDocumentItemSqlSelect = exports.buildDocumentItemSqlSelectAgg = exports.buildDocumentTotalSqlSelect = exports.buildDocumentLocationSqlSelect = exports.buildDocumentProfileSqlSelect = exports.buildDocumentDefaultSqlSelect = exports.buildDocumentMainSqlSelect = exports.getDocumentSqlRelationMaps = exports.getListWithCount = exports.buildInjectionFieldsSqlSelect = exports.getFieldsByType = exports.buildSqlOrderBy = exports.buildSqlLimitOffset = exports.buildSqlWhere = exports.buildSqlSelect = exports.buildSqlRelation = exports.buildSqlRawSelectCount = exports.buildSqlRawSelect = exports.toFieldMap = exports.CustomizeTransform = exports.serviceFactoryAllowUserTypes = exports.serviceFactoryNames = exports.ServiceFactory = exports.ModelFactory = exports.prisma = void 0;
3
+ exports.buildSchedulerRequestDefaultSqlSelect = exports.buildSchedulerLogDefaultSqlSelect = exports.buildSchedulerRequestMainSqlSelect = exports.buildSchedulerLogMainSqlSelect = exports.getSchedulerRequestSqlRelationMaps = exports.getSchedulerLogSqlRelationMaps = exports.buildFileDefaultSqlSelect = exports.buildFileMainSqlSelect = exports.getFileSqlRelationMaps = exports.getUserBranchRelationMaps = exports.getDocumentProfileRelationMaps = exports.buildDocumentDocumentSqlSelect = exports.buildDocumentDocumentSqlSelectAgg = exports.buildDocumentItemSqlSelect = exports.buildDocumentItemSqlSelectAgg = exports.buildDocumentTotalSqlSelect = exports.buildDocumentLocationSqlSelect = exports.buildDocumentProfileSqlSelect = exports.buildDocumentDefaultSqlSelect = exports.buildDocumentMainSqlSelect = exports.getDocumentSqlRelationMaps = exports.getListWithCount = exports.buildInjectionFieldsSqlSelect = exports.getFieldsByType = exports.buildSqlOrderBy = exports.buildSqlLimitOffset = exports.buildSqlWhere = exports.buildSqlSelect = exports.buildSqlRelation = exports.buildSqlRawSelectCount = exports.buildSqlRawSelect = exports.toFieldMap = exports.CustomizeTransform = exports.serviceFactoryAllowUserTypes = exports.serviceFactoryNames = exports.ServiceFactory = exports.ModelFactory = exports.prisma = void 0;
4
4
  var prisma_1 = require("./prisma/prisma");
5
5
  Object.defineProperty(exports, "prisma", { enumerable: true, get: function () { return prisma_1.prisma; } });
6
6
  var ModelFactory_1 = require("./model_factory/ModelFactory");
@@ -35,6 +35,10 @@ Object.defineProperty(exports, "buildDocumentItemSqlSelectAgg", { enumerable: tr
35
35
  Object.defineProperty(exports, "buildDocumentItemSqlSelect", { enumerable: true, get: function () { return queryDocument_1.buildDocumentItemSqlSelect; } });
36
36
  Object.defineProperty(exports, "buildDocumentDocumentSqlSelectAgg", { enumerable: true, get: function () { return queryDocument_1.buildDocumentDocumentSqlSelectAgg; } });
37
37
  Object.defineProperty(exports, "buildDocumentDocumentSqlSelect", { enumerable: true, get: function () { return queryDocument_1.buildDocumentDocumentSqlSelect; } });
38
+ var queryDocumentProfile_1 = require("./query_builder/queryDocumentProfile");
39
+ Object.defineProperty(exports, "getDocumentProfileRelationMaps", { enumerable: true, get: function () { return queryDocumentProfile_1.getDocumentProfileRelationMaps; } });
40
+ var queryUserBranch_1 = require("./query_builder/queryUserBranch");
41
+ Object.defineProperty(exports, "getUserBranchRelationMaps", { enumerable: true, get: function () { return queryUserBranch_1.getUserBranchRelationMaps; } });
38
42
  var queryFile_1 = require("./query_builder/queryFile");
39
43
  Object.defineProperty(exports, "getFileSqlRelationMaps", { enumerable: true, get: function () { return queryFile_1.getFileSqlRelationMaps; } });
40
44
  Object.defineProperty(exports, "buildFileMainSqlSelect", { enumerable: true, get: function () { return queryFile_1.buildFileMainSqlSelect; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":";;;AAAA,0CAAwC;AAA/B,gGAAA,MAAM,OAAA;AAEf,6DAA2D;AAAlD,4GAAA,YAAY,OAAA;AAGrB,mEAAoH;AAA3G,gHAAA,cAAc,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAAE,8HAAA,4BAA4B,OAAA;AAG1E,qEAAmE;AAA1D,wHAAA,kBAAkB,OAAA;AAG3B,6DAA6P;AAApP,0GAAA,UAAU,OAAA;AAAE,iHAAA,iBAAiB,OAAA;AAAE,sHAAA,sBAAsB,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAAE,8GAAA,cAAc,OAAA;AAAE,6GAAA,aAAa,OAAA;AAAE,mHAAA,mBAAmB,OAAA;AAAE,+GAAA,eAAe,OAAA;AAAE,+GAAA,eAAe,OAAA;AAAE,6HAAA,6BAA6B,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAEvN,+DAYsC;AAXlC,2HAAA,0BAA0B,OAAA;AAC1B,2HAAA,0BAA0B,OAAA;AAC1B,8HAAA,6BAA6B,OAAA;AAC7B,8HAAA,6BAA6B,OAAA;AAC7B,gCAAgC;AAChC,+HAAA,8BAA8B,OAAA;AAC9B,4HAAA,2BAA2B,OAAA;AAC3B,8HAAA,6BAA6B,OAAA;AAC7B,2HAAA,0BAA0B,OAAA;AAC1B,kIAAA,iCAAiC,OAAA;AACjC,+HAAA,8BAA8B,OAAA;AAGlC,uDAIkC;AAH9B,mHAAA,sBAAsB,OAAA;AACtB,mHAAA,sBAAsB,OAAA;AACtB,sHAAA,yBAAyB,OAAA;AAG7B,iEAOuC;AANnC,gIAAA,8BAA8B,OAAA;AAC9B,oIAAA,kCAAkC,OAAA;AAClC,gIAAA,8BAA8B,OAAA;AAC9B,oIAAA,kCAAkC,OAAA;AAClC,mIAAA,iCAAiC,OAAA;AACjC,uIAAA,qCAAqC,OAAA","sourcesContent":["export { prisma } from \"./prisma/prisma\"\n\nexport { ModelFactory } from \"./model_factory/ModelFactory\"\nexport type { DefaultOmitFields } from \"./model_factory/default\"\n\nexport { ServiceFactory, serviceFactoryNames, serviceFactoryAllowUserTypes } from \"./service_factory/ServiceFactory\"\nexport type { ServiceFactoryName, ServiceFactoryAllowUserType } from \"./service_factory/ServiceFactory\"\n\nexport { CustomizeTransform } from \"./customize/CustomizeTransform\"\nexport type { CustomizeTransformProps } from \"./customize/CustomizeTransform\"\n\nexport { toFieldMap, buildSqlRawSelect, buildSqlRawSelectCount, buildSqlRelation, buildSqlSelect, buildSqlWhere, buildSqlLimitOffset, buildSqlOrderBy, getFieldsByType, buildInjectionFieldsSqlSelect, getListWithCount } from \"./query_builder/queryBuilder\"\n\nexport {\n getDocumentSqlRelationMaps,\n buildDocumentMainSqlSelect,\n buildDocumentDefaultSqlSelect,\n buildDocumentProfileSqlSelect,\n // buildDocumentAmountSqlSelect,\n buildDocumentLocationSqlSelect,\n buildDocumentTotalSqlSelect,\n buildDocumentItemSqlSelectAgg,\n buildDocumentItemSqlSelect,\n buildDocumentDocumentSqlSelectAgg,\n buildDocumentDocumentSqlSelect\n} from \"./query_builder/queryDocument\"\n\nexport {\n getFileSqlRelationMaps,\n buildFileMainSqlSelect,\n buildFileDefaultSqlSelect,\n} from \"./query_builder/queryFile\"\n\nexport {\n getSchedulerLogSqlRelationMaps,\n getSchedulerRequestSqlRelationMaps,\n buildSchedulerLogMainSqlSelect,\n buildSchedulerRequestMainSqlSelect,\n buildSchedulerLogDefaultSqlSelect,\n buildSchedulerRequestDefaultSqlSelect\n} from \"./query_builder/queryScheduler\""]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":";;;AAAA,0CAAwC;AAA/B,gGAAA,MAAM,OAAA;AAEf,6DAA2D;AAAlD,4GAAA,YAAY,OAAA;AAGrB,mEAAoH;AAA3G,gHAAA,cAAc,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAAE,8HAAA,4BAA4B,OAAA;AAG1E,qEAAmE;AAA1D,wHAAA,kBAAkB,OAAA;AAG3B,6DAA6P;AAApP,0GAAA,UAAU,OAAA;AAAE,iHAAA,iBAAiB,OAAA;AAAE,sHAAA,sBAAsB,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAAE,8GAAA,cAAc,OAAA;AAAE,6GAAA,aAAa,OAAA;AAAE,mHAAA,mBAAmB,OAAA;AAAE,+GAAA,eAAe,OAAA;AAAE,+GAAA,eAAe,OAAA;AAAE,6HAAA,6BAA6B,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAEvN,+DAYsC;AAXlC,2HAAA,0BAA0B,OAAA;AAC1B,2HAAA,0BAA0B,OAAA;AAC1B,8HAAA,6BAA6B,OAAA;AAC7B,8HAAA,6BAA6B,OAAA;AAC7B,gCAAgC;AAChC,+HAAA,8BAA8B,OAAA;AAC9B,4HAAA,2BAA2B,OAAA;AAC3B,8HAAA,6BAA6B,OAAA;AAC7B,2HAAA,0BAA0B,OAAA;AAC1B,kIAAA,iCAAiC,OAAA;AACjC,+HAAA,8BAA8B,OAAA;AAGlC,6EAE6C;AADzC,sIAAA,8BAA8B,OAAA;AAGlC,mEAEwC;AADpC,4HAAA,yBAAyB,OAAA;AAG7B,uDAIkC;AAH9B,mHAAA,sBAAsB,OAAA;AACtB,mHAAA,sBAAsB,OAAA;AACtB,sHAAA,yBAAyB,OAAA;AAG7B,iEAOuC;AANnC,gIAAA,8BAA8B,OAAA;AAC9B,oIAAA,kCAAkC,OAAA;AAClC,gIAAA,8BAA8B,OAAA;AAC9B,oIAAA,kCAAkC,OAAA;AAClC,mIAAA,iCAAiC,OAAA;AACjC,uIAAA,qCAAqC,OAAA","sourcesContent":["export { prisma } from \"./prisma/prisma\"\n\nexport { ModelFactory } from \"./model_factory/ModelFactory\"\nexport type { DefaultOmitFields } from \"./model_factory/default\"\n\nexport { ServiceFactory, serviceFactoryNames, serviceFactoryAllowUserTypes } from \"./service_factory/ServiceFactory\"\nexport type { ServiceFactoryName, ServiceFactoryAllowUserType } from \"./service_factory/ServiceFactory\"\n\nexport { CustomizeTransform } from \"./customize/CustomizeTransform\"\nexport type { CustomizeTransformProps } from \"./customize/CustomizeTransform\"\n\nexport { toFieldMap, buildSqlRawSelect, buildSqlRawSelectCount, buildSqlRelation, buildSqlSelect, buildSqlWhere, buildSqlLimitOffset, buildSqlOrderBy, getFieldsByType, buildInjectionFieldsSqlSelect, getListWithCount } from \"./query_builder/queryBuilder\"\n\nexport {\n getDocumentSqlRelationMaps,\n buildDocumentMainSqlSelect,\n buildDocumentDefaultSqlSelect,\n buildDocumentProfileSqlSelect,\n // buildDocumentAmountSqlSelect,\n buildDocumentLocationSqlSelect,\n buildDocumentTotalSqlSelect,\n buildDocumentItemSqlSelectAgg,\n buildDocumentItemSqlSelect,\n buildDocumentDocumentSqlSelectAgg,\n buildDocumentDocumentSqlSelect\n} from \"./query_builder/queryDocument\"\n\nexport {\n getDocumentProfileRelationMaps\n} from \"./query_builder/queryDocumentProfile\"\n\nexport {\n getUserBranchRelationMaps\n} from \"./query_builder/queryUserBranch\"\n\nexport {\n getFileSqlRelationMaps,\n buildFileMainSqlSelect,\n buildFileDefaultSqlSelect,\n} from \"./query_builder/queryFile\"\n\nexport {\n getSchedulerLogSqlRelationMaps,\n getSchedulerRequestSqlRelationMaps,\n buildSchedulerLogMainSqlSelect,\n buildSchedulerRequestMainSqlSelect,\n buildSchedulerLogDefaultSqlSelect,\n buildSchedulerRequestDefaultSqlSelect\n} from \"./query_builder/queryScheduler\""]}
@@ -41,7 +41,7 @@ export declare const buildSqlRawSelect: ({ tableName, mainAlias, accountId, sqlS
41
41
  sqlLimitOffset: string;
42
42
  skipFilterAccountId?: boolean;
43
43
  }) => string;
44
- export declare const buildSqlRawSelectCount: ({ tableName, mainAlias, accountId, sqlSelect, sqlRelation, sqlWhere, sqlGroupBy, sqlOrderby, skipFilterAccountId }: {
44
+ export declare const buildSqlRawSelectCount: ({ tableName, mainAlias, accountId, sqlRelation, sqlWhere, sqlGroupBy, skipFilterAccountId }: {
45
45
  tableName: string;
46
46
  mainAlias: string;
47
47
  accountId: number;
@@ -29,20 +29,70 @@ const buildSqlRawSelect = ({ tableName, mainAlias, accountId, sqlSelect, sqlRela
29
29
  `;
30
30
  };
31
31
  exports.buildSqlRawSelect = buildSqlRawSelect;
32
- const buildSqlRawSelectCount = ({ tableName, mainAlias, accountId, sqlSelect, sqlRelation, sqlWhere, sqlGroupBy, sqlOrderby, skipFilterAccountId = false }) => {
33
- const sql = (0, exports.buildSqlRawSelect)({
34
- tableName,
35
- mainAlias,
36
- accountId,
37
- sqlSelect,
38
- sqlRelation,
39
- sqlWhere,
40
- sqlGroupBy,
41
- sqlOrderby,
42
- sqlLimitOffset: "",
43
- skipFilterAccountId
44
- });
45
- return `WITH filtered_docs AS (${sql}) SELECT COUNT(*) AS filtered_count FROM filtered_docs;`;
32
+ // export const buildSqlRawSelectCount = ({
33
+ // tableName,
34
+ // mainAlias,
35
+ // accountId,
36
+ // sqlSelect,
37
+ // sqlRelation,
38
+ // sqlWhere,
39
+ // sqlGroupBy,
40
+ // sqlOrderby,
41
+ // skipFilterAccountId = false
42
+ // }: {
43
+ // tableName: string,
44
+ // mainAlias: string,
45
+ // accountId: number,
46
+ // sqlSelect: string[]
47
+ // sqlRelation: string[]
48
+ // sqlWhere: string[]
49
+ // sqlGroupBy: string[]
50
+ // sqlOrderby: string,
51
+ // skipFilterAccountId?: boolean
52
+ // }) => {
53
+ // const sql = buildSqlRawSelect({
54
+ // tableName,
55
+ // mainAlias,
56
+ // accountId,
57
+ // sqlSelect,
58
+ // sqlRelation,
59
+ // sqlWhere,
60
+ // sqlGroupBy,
61
+ // sqlOrderby,
62
+ // sqlLimitOffset: "",
63
+ // skipFilterAccountId
64
+ // })
65
+ // return `WITH filtered_docs AS (${sql}) SELECT COUNT(*) AS filtered_count FROM filtered_docs;`
66
+ // }
67
+ const buildSqlRawSelectCount = ({ tableName, mainAlias, accountId, sqlRelation, sqlWhere, sqlGroupBy, skipFilterAccountId = false }) => {
68
+ // enforce account isolation
69
+ if (!skipFilterAccountId) {
70
+ sqlWhere = [
71
+ ...sqlWhere,
72
+ `${mainAlias}.accountid = ${accountId}`
73
+ ];
74
+ }
75
+ const baseQuery = `
76
+ FROM ${tableName} AS ${mainAlias}
77
+ ${sqlRelation.join(" ")}
78
+ ${sqlWhere.length > 0 ? `WHERE ${sqlWhere.join(" AND ")}` : ""}
79
+ `;
80
+ // CASE 1: no grouping → FASTEST PATH
81
+ if (!sqlGroupBy.length) {
82
+ return `
83
+ SELECT COUNT(*)
84
+ ${baseQuery}
85
+ `;
86
+ }
87
+ // CASE 2: grouping → safe count of grouped results
88
+ return `
89
+ SELECT COUNT(*)
90
+ FROM (
91
+ SELECT 1
92
+ ${baseQuery}
93
+ GROUP BY ${sqlGroupBy.join(",")}
94
+ ) t
95
+ `;
46
96
  };
47
97
  exports.buildSqlRawSelectCount = buildSqlRawSelectCount;
48
98
  /**
@@ -328,7 +378,8 @@ const getListWithCount = async ({ model, tableName, mainAlias, countKey, sqlRela
328
378
  sqlSelect: [`${mainAlias}.${countKey}`],
329
379
  sqlRelation: filteredArray,
330
380
  sqlWhere,
331
- sqlGroupBy: [`${mainAlias}.${countKey}`],
381
+ // sqlGroupBy: [`${mainAlias}.${countKey}`],
382
+ sqlGroupBy: [],
332
383
  sqlOrderby: ``
333
384
  });
334
385
  let count = await model.raw(sqlRawCount);
@@ -1 +1 @@
1
- {"version":3,"file":"queryBuilder.js","sourceRoot":"","sources":["../../../src/lib/query_builder/queryBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { queryListFilterOperators } from '@/schema/common';\nimport { QueryList, QueryListFilter } from \"@/schema/common\";\nimport { throwError } from '@/utils';\n\ntype SqlDialect = \"postgres\" | \"mysql\";\ntype JoinType = \"left\" | \"inner\" | \"right\";\n\n/**\n * Create a typed map of model fields for safer access in raw queries.\n *\n * This utility takes a TypeScript model type `T` and returns an object\n * where each key is the field name and the value is the same string.\n * \n * The returned object can be used for dot-suggestion, reducing typos\n * when referencing columns in SQL queries.\n *\n * @example\n * import type { Customer } from \"@prisma/client\";\n * import { createFields } from \"@/utils/createFields\";\n * \n * const CustomerFields = createFields<Customer>();\n * console.log(CustomerFields.id); // \"id\"\n * console.log(CustomerFields.name); // \"name\"\n * \n * const query = `SELECT ${CustomerFields.id}, ${CustomerFields.name} FROM customers`;\n */\ntype FieldMap<T> = {\n [K in keyof T]: K;\n};\n\nexport function getFieldsByType<T>(): FieldMap<T> {\n return new Proxy({} as FieldMap<T>, {\n get: (_, prop) => prop,\n }) as FieldMap<T>;\n}\n\ntype FieldMeta = { name: string; type: string };\n\nexport const toFieldMap = (\n fields: FieldMeta[],\n prefix = \"uip\",\n infix = \"inf_\"\n): Record<string, string> => {\n return Object.fromEntries(\n fields.map(f => [`${prefix}.${f.name}`, `${infix}${f.name}`])\n );\n}\n\nexport const buildSqlRawSelect = ({\n tableName,\n mainAlias,\n accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId = false\n}: {\n tableName: string,\n mainAlias: string,\n accountId: number,\n sqlSelect: string[]\n sqlRelation: string[]\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string\n sqlLimitOffset: string\n skipFilterAccountId?: boolean\n}) => {\n\n if (skipFilterAccountId === false) {\n sqlWhere = [...sqlWhere, `${mainAlias}.accountid = ${accountId}`]\n }\n\n return `SELECT \n ${sqlSelect.join(\",\")}\n FROM \n ${tableName} as ${mainAlias}\n ${sqlRelation.join(\" \")}\n ${sqlWhere.length > 0 ? `WHERE ${sqlWhere.join(' and ')}` : ``}\n ${sqlGroupBy.length > 0 ? `GROUP BY ${sqlGroupBy.join(\",\")}` : \"\"}\n ${sqlOrderby} \n ${sqlLimitOffset}\n `\n}\n\n\nexport const buildSqlRawSelectCount = ({\n tableName,\n mainAlias,\n accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n skipFilterAccountId = false\n}: {\n tableName: string,\n mainAlias: string,\n accountId: number,\n sqlSelect: string[]\n sqlRelation: string[]\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string,\n skipFilterAccountId?: boolean\n}) => {\n\n const sql = buildSqlRawSelect({\n tableName,\n mainAlias,\n accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset: \"\",\n skipFilterAccountId\n })\n\n return `WITH filtered_docs AS (${sql}) SELECT COUNT(*) AS filtered_count FROM filtered_docs;`\n}\n\n/**\n * Build a SQL join clause\n * @param joinType - \"left\" | \"inner\" | \"right\" (default: \"left\")\n * @param sourceAlias - alias of the source table, e.g., \"cus\"\n * @param targetTable - table to join, e.g., \"users\"\n * @param targetAlias - alias for the target table, e.g., \"usr\"\n * @param onConditions - array of ON conditions, e.g., [\"cus.user_id = usr.user_id\", \"usr.isdelete = false\"]\n */\nexport const buildSqlRelation = (\n joinType: JoinType,\n sourceAlias: string,\n targetTable: string,\n targetAlias: string,\n onConditions: string[]\n) => {\n return `\n ${joinType} join ${targetTable} as ${targetAlias}\n on ${onConditions.join(\" and \")}\n `;\n}\n/**\n * Build a SQL SELECT column list with aliases\n *\n * This function takes a table alias and a mapping of column names to\n * desired aliases, and returns a comma-separated string suitable for\n * inclusion in a SQL SELECT statement.\n *\n * @param abb - The alias of the table in the SQL query (e.g., \"cus\" for customers)\n * @param columns - An object mapping column names to their desired aliases\n * e.g., { id: \"customerId\", name: \"customerName\" }\n * @returns A string of columns with aliases, e.g.,\n * \"cus.id as customerId, cus.name as customerName\"\n *\n * @example\n * const cols = buildSqlSelect(\"cus\", { id: \"customerId\", name: \"customerName\" });\n * // cols => \"cus.id as customerId, cus.name as customerName\"\n */\nexport const buildSqlSelect = (abb: string, columns: Record<string, string>): string => {\n\n if (!columns || Object.keys(columns).length === 0) return \"\";\n\n return Object.entries(columns)\n .map(([col, alias]) => `${abb ? abb + \".\" : \"\"}${col} as ${alias}`)\n .join(\", \");\n}\n\nexport const buildSqlWhere = (\n filters: QueryListFilter[] | undefined,\n selectColumns: any,\n ctx: { dialect: SqlDialect } = {\n dialect: \"postgres\"\n }\n): {\n where: string,\n colNames: string[],\n aliasKeys: string[]\n} => {\n\n if (!filters || filters.length === 0) {\n return {\n where: ``,\n colNames: [],\n aliasKeys: []\n }\n }\n\n const andClauses: string[] = [];\n const orClauses: string[] = [];\n\n // const col = (field: string) => (tableAlias ? `${tableAlias}.${field}` : field);\n\n const col = (field: string) => {\n let filteredColumns = Object.fromEntries(\n Object.entries(selectColumns).filter(([key, alias]) => alias === field)\n )\n return filteredColumns ? Object.keys(filteredColumns)[0] : field\n }\n\n const colNames: string[] = []\n\n for (const filter of filters) {\n if (!filter) continue;\n\n const { field, operator, value } = filter;\n\n // const formatValue = (val: any, prefix?: string, suffix?: string) => \n // typeof val === \"string\" ? `'${prefix ?? \"\"}${val.replace(/'/g, \"''\")}${suffix ?? \"\"}'` : val;\n\n const formatValue = (\n val: any,\n operator: QueryListFilter[\"operator\"],\n prefix?: string,\n suffix?: string\n ) => {\n\n let returnValue = val\n let sqlValuePrefix = ``\n let sqlValueSuffix = ``\n\n if (operator === queryListFilterOperators.startsWith) {\n sqlValuePrefix = ``\n sqlValueSuffix = `%`\n }\n\n if (operator === queryListFilterOperators.endsWith) {\n sqlValuePrefix = `%`\n sqlValueSuffix = ``\n }\n\n if (\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n sqlValuePrefix = `%`\n sqlValueSuffix = `%`\n }\n\n // override\n if (prefix) sqlValuePrefix = prefix\n if (suffix) sqlValueSuffix = suffix\n\n if (typeof val === \"string\") {\n returnValue = `'${sqlValuePrefix ?? \"\"}${val.replace(/'/g, \"''\")}${sqlValueSuffix ?? \"\"}'`\n }\n\n // check the type of val must string & operator is using like\n if (\n operator === queryListFilterOperators.startsWith ||\n operator === queryListFilterOperators.endsWith ||\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n if (typeof val !== \"string\") {\n throwError(`Filters part:${field} using:${operator} like the val must be string`)\n }\n }\n\n return returnValue\n\n }\n\n const formatWherePart = (val: any, operator: QueryListFilter[\"operator\"]) => {\n\n let sqlOperator: string = operator\n\n // check with like operator\n if (\n operator === queryListFilterOperators.startsWith ||\n operator === queryListFilterOperators.endsWith ||\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n sqlOperator = ctx.dialect === \"postgres\" ? `ILIKE` : `LIKE` // only ILIKE supported in postgres\n }\n\n // not array in value\n if (Array.isArray(value) === false) {\n\n let sqlValue = formatValue(val, operator)\n return `${colName} ${sqlOperator} ${sqlValue}`\n\n }\n\n // for array in value\n let subOrQuery: string[] = []\n\n value.forEach((i: any) => {\n\n let sqlValue = `${formatValue(i, operator)}`\n\n subOrQuery.push(`${colName} ${sqlOperator} ${sqlValue}`)\n\n })\n\n return `(${subOrQuery.join(\" OR \")})`\n\n }\n\n const colName = `${col(field)}`\n\n switch (operator) {\n case queryListFilterOperators.eq:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.eq)}`);\n // andClauses.push(`${colName} = ${formatValue(value)}`);\n break;\n case queryListFilterOperators.notEq:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.notEq)}`);\n // andClauses.push(`${colName} != ${formatValue(value)}`);\n break;\n case queryListFilterOperators.startsWith:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.startsWith)}`);\n // andClauses.push(`${colName} ILIKE '${value}%'`);\n break;\n case queryListFilterOperators.endsWith:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.endsWith)}`);\n // andClauses.push(`${colName} ILIKE '%${value}'`);\n break;\n case queryListFilterOperators.contains:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.contains)}`);\n // andClauses.push(`${colName} ILIKE '%${value}%'`);\n break;\n case queryListFilterOperators.anyOf:\n andClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOf:\n andClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEq:\n andClauses.push(`${colName} >= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.lessThanEq:\n andClauses.push(`${colName} <= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.isNull:\n andClauses.push(`${colName} IS NULL`);\n break;\n case queryListFilterOperators.isNotNull:\n andClauses.push(`${colName} IS NOT NULL`);\n break;\n\n // Or-variants\n case queryListFilterOperators.eqOr:\n // orClauses.push(`${colName} = ${formatValue(value, operator)}`);\n orClauses.push(`${formatWherePart(value, queryListFilterOperators.eqOr)}`);\n break;\n case queryListFilterOperators.containsOr:\n // orClauses.push(`${colName} ILIKE '%${value, operator}%'`);\n orClauses.push(`${formatWherePart(value, queryListFilterOperators.containsOr)}`);\n break;\n case queryListFilterOperators.anyOfOr:\n orClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOfOr:\n orClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEqOr:\n orClauses.push(`${colName} >= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.lessThanEqOr:\n orClauses.push(`${colName} <= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.isNullOr:\n orClauses.push(`${colName} IS NULL`);\n break;\n }\n\n colNames.push(colName)\n\n }\n\n const whereParts: string[] = [];\n if (andClauses.length) whereParts.push(`(${andClauses.join(\" AND \")})`);\n if (orClauses.length) whereParts.push(`(${orClauses.join(\" OR \")})`);\n\n // Extract aliasKeys before '.'\n const aliasKeys = Array.from(\n new Set(\n colNames\n .map(key => key.match(/\\b([a-zA-Z_][a-zA-Z0-9_]*)\\./)?.[1])\n .filter((v): v is string => Boolean(v)) // type guard keeps only valid strings\n )\n );\n\n return {\n where: whereParts.length ? `${whereParts.join(\" AND \")}` : \"\",\n colNames,\n aliasKeys\n }\n};\n\n/** Build ORDER BY clause */\nexport const buildSqlOrderBy = (sortField: QueryList[\"sortfield\"], sortOrder: QueryList[\"sortorder\"]) =>\n sortField ? `ORDER BY ${sortField} ${sortOrder.toUpperCase()}` : \"\";\n\n/** Build LIMIT/OFFSET clause */\nexport const buildSqlLimitOffset = (limit?: QueryList[\"limit\"], offset?: QueryList[\"offset\"]) => {\n const parts: string[] = [];\n\n const _limit = Number(limit ?? 10)\n const _offset = Number(offset ?? 0)\n\n if (_limit !== undefined) parts.push(`LIMIT ${_limit}`);\n if (_offset !== undefined) parts.push(`OFFSET ${_offset}`);\n\n return parts.join(\" \");\n};\n\n/** For Injection Fields */\nexport const buildInjectionFieldsSqlSelect = (alias: string, activeInjectionFields: any[] = []) => {\n return activeInjectionFields.reduce((acc, col) => {\n\n // check the field type is decimal\n let castValue = ``\n\n if (col?.fieldType === \"numeric\") {\n castValue = `::float`\n }\n\n if (col?.fieldType === \"integer\") {\n castValue = `::int`\n }\n\n acc[`${alias}.${col?.fieldName}${castValue}`] = `inf_${col?.fieldName}`;\n return acc;\n }, {} as Record<string, string>);\n}\n\n/**\n * Executes a dynamic SQL listing query along with a count query.\n * \n * This function builds SQL SELECT and COUNT statements using the provided\n * relation maps, filters, and query options, then executes them through\n * the given Prisma model's `raw()` method.\n *\n * Commonly used for paginated data listings that require both the\n * result set and total record count.\n * \n * Returns an object containing:\n * - `data`: The paginated result set.\n * - `total`: The total count of records that match the filters.\n */\nexport const getListWithCount = async ({\n model,\n tableName,\n mainAlias,\n countKey,\n sqlRelationMaps,\n accountId,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n}: {\n model: any,\n tableName: string,\n mainAlias: string,\n countKey: string,\n sqlRelationMaps: any,\n accountId: number,\n filters: any[],\n filterColumns: any,\n sqlSelect: string[]\n sqlSelectAgg: string[],\n sqlRelation: string[]\n sqlRelationAgg: string[],\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string\n sqlLimitOffset: string\n}) => {\n\n const requestWhere = buildSqlWhere(filters, filterColumns)\n\n sqlWhere = [\n ...sqlWhere,\n ...(filters.length ? [requestWhere?.where] : []),\n ]\n\n // get the data (pagination)\n const sqlRaw = buildSqlRawSelect({\n tableName,\n mainAlias,\n accountId,\n sqlSelect: [...sqlSelect, ...sqlSelectAgg],\n sqlRelation: [...sqlRelation, ...sqlRelationAgg],\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n let data = await model.raw(sqlRaw)\n\n let aliasKeys = requestWhere?.aliasKeys\n\n let filteredArray: any = Object.entries(sqlRelationMaps)\n .filter(([key]) => aliasKeys.includes(key))\n .map(([_, value]) => value);\n\n // console.log('filteredArray', JSON.stringify(filteredArray), aliasKeys)\n\n // get the count\n const sqlRawCount = buildSqlRawSelectCount({\n tableName,\n mainAlias,\n accountId,\n sqlSelect: [`${mainAlias}.${countKey}`],\n sqlRelation: filteredArray,\n sqlWhere,\n sqlGroupBy: [`${mainAlias}.${countKey}`],\n sqlOrderby: ``\n })\n\n let count = await model.raw(sqlRawCount)\n\n return {\n data,\n total: Number(count[0].filtered_count)\n }\n\n}"]}
1
+ {"version":3,"file":"queryBuilder.js","sourceRoot":"","sources":["../../../src/lib/query_builder/queryBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { queryListFilterOperators } from '@/schema/common';\nimport { QueryList, QueryListFilter } from \"@/schema/common\";\nimport { throwError } from '@/utils';\n\ntype SqlDialect = \"postgres\" | \"mysql\";\ntype JoinType = \"left\" | \"inner\" | \"right\";\n\n/**\n * Create a typed map of model fields for safer access in raw queries.\n *\n * This utility takes a TypeScript model type `T` and returns an object\n * where each key is the field name and the value is the same string.\n * \n * The returned object can be used for dot-suggestion, reducing typos\n * when referencing columns in SQL queries.\n *\n * @example\n * import type { Customer } from \"@prisma/client\";\n * import { createFields } from \"@/utils/createFields\";\n * \n * const CustomerFields = createFields<Customer>();\n * console.log(CustomerFields.id); // \"id\"\n * console.log(CustomerFields.name); // \"name\"\n * \n * const query = `SELECT ${CustomerFields.id}, ${CustomerFields.name} FROM customers`;\n */\ntype FieldMap<T> = {\n [K in keyof T]: K;\n};\n\nexport function getFieldsByType<T>(): FieldMap<T> {\n return new Proxy({} as FieldMap<T>, {\n get: (_, prop) => prop,\n }) as FieldMap<T>;\n}\n\ntype FieldMeta = { name: string; type: string };\n\nexport const toFieldMap = (\n fields: FieldMeta[],\n prefix = \"uip\",\n infix = \"inf_\"\n): Record<string, string> => {\n return Object.fromEntries(\n fields.map(f => [`${prefix}.${f.name}`, `${infix}${f.name}`])\n );\n}\n\nexport const buildSqlRawSelect = ({\n tableName,\n mainAlias,\n accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId = false\n}: {\n tableName: string,\n mainAlias: string,\n accountId: number,\n sqlSelect: string[]\n sqlRelation: string[]\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string\n sqlLimitOffset: string\n skipFilterAccountId?: boolean\n}) => {\n\n if (skipFilterAccountId === false) {\n sqlWhere = [...sqlWhere, `${mainAlias}.accountid = ${accountId}`]\n }\n\n return `SELECT \n ${sqlSelect.join(\",\")}\n FROM \n ${tableName} as ${mainAlias}\n ${sqlRelation.join(\" \")}\n ${sqlWhere.length > 0 ? `WHERE ${sqlWhere.join(' and ')}` : ``}\n ${sqlGroupBy.length > 0 ? `GROUP BY ${sqlGroupBy.join(\",\")}` : \"\"}\n ${sqlOrderby} \n ${sqlLimitOffset}\n `\n}\n\n\n// export const buildSqlRawSelectCount = ({\n// tableName,\n// mainAlias,\n// accountId,\n// sqlSelect,\n// sqlRelation,\n// sqlWhere,\n// sqlGroupBy,\n// sqlOrderby,\n// skipFilterAccountId = false\n// }: {\n// tableName: string,\n// mainAlias: string,\n// accountId: number,\n// sqlSelect: string[]\n// sqlRelation: string[]\n// sqlWhere: string[]\n// sqlGroupBy: string[]\n// sqlOrderby: string,\n// skipFilterAccountId?: boolean\n// }) => {\n\n// const sql = buildSqlRawSelect({\n// tableName,\n// mainAlias,\n// accountId,\n// sqlSelect,\n// sqlRelation,\n// sqlWhere,\n// sqlGroupBy,\n// sqlOrderby,\n// sqlLimitOffset: \"\",\n// skipFilterAccountId\n// })\n\n// return `WITH filtered_docs AS (${sql}) SELECT COUNT(*) AS filtered_count FROM filtered_docs;`\n// }\n\nexport const buildSqlRawSelectCount = ({\n tableName,\n mainAlias,\n accountId,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n skipFilterAccountId = false\n}: {\n tableName: string,\n mainAlias: string,\n accountId: number,\n sqlSelect: string[] // ignored on purpose\n sqlRelation: string[]\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string // ignored on purpose\n skipFilterAccountId?: boolean\n}) => {\n\n // enforce account isolation\n if (!skipFilterAccountId) {\n sqlWhere = [\n ...sqlWhere,\n `${mainAlias}.accountid = ${accountId}`\n ]\n }\n\n const baseQuery = `\n FROM ${tableName} AS ${mainAlias}\n ${sqlRelation.join(\" \")}\n ${sqlWhere.length > 0 ? `WHERE ${sqlWhere.join(\" AND \")}` : \"\"}\n `\n\n // CASE 1: no grouping → FASTEST PATH\n if (!sqlGroupBy.length) {\n return `\n SELECT COUNT(*)\n ${baseQuery}\n `\n }\n\n // CASE 2: grouping → safe count of grouped results\n return `\n SELECT COUNT(*)\n FROM (\n SELECT 1\n ${baseQuery}\n GROUP BY ${sqlGroupBy.join(\",\")}\n ) t\n `\n}\n\n/**\n * Build a SQL join clause\n * @param joinType - \"left\" | \"inner\" | \"right\" (default: \"left\")\n * @param sourceAlias - alias of the source table, e.g., \"cus\"\n * @param targetTable - table to join, e.g., \"users\"\n * @param targetAlias - alias for the target table, e.g., \"usr\"\n * @param onConditions - array of ON conditions, e.g., [\"cus.user_id = usr.user_id\", \"usr.isdelete = false\"]\n */\nexport const buildSqlRelation = (\n joinType: JoinType,\n sourceAlias: string,\n targetTable: string,\n targetAlias: string,\n onConditions: string[]\n) => {\n return `\n ${joinType} join ${targetTable} as ${targetAlias}\n on ${onConditions.join(\" and \")}\n `;\n}\n/**\n * Build a SQL SELECT column list with aliases\n *\n * This function takes a table alias and a mapping of column names to\n * desired aliases, and returns a comma-separated string suitable for\n * inclusion in a SQL SELECT statement.\n *\n * @param abb - The alias of the table in the SQL query (e.g., \"cus\" for customers)\n * @param columns - An object mapping column names to their desired aliases\n * e.g., { id: \"customerId\", name: \"customerName\" }\n * @returns A string of columns with aliases, e.g.,\n * \"cus.id as customerId, cus.name as customerName\"\n *\n * @example\n * const cols = buildSqlSelect(\"cus\", { id: \"customerId\", name: \"customerName\" });\n * // cols => \"cus.id as customerId, cus.name as customerName\"\n */\nexport const buildSqlSelect = (abb: string, columns: Record<string, string>): string => {\n\n if (!columns || Object.keys(columns).length === 0) return \"\";\n\n return Object.entries(columns)\n .map(([col, alias]) => `${abb ? abb + \".\" : \"\"}${col} as ${alias}`)\n .join(\", \");\n}\n\nexport const buildSqlWhere = (\n filters: QueryListFilter[] | undefined,\n selectColumns: any,\n ctx: { dialect: SqlDialect } = {\n dialect: \"postgres\"\n }\n): {\n where: string,\n colNames: string[],\n aliasKeys: string[]\n} => {\n\n if (!filters || filters.length === 0) {\n return {\n where: ``,\n colNames: [],\n aliasKeys: []\n }\n }\n\n const andClauses: string[] = [];\n const orClauses: string[] = [];\n\n // const col = (field: string) => (tableAlias ? `${tableAlias}.${field}` : field);\n\n const col = (field: string) => {\n let filteredColumns = Object.fromEntries(\n Object.entries(selectColumns).filter(([key, alias]) => alias === field)\n )\n return filteredColumns ? Object.keys(filteredColumns)[0] : field\n }\n\n const colNames: string[] = []\n\n for (const filter of filters) {\n if (!filter) continue;\n\n const { field, operator, value } = filter;\n\n // const formatValue = (val: any, prefix?: string, suffix?: string) => \n // typeof val === \"string\" ? `'${prefix ?? \"\"}${val.replace(/'/g, \"''\")}${suffix ?? \"\"}'` : val;\n\n const formatValue = (\n val: any,\n operator: QueryListFilter[\"operator\"],\n prefix?: string,\n suffix?: string\n ) => {\n\n let returnValue = val\n let sqlValuePrefix = ``\n let sqlValueSuffix = ``\n\n if (operator === queryListFilterOperators.startsWith) {\n sqlValuePrefix = ``\n sqlValueSuffix = `%`\n }\n\n if (operator === queryListFilterOperators.endsWith) {\n sqlValuePrefix = `%`\n sqlValueSuffix = ``\n }\n\n if (\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n sqlValuePrefix = `%`\n sqlValueSuffix = `%`\n }\n\n // override\n if (prefix) sqlValuePrefix = prefix\n if (suffix) sqlValueSuffix = suffix\n\n if (typeof val === \"string\") {\n returnValue = `'${sqlValuePrefix ?? \"\"}${val.replace(/'/g, \"''\")}${sqlValueSuffix ?? \"\"}'`\n }\n\n // check the type of val must string & operator is using like\n if (\n operator === queryListFilterOperators.startsWith ||\n operator === queryListFilterOperators.endsWith ||\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n if (typeof val !== \"string\") {\n throwError(`Filters part:${field} using:${operator} like the val must be string`)\n }\n }\n\n return returnValue\n\n }\n\n const formatWherePart = (val: any, operator: QueryListFilter[\"operator\"]) => {\n\n let sqlOperator: string = operator\n\n // check with like operator\n if (\n operator === queryListFilterOperators.startsWith ||\n operator === queryListFilterOperators.endsWith ||\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n sqlOperator = ctx.dialect === \"postgres\" ? `ILIKE` : `LIKE` // only ILIKE supported in postgres\n }\n\n // not array in value\n if (Array.isArray(value) === false) {\n\n let sqlValue = formatValue(val, operator)\n return `${colName} ${sqlOperator} ${sqlValue}`\n\n }\n\n // for array in value\n let subOrQuery: string[] = []\n\n value.forEach((i: any) => {\n\n let sqlValue = `${formatValue(i, operator)}`\n\n subOrQuery.push(`${colName} ${sqlOperator} ${sqlValue}`)\n\n })\n\n return `(${subOrQuery.join(\" OR \")})`\n\n }\n\n const colName = `${col(field)}`\n\n switch (operator) {\n case queryListFilterOperators.eq:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.eq)}`);\n // andClauses.push(`${colName} = ${formatValue(value)}`);\n break;\n case queryListFilterOperators.notEq:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.notEq)}`);\n // andClauses.push(`${colName} != ${formatValue(value)}`);\n break;\n case queryListFilterOperators.startsWith:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.startsWith)}`);\n // andClauses.push(`${colName} ILIKE '${value}%'`);\n break;\n case queryListFilterOperators.endsWith:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.endsWith)}`);\n // andClauses.push(`${colName} ILIKE '%${value}'`);\n break;\n case queryListFilterOperators.contains:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.contains)}`);\n // andClauses.push(`${colName} ILIKE '%${value}%'`);\n break;\n case queryListFilterOperators.anyOf:\n andClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOf:\n andClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEq:\n andClauses.push(`${colName} >= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.lessThanEq:\n andClauses.push(`${colName} <= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.isNull:\n andClauses.push(`${colName} IS NULL`);\n break;\n case queryListFilterOperators.isNotNull:\n andClauses.push(`${colName} IS NOT NULL`);\n break;\n\n // Or-variants\n case queryListFilterOperators.eqOr:\n // orClauses.push(`${colName} = ${formatValue(value, operator)}`);\n orClauses.push(`${formatWherePart(value, queryListFilterOperators.eqOr)}`);\n break;\n case queryListFilterOperators.containsOr:\n // orClauses.push(`${colName} ILIKE '%${value, operator}%'`);\n orClauses.push(`${formatWherePart(value, queryListFilterOperators.containsOr)}`);\n break;\n case queryListFilterOperators.anyOfOr:\n orClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOfOr:\n orClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEqOr:\n orClauses.push(`${colName} >= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.lessThanEqOr:\n orClauses.push(`${colName} <= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.isNullOr:\n orClauses.push(`${colName} IS NULL`);\n break;\n }\n\n colNames.push(colName)\n\n }\n\n const whereParts: string[] = [];\n if (andClauses.length) whereParts.push(`(${andClauses.join(\" AND \")})`);\n if (orClauses.length) whereParts.push(`(${orClauses.join(\" OR \")})`);\n\n // Extract aliasKeys before '.'\n const aliasKeys = Array.from(\n new Set(\n colNames\n .map(key => key.match(/\\b([a-zA-Z_][a-zA-Z0-9_]*)\\./)?.[1])\n .filter((v): v is string => Boolean(v)) // type guard keeps only valid strings\n )\n );\n\n return {\n where: whereParts.length ? `${whereParts.join(\" AND \")}` : \"\",\n colNames,\n aliasKeys\n }\n};\n\n/** Build ORDER BY clause */\nexport const buildSqlOrderBy = (sortField: QueryList[\"sortfield\"], sortOrder: QueryList[\"sortorder\"]) =>\n sortField ? `ORDER BY ${sortField} ${sortOrder.toUpperCase()}` : \"\";\n\n/** Build LIMIT/OFFSET clause */\nexport const buildSqlLimitOffset = (limit?: QueryList[\"limit\"], offset?: QueryList[\"offset\"]) => {\n const parts: string[] = [];\n\n const _limit = Number(limit ?? 10)\n const _offset = Number(offset ?? 0)\n\n if (_limit !== undefined) parts.push(`LIMIT ${_limit}`);\n if (_offset !== undefined) parts.push(`OFFSET ${_offset}`);\n\n return parts.join(\" \");\n};\n\n/** For Injection Fields */\nexport const buildInjectionFieldsSqlSelect = (alias: string, activeInjectionFields: any[] = []) => {\n return activeInjectionFields.reduce((acc, col) => {\n\n // check the field type is decimal\n let castValue = ``\n\n if (col?.fieldType === \"numeric\") {\n castValue = `::float`\n }\n\n if (col?.fieldType === \"integer\") {\n castValue = `::int`\n }\n\n acc[`${alias}.${col?.fieldName}${castValue}`] = `inf_${col?.fieldName}`;\n return acc;\n }, {} as Record<string, string>);\n}\n\n/**\n * Executes a dynamic SQL listing query along with a count query.\n * \n * This function builds SQL SELECT and COUNT statements using the provided\n * relation maps, filters, and query options, then executes them through\n * the given Prisma model's `raw()` method.\n *\n * Commonly used for paginated data listings that require both the\n * result set and total record count.\n * \n * Returns an object containing:\n * - `data`: The paginated result set.\n * - `total`: The total count of records that match the filters.\n */\nexport const getListWithCount = async ({\n model,\n tableName,\n mainAlias,\n countKey,\n sqlRelationMaps,\n accountId,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n}: {\n model: any,\n tableName: string,\n mainAlias: string,\n countKey: string,\n sqlRelationMaps: any,\n accountId: number,\n filters: any[],\n filterColumns: any,\n sqlSelect: string[]\n sqlSelectAgg: string[],\n sqlRelation: string[]\n sqlRelationAgg: string[],\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string\n sqlLimitOffset: string\n}) => {\n\n const requestWhere = buildSqlWhere(filters, filterColumns)\n\n sqlWhere = [\n ...sqlWhere,\n ...(filters.length ? [requestWhere?.where] : []),\n ]\n\n // get the data (pagination)\n const sqlRaw = buildSqlRawSelect({\n tableName,\n mainAlias,\n accountId,\n sqlSelect: [...sqlSelect, ...sqlSelectAgg],\n sqlRelation: [...sqlRelation, ...sqlRelationAgg],\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n let data = await model.raw(sqlRaw)\n\n let aliasKeys = requestWhere?.aliasKeys\n\n let filteredArray: any = Object.entries(sqlRelationMaps)\n .filter(([key]) => aliasKeys.includes(key))\n .map(([_, value]) => value);\n\n // console.log('filteredArray', JSON.stringify(filteredArray), aliasKeys)\n\n // get the count\n const sqlRawCount = buildSqlRawSelectCount({\n tableName,\n mainAlias,\n accountId,\n sqlSelect: [`${mainAlias}.${countKey}`],\n sqlRelation: filteredArray,\n sqlWhere,\n // sqlGroupBy: [`${mainAlias}.${countKey}`],\n sqlGroupBy: [],\n sqlOrderby: ``\n })\n\n let count = await model.raw(sqlRawCount)\n\n return {\n data,\n total: Number(count[0].filtered_count)\n }\n\n}"]}
@@ -0,0 +1,7 @@
1
+ export declare const getDocumentProfileRelationMaps: () => {
2
+ sqlRelationMaps: Record<"creator" | "updater", string>;
3
+ relationKeys: {
4
+ creator: string;
5
+ updater: string;
6
+ };
7
+ };
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ // import {
3
+ // ModelUserFields,
4
+ // ModelSchedulerLogFields,
5
+ // ModelSchedulerRequestFields
6
+ // } from "../../models"
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.getDocumentProfileRelationMaps = void 0;
9
+ const queryBuilder_1 = require("./queryBuilder");
10
+ const getDocumentProfileRelationMaps = () => {
11
+ let relationKeys = {
12
+ creator: "creator",
13
+ updater: "updater"
14
+ };
15
+ let sqlRelationMaps = {
16
+ creator: (0, queryBuilder_1.buildSqlRelation)("left", "docpro", "users", "creator", ["docpro.createuserid = creator.user_id", "creator.isdelete = false", "creator.istrash = false"]),
17
+ updater: (0, queryBuilder_1.buildSqlRelation)("left", "docpro", "users", "updater", ["docpro.updateuserid = updater.user_id", "updater.isdelete = false", "updater.istrash = false"])
18
+ };
19
+ return {
20
+ sqlRelationMaps,
21
+ relationKeys
22
+ };
23
+ };
24
+ exports.getDocumentProfileRelationMaps = getDocumentProfileRelationMaps;
25
+ // export const buildSchedulerLogMainSqlSelect = () => {
26
+ // return {
27
+ // [`slog.${ModelSchedulerLogFields.scheduler_log_id}`]: "scheduler_log_id",
28
+ // [`slog.${ModelSchedulerLogFields.scheduler_task_id}`]: "scheduler_task_id",
29
+ // [`slog.${ModelSchedulerLogFields.field_module}`]: "field_module",
30
+ // [`slog.${ModelSchedulerLogFields.field_ref}`]: "field_ref",
31
+ // [`slog.${ModelSchedulerLogFields.flow_type}`]: "flow_type",
32
+ // [`slog.${ModelSchedulerLogFields.destination_type}`]: "destination_type",
33
+ // [`slog.${ModelSchedulerLogFields.destination_entity_id}`]: "destination_entity_id",
34
+ // [`slog.${ModelSchedulerLogFields.destination_entity_label}`]: "destination_entity_label",
35
+ // [`slog.${ModelSchedulerLogFields.destination_submit_payload}`]: "destination_submit_payload",
36
+ // [`slog.${ModelSchedulerLogFields.destination_submit_response}`]: "destination_submit_response",
37
+ // [`slog.${ModelSchedulerLogFields.source_type}`]: "source_type",
38
+ // [`slog.${ModelSchedulerLogFields.source_entity_id}`]: "source_entity_id",
39
+ // [`slog.${ModelSchedulerLogFields.source_entity_label}`]: "source_entity_label",
40
+ // [`slog.${ModelSchedulerLogFields.source_entity_data}`]: "source_entity_data",
41
+ // [`slog.${ModelSchedulerLogFields.log_action}`]: "log_action",
42
+ // [`slog.${ModelSchedulerLogFields.log_label}`]: "log_label",
43
+ // [`slog.${ModelSchedulerLogFields.log_message}`]: "log_message",
44
+ // [`slog.${ModelSchedulerLogFields.log_status}`]: "log_status",
45
+ // }
46
+ // }
47
+ // export const buildSchedulerRequestMainSqlSelect = () => {
48
+ // return {
49
+ // [`sreq.${ModelSchedulerRequestFields.scheduler_request_id}`]: "scheduler_request_id",
50
+ // [`sreq.${ModelSchedulerRequestFields.integration_id}`]: "integration_id",
51
+ // [`sreq.${ModelSchedulerRequestFields.field_module}`]: "field_module",
52
+ // [`sreq.${ModelSchedulerRequestFields.field_ref}`]: "field_ref",
53
+ // [`sreq.${ModelSchedulerRequestFields.source_entity_id}`]: "source_entity_id",
54
+ // [`sreq.${ModelSchedulerRequestFields.source_entity_label}`]: "source_entity_label",
55
+ // [`sreq.${ModelSchedulerRequestFields.source_entity_data}`]: "source_entity_data",
56
+ // [`sreq.${ModelSchedulerRequestFields.destination_entity_id}`]: "destination_entity_id",
57
+ // [`sreq.${ModelSchedulerRequestFields.destination_entity_label}`]: "destination_entity_label",
58
+ // [`sreq.${ModelSchedulerRequestFields.request_action}`]: "request_action",
59
+ // [`sreq.${ModelSchedulerRequestFields.attempt_datetime}`]: "attempt_datetime",
60
+ // [`sreq.${ModelSchedulerRequestFields.attempt_no}::float`]: "attempt_no",
61
+ // [`sreq.${ModelSchedulerRequestFields.attempt_result}`]: "attempt_result",
62
+ // [`sreq.${ModelSchedulerRequestFields.attempt_status}`]: "attempt_status",
63
+ // }
64
+ // }
65
+ // export const buildSchedulerLogDefaultSqlSelect = () => {
66
+ // return {
67
+ // [`slog.${ModelSchedulerLogFields.createdatetime}`]: "createdatetime",
68
+ // [`creator.${ModelUserFields.login_username}`]: "createusername",
69
+ // [`slog.${ModelSchedulerLogFields.updatedatetime}`]: "updatedatetime",
70
+ // [`updater.${ModelUserFields.login_username}`]: "updateusername",
71
+ // [`slog.${ModelSchedulerLogFields.isdelete}`]: "isdelete",
72
+ // [`slog.${ModelSchedulerLogFields.istrash}`]: "istrash",
73
+ // [`slog.${ModelSchedulerLogFields.accountid}`]: "accountid",
74
+ // }
75
+ // }
76
+ // export const buildSchedulerRequestDefaultSqlSelect = () => {
77
+ // return {
78
+ // [`sreq.${ModelSchedulerRequestFields.createdatetime}`]: "createdatetime",
79
+ // [`creator.${ModelUserFields.login_username}`]: "createusername",
80
+ // [`sreq.${ModelSchedulerRequestFields.updatedatetime}`]: "updatedatetime",
81
+ // [`updater.${ModelUserFields.login_username}`]: "updateusername",
82
+ // [`sreq.${ModelSchedulerRequestFields.isdelete}`]: "isdelete",
83
+ // [`sreq.${ModelSchedulerRequestFields.istrash}`]: "istrash",
84
+ // [`sreq.${ModelSchedulerRequestFields.accountid}`]: "accountid",
85
+ // }
86
+ // }
87
+ //# sourceMappingURL=queryDocumentProfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryDocumentProfile.js","sourceRoot":"","sources":["../../../src/lib/query_builder/queryDocumentProfile.ts"],"names":[],"mappings":";AAAA,WAAW;AACX,uBAAuB;AACvB,+BAA+B;AAC/B,kCAAkC;AAClC,oBAAoB;;;AAEpB,iDAAkD;AAE3C,MAAM,8BAA8B,GAAG,GAAG,EAAE;IAE/C,IAAI,YAAY,GAAG;QACf,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,SAAS;KACrB,CAAC;IAEF,IAAI,eAAe,GAA2E;QAC1F,OAAO,EAAE,IAAA,+BAAgB,EAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,uCAAuC,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;QACjK,OAAO,EAAE,IAAA,+BAAgB,EAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,uCAAuC,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;KACpK,CAAC;IAEF,OAAO;QACH,eAAe;QACf,YAAY;KACf,CAAA;AAEL,CAAC,CAAA;AAjBY,QAAA,8BAA8B,kCAiB1C;AAED,wDAAwD;AACxD,eAAe;AACf,oFAAoF;AACpF,sFAAsF;AACtF,4EAA4E;AAC5E,sEAAsE;AACtE,sEAAsE;AACtE,oFAAoF;AACpF,8FAA8F;AAC9F,oGAAoG;AACpG,wGAAwG;AACxG,0GAA0G;AAC1G,0EAA0E;AAC1E,oFAAoF;AACpF,0FAA0F;AAC1F,wFAAwF;AACxF,wEAAwE;AACxE,sEAAsE;AACtE,0EAA0E;AAC1E,wEAAwE;AACxE,QAAQ;AACR,IAAI;AAEJ,4DAA4D;AAC5D,eAAe;AACf,gGAAgG;AAChG,oFAAoF;AACpF,gFAAgF;AAChF,0EAA0E;AAC1E,wFAAwF;AACxF,8FAA8F;AAC9F,4FAA4F;AAC5F,kGAAkG;AAClG,wGAAwG;AACxG,oFAAoF;AACpF,wFAAwF;AACxF,mFAAmF;AACnF,oFAAoF;AACpF,oFAAoF;AACpF,QAAQ;AACR,IAAI;AAEJ,2DAA2D;AAC3D,eAAe;AACf,gFAAgF;AAChF,2EAA2E;AAC3E,gFAAgF;AAChF,2EAA2E;AAC3E,oEAAoE;AACpE,kEAAkE;AAClE,sEAAsE;AACtE,QAAQ;AACR,IAAI;AAEJ,+DAA+D;AAC/D,eAAe;AACf,oFAAoF;AACpF,2EAA2E;AAC3E,oFAAoF;AACpF,2EAA2E;AAC3E,wEAAwE;AACxE,sEAAsE;AACtE,0EAA0E;AAC1E,QAAQ;AACR,IAAI","sourcesContent":["// import {\n// ModelUserFields,\n// ModelSchedulerLogFields,\n// ModelSchedulerRequestFields\n// } from \"@/models\"\n\nimport { buildSqlRelation } from \"./queryBuilder\";\n\nexport const getDocumentProfileRelationMaps = () => {\n\n let relationKeys = {\n creator: \"creator\",\n updater: \"updater\"\n };\n\n let sqlRelationMaps: Record<keyof typeof relationKeys, ReturnType<typeof buildSqlRelation>> = {\n creator: buildSqlRelation(\"left\", \"docpro\", \"users\", \"creator\", [\"docpro.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n updater: buildSqlRelation(\"left\", \"docpro\", \"users\", \"updater\", [\"docpro.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n };\n\n return {\n sqlRelationMaps,\n relationKeys\n }\n\n}\n\n// export const buildSchedulerLogMainSqlSelect = () => {\n// return {\n// [`slog.${ModelSchedulerLogFields.scheduler_log_id}`]: \"scheduler_log_id\",\n// [`slog.${ModelSchedulerLogFields.scheduler_task_id}`]: \"scheduler_task_id\",\n// [`slog.${ModelSchedulerLogFields.field_module}`]: \"field_module\",\n// [`slog.${ModelSchedulerLogFields.field_ref}`]: \"field_ref\",\n// [`slog.${ModelSchedulerLogFields.flow_type}`]: \"flow_type\",\n// [`slog.${ModelSchedulerLogFields.destination_type}`]: \"destination_type\",\n// [`slog.${ModelSchedulerLogFields.destination_entity_id}`]: \"destination_entity_id\",\n// [`slog.${ModelSchedulerLogFields.destination_entity_label}`]: \"destination_entity_label\",\n// [`slog.${ModelSchedulerLogFields.destination_submit_payload}`]: \"destination_submit_payload\",\n// [`slog.${ModelSchedulerLogFields.destination_submit_response}`]: \"destination_submit_response\",\n// [`slog.${ModelSchedulerLogFields.source_type}`]: \"source_type\",\n// [`slog.${ModelSchedulerLogFields.source_entity_id}`]: \"source_entity_id\",\n// [`slog.${ModelSchedulerLogFields.source_entity_label}`]: \"source_entity_label\",\n// [`slog.${ModelSchedulerLogFields.source_entity_data}`]: \"source_entity_data\",\n// [`slog.${ModelSchedulerLogFields.log_action}`]: \"log_action\",\n// [`slog.${ModelSchedulerLogFields.log_label}`]: \"log_label\",\n// [`slog.${ModelSchedulerLogFields.log_message}`]: \"log_message\",\n// [`slog.${ModelSchedulerLogFields.log_status}`]: \"log_status\",\n// }\n// }\n\n// export const buildSchedulerRequestMainSqlSelect = () => {\n// return {\n// [`sreq.${ModelSchedulerRequestFields.scheduler_request_id}`]: \"scheduler_request_id\",\n// [`sreq.${ModelSchedulerRequestFields.integration_id}`]: \"integration_id\",\n// [`sreq.${ModelSchedulerRequestFields.field_module}`]: \"field_module\",\n// [`sreq.${ModelSchedulerRequestFields.field_ref}`]: \"field_ref\",\n// [`sreq.${ModelSchedulerRequestFields.source_entity_id}`]: \"source_entity_id\",\n// [`sreq.${ModelSchedulerRequestFields.source_entity_label}`]: \"source_entity_label\",\n// [`sreq.${ModelSchedulerRequestFields.source_entity_data}`]: \"source_entity_data\",\n// [`sreq.${ModelSchedulerRequestFields.destination_entity_id}`]: \"destination_entity_id\",\n// [`sreq.${ModelSchedulerRequestFields.destination_entity_label}`]: \"destination_entity_label\",\n// [`sreq.${ModelSchedulerRequestFields.request_action}`]: \"request_action\",\n// [`sreq.${ModelSchedulerRequestFields.attempt_datetime}`]: \"attempt_datetime\",\n// [`sreq.${ModelSchedulerRequestFields.attempt_no}::float`]: \"attempt_no\",\n// [`sreq.${ModelSchedulerRequestFields.attempt_result}`]: \"attempt_result\",\n// [`sreq.${ModelSchedulerRequestFields.attempt_status}`]: \"attempt_status\",\n// }\n// }\n\n// export const buildSchedulerLogDefaultSqlSelect = () => {\n// return {\n// [`slog.${ModelSchedulerLogFields.createdatetime}`]: \"createdatetime\",\n// [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n// [`slog.${ModelSchedulerLogFields.updatedatetime}`]: \"updatedatetime\",\n// [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n// [`slog.${ModelSchedulerLogFields.isdelete}`]: \"isdelete\",\n// [`slog.${ModelSchedulerLogFields.istrash}`]: \"istrash\",\n// [`slog.${ModelSchedulerLogFields.accountid}`]: \"accountid\",\n// }\n// }\n\n// export const buildSchedulerRequestDefaultSqlSelect = () => {\n// return {\n// [`sreq.${ModelSchedulerRequestFields.createdatetime}`]: \"createdatetime\",\n// [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n// [`sreq.${ModelSchedulerRequestFields.updatedatetime}`]: \"updatedatetime\",\n// [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n// [`sreq.${ModelSchedulerRequestFields.isdelete}`]: \"isdelete\",\n// [`sreq.${ModelSchedulerRequestFields.istrash}`]: \"istrash\",\n// [`sreq.${ModelSchedulerRequestFields.accountid}`]: \"accountid\",\n// }\n// }"]}
@@ -0,0 +1,10 @@
1
+ export declare const getUserBranchRelationMaps: () => {
2
+ sqlRelationMaps: Record<"creator" | "updater" | "area" | "cou" | "state", string>;
3
+ relationKeys: {
4
+ cou: string;
5
+ state: string;
6
+ area: string;
7
+ creator: string;
8
+ updater: string;
9
+ };
10
+ };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ // import {
3
+ // ModelUserFields,
4
+ // ModelSchedulerLogFields,
5
+ // ModelSchedulerRequestFields
6
+ // } from "../../models"
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.getUserBranchRelationMaps = void 0;
9
+ const queryBuilder_1 = require("./queryBuilder");
10
+ const getUserBranchRelationMaps = () => {
11
+ let relationKeys = {
12
+ cou: "cou",
13
+ state: "state",
14
+ area: "area",
15
+ creator: "creator",
16
+ updater: "updater"
17
+ };
18
+ let sqlRelationMaps = {
19
+ cou: (0, queryBuilder_1.buildSqlRelation)("left", "brn", "countries", "cou", ["brn.country_id = cou.country_id", "cou.isdelete = false", "cou.istrash = false"]),
20
+ state: (0, queryBuilder_1.buildSqlRelation)("left", "brn", "states", "state", ["brn.state_id = state.state_id", "state.isdelete = false", "state.istrash = false"]),
21
+ area: (0, queryBuilder_1.buildSqlRelation)("left", "brn", "areas", "area", ["brn.area_id = area.area_id", "area.isdelete = false", "area.istrash = false"]),
22
+ creator: (0, queryBuilder_1.buildSqlRelation)("left", "brn", "users", "creator", ["brn.createuserid = creator.user_id", "creator.isdelete = false", "creator.istrash = false"]),
23
+ updater: (0, queryBuilder_1.buildSqlRelation)("left", "brn", "users", "updater", ["brn.updateuserid = updater.user_id", "updater.isdelete = false", "updater.istrash = false"])
24
+ };
25
+ return {
26
+ sqlRelationMaps,
27
+ relationKeys
28
+ };
29
+ };
30
+ exports.getUserBranchRelationMaps = getUserBranchRelationMaps;
31
+ //# sourceMappingURL=queryUserBranch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryUserBranch.js","sourceRoot":"","sources":["../../../src/lib/query_builder/queryUserBranch.ts"],"names":[],"mappings":";AAAA,WAAW;AACX,uBAAuB;AACvB,+BAA+B;AAC/B,kCAAkC;AAClC,oBAAoB;;;AAEpB,iDAAkD;AAE3C,MAAM,yBAAyB,GAAG,GAAG,EAAE;IAE1C,IAAI,YAAY,GAAG;QACf,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,SAAS;KACrB,CAAC;IAEF,IAAI,eAAe,GAA2E;QAC1F,GAAG,EAAE,IAAA,+BAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,iCAAiC,EAAE,sBAAsB,EAAE,qBAAqB,CAAC,CAAC;QAC5I,KAAK,EAAE,IAAA,+BAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,+BAA+B,EAAE,wBAAwB,EAAE,uBAAuB,CAAC,CAAC;QAC/I,IAAI,EAAE,IAAA,+BAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,4BAA4B,EAAE,uBAAuB,EAAE,sBAAsB,CAAC,CAAC;QACvI,OAAO,EAAE,IAAA,+BAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,oCAAoC,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;QAC3J,OAAO,EAAE,IAAA,+BAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,oCAAoC,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;KAC9J,CAAC;IAEF,OAAO;QACH,eAAe;QACf,YAAY;KACf,CAAA;AAEL,CAAC,CAAA;AAvBY,QAAA,yBAAyB,6BAuBrC","sourcesContent":["// import {\n// ModelUserFields,\n// ModelSchedulerLogFields,\n// ModelSchedulerRequestFields\n// } from \"@/models\"\n\nimport { buildSqlRelation } from \"./queryBuilder\";\n\nexport const getUserBranchRelationMaps = () => {\n\n let relationKeys = {\n cou: \"cou\",\n state: \"state\",\n area: \"area\",\n creator: \"creator\",\n updater: \"updater\"\n };\n\n let sqlRelationMaps: Record<keyof typeof relationKeys, ReturnType<typeof buildSqlRelation>> = {\n cou: buildSqlRelation(\"left\", \"brn\", \"countries\", \"cou\", [\"brn.country_id = cou.country_id\", \"cou.isdelete = false\", \"cou.istrash = false\"]),\n state: buildSqlRelation(\"left\", \"brn\", \"states\", \"state\", [\"brn.state_id = state.state_id\", \"state.isdelete = false\", \"state.istrash = false\"]),\n area: buildSqlRelation(\"left\", \"brn\", \"areas\", \"area\", [\"brn.area_id = area.area_id\", \"area.isdelete = false\", \"area.istrash = false\"]),\n creator: buildSqlRelation(\"left\", \"brn\", \"users\", \"creator\", [\"brn.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n updater: buildSqlRelation(\"left\", \"brn\", \"users\", \"updater\", [\"brn.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n };\n\n return {\n sqlRelationMaps,\n relationKeys\n }\n\n}\n"]}
@@ -31,7 +31,7 @@ const validateRouteFilesUpload = async (req, res, next) => {
31
31
  fileFilter: (req, file, cb) => {
32
32
  if (!allowedFileTypes.includes(file.mimetype)) {
33
33
  // Reject immediately with an Error, providing which file is invalid
34
- return cb(new Error(`Unsupported file type: ${file.originalname}`));
34
+ return cb(new Error(`Unsupported file type: ${file.originalname}, required: ${file.mimetype}`));
35
35
  }
36
36
  cb(null, true);
37
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validateFile.js","sourceRoot":"","sources":["../../../src/middlewares/route/validateFile.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport {\n Request,\n Response,\n NextFunction\n} from \"express\";\n\nimport multer from 'multer';\n\nimport { validateMultipleSchemas, HTTP_STATUS, sendError } from \"@/utils\";\nimport { schemaRouteFileList } from \"@/schema/middleware/route\";\n\nimport { schemaQueryList, schemaQueryGet } from \"@/schema/common\";\n\nimport { FileStorageHook } from \"@/features\";\n\nexport const validateRouteFileGet = validateMultipleSchemas([\n [schemaQueryGet, \"query\"]\n])\n\nexport const validateRouteFileList = validateMultipleSchemas([\n [schemaRouteFileList, \"params\"],\n [schemaQueryList, \"query\"]\n])\n\nexport const validateRouteFilesUpload = async (req: Request, res: Response, next: NextFunction) => {\n\n const hookSetup = await FileStorageHook.onSetup()\n\n // const allowedFileTypes = config.FILE_UPLOAD_ALLOWED_TYPES?.split(\",\") || [];\n // const maxFileSize = Number(config.FILE_UPLOAD_MAX_SIZE) || 50 * 1024 * 1024;\n\n const allowedFileTypes = hookSetup.storageConfiguration.allowedFileTypes ?? [];\n const maxFileSize = Number(hookSetup.storageConfiguration.uploadMaxSize) || 50 * 1024 * 1024;\n\n const upload = multer({\n storage: multer.memoryStorage(),\n limits: {\n fieldSize: maxFileSize,\n fileSize: maxFileSize,\n },\n fileFilter: (req, file, cb) => {\n if (!allowedFileTypes.includes(file.mimetype)) {\n // Reject immediately with an Error, providing which file is invalid\n return cb(new Error(`Unsupported file type: ${file.originalname}`));\n }\n cb(null, true);\n }\n }).array(\"files\"); // 👈 define field here\n\n upload(req, res, (err: any) => {\n\n if (err instanceof multer.MulterError) {\n let message = err.message;\n\n if (err.code === \"LIMIT_FILE_SIZE\") {\n message = `File too large. Max size is ${maxFileSize / (1024 * 1024)} MB`;\n }\n\n sendError(res, \"BAD_REQUEST\", message, \"\", JSON.stringify(err), HTTP_STATUS.BAD_REQUEST);\n return;\n\n } else if (err) {\n\n // This captures the invalid file type error we threw in fileFilter\n sendError(res, \"BAD_REQUEST\", err.message || \"Invalid file\", \"\", JSON.stringify(err), HTTP_STATUS.BAD_REQUEST);\n return;\n\n }\n\n // Check if at least one file passed the filter\n if (!req.files || req.files.length === 0) {\n sendError(res, \"BAD_REQUEST\", \"At least one valid file must be uploaded\", \"\", \"\", HTTP_STATUS.BAD_REQUEST);\n return;\n }\n\n next();\n\n });\n\n};\n\n// export const validateRouteFileUpdate = (req: Request, res: Response, next: NextFunction) => {\n// next();\n// };\n\nexport const validateRouteFileDelete = (req: Request, res: Response, next: NextFunction) => next()"]}
1
+ {"version":3,"file":"validateFile.js","sourceRoot":"","sources":["../../../src/middlewares/route/validateFile.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport {\n Request,\n Response,\n NextFunction\n} from \"express\";\n\nimport multer from 'multer';\n\nimport { validateMultipleSchemas, HTTP_STATUS, sendError } from \"@/utils\";\nimport { schemaRouteFileList } from \"@/schema/middleware/route\";\n\nimport { schemaQueryList, schemaQueryGet } from \"@/schema/common\";\n\nimport { FileStorageHook } from \"@/features\";\n\nexport const validateRouteFileGet = validateMultipleSchemas([\n [schemaQueryGet, \"query\"]\n])\n\nexport const validateRouteFileList = validateMultipleSchemas([\n [schemaRouteFileList, \"params\"],\n [schemaQueryList, \"query\"]\n])\n\nexport const validateRouteFilesUpload = async (req: Request, res: Response, next: NextFunction) => {\n\n const hookSetup = await FileStorageHook.onSetup()\n\n // const allowedFileTypes = config.FILE_UPLOAD_ALLOWED_TYPES?.split(\",\") || [];\n // const maxFileSize = Number(config.FILE_UPLOAD_MAX_SIZE) || 50 * 1024 * 1024;\n\n const allowedFileTypes = hookSetup.storageConfiguration.allowedFileTypes ?? [];\n const maxFileSize = Number(hookSetup.storageConfiguration.uploadMaxSize) || 50 * 1024 * 1024;\n\n const upload = multer({\n storage: multer.memoryStorage(),\n limits: {\n fieldSize: maxFileSize,\n fileSize: maxFileSize,\n },\n fileFilter: (req, file, cb) => {\n if (!allowedFileTypes.includes(file.mimetype)) {\n // Reject immediately with an Error, providing which file is invalid\n return cb(new Error(`Unsupported file type: ${file.originalname}, required: ${file.mimetype}`));\n }\n cb(null, true);\n }\n }).array(\"files\"); // 👈 define field here\n\n upload(req, res, (err: any) => {\n\n if (err instanceof multer.MulterError) {\n let message = err.message;\n\n if (err.code === \"LIMIT_FILE_SIZE\") {\n message = `File too large. Max size is ${maxFileSize / (1024 * 1024)} MB`;\n }\n\n sendError(res, \"BAD_REQUEST\", message, \"\", JSON.stringify(err), HTTP_STATUS.BAD_REQUEST);\n return;\n\n } else if (err) {\n\n // This captures the invalid file type error we threw in fileFilter\n sendError(res, \"BAD_REQUEST\", err.message || \"Invalid file\", \"\", JSON.stringify(err), HTTP_STATUS.BAD_REQUEST);\n return;\n\n }\n\n // Check if at least one file passed the filter\n if (!req.files || req.files.length === 0) {\n sendError(res, \"BAD_REQUEST\", \"At least one valid file must be uploaded\", \"\", \"\", HTTP_STATUS.BAD_REQUEST);\n return;\n }\n\n next();\n\n });\n\n};\n\n// export const validateRouteFileUpdate = (req: Request, res: Response, next: NextFunction) => {\n// next();\n// };\n\nexport const validateRouteFileDelete = (req: Request, res: Response, next: NextFunction) => next()"]}
@@ -45,9 +45,9 @@ export type UserBranchUpdateProps = {
45
45
  };
46
46
  export declare const UserBranchService: (props: UserBranchServiceProps) => {
47
47
  getUserBranch: ({ userBranchId, datatypes }: UserBranchGetProps) => Promise<any>;
48
- getUserBranchByUserId: ({ userId, onlyHQ, limit, datatypes }: UserBranchByUserIdGetProps) => Promise<any[]>;
48
+ getUserBranchByUserId: ({ userId, onlyHQ, limit, datatypes }: UserBranchByUserIdGetProps) => Promise<any>;
49
49
  listUserBranches: ({ limit, offset, filters, sortfield, sortorder, datatypes }: UserBranchListProps) => Promise<{
50
- data: any[];
50
+ data: any;
51
51
  total: number;
52
52
  }>;
53
53
  getUserBranchDataTypes: () => any[];