arkos 0.0.12 → 0.0.13

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 (113) hide show
  1. package/dist/src/app.d.ts +11 -0
  2. package/dist/src/app.d.ts.map +1 -0
  3. package/dist/src/app.js +124 -0
  4. package/dist/src/app.js.map +1 -0
  5. package/dist/src/modules/auth/auth.controller.d.ts +23 -0
  6. package/dist/src/modules/auth/auth.controller.d.ts.map +1 -0
  7. package/dist/src/modules/auth/auth.controller.js +310 -0
  8. package/dist/src/modules/auth/auth.controller.js.map +1 -0
  9. package/dist/src/modules/auth/auth.router.d.ts +4 -0
  10. package/dist/src/modules/auth/auth.router.d.ts.map +1 -0
  11. package/dist/src/modules/auth/auth.router.js +64 -0
  12. package/dist/src/modules/auth/auth.router.js.map +1 -0
  13. package/dist/src/modules/auth/auth.service.d.ts +16 -0
  14. package/dist/src/modules/auth/auth.service.d.ts.map +1 -0
  15. package/dist/src/modules/auth/auth.service.js +120 -0
  16. package/dist/src/modules/auth/auth.service.js.map +1 -0
  17. package/dist/src/modules/base/base.controller.d.ts +17 -0
  18. package/dist/src/modules/base/base.controller.d.ts.map +1 -0
  19. package/dist/src/modules/base/base.controller.js +296 -0
  20. package/dist/src/modules/base/base.controller.js.map +1 -0
  21. package/dist/src/modules/base/base.middlewares.d.ts +20 -0
  22. package/dist/src/modules/base/base.middlewares.d.ts.map +1 -0
  23. package/dist/src/modules/base/base.middlewares.js +86 -0
  24. package/dist/src/modules/base/base.middlewares.js.map +1 -0
  25. package/dist/src/modules/base/base.router.d.ts +4 -0
  26. package/dist/src/modules/base/base.router.d.ts.map +1 -0
  27. package/dist/src/modules/base/base.router.js +75 -0
  28. package/dist/src/modules/base/base.router.js.map +1 -0
  29. package/dist/src/modules/base/base.service.d.ts +32 -0
  30. package/dist/src/modules/base/base.service.d.ts.map +1 -0
  31. package/dist/src/modules/base/base.service.js +149 -0
  32. package/dist/src/modules/base/base.service.js.map +1 -0
  33. package/dist/src/modules/base/utils/base.helpers.d.ts +29 -0
  34. package/dist/src/modules/base/utils/base.helpers.d.ts.map +1 -0
  35. package/dist/src/modules/base/utils/base.helpers.js +106 -0
  36. package/dist/src/modules/base/utils/base.helpers.js.map +1 -0
  37. package/dist/src/modules/email/email.service.d.ts +22 -0
  38. package/dist/src/modules/email/email.service.d.ts.map +1 -0
  39. package/dist/src/modules/email/email.service.js +45 -0
  40. package/dist/src/modules/email/email.service.js.map +1 -0
  41. package/dist/src/modules/email/utils/helpers/email.helpers.d.ts +9 -0
  42. package/dist/src/modules/email/utils/helpers/email.helpers.d.ts.map +1 -0
  43. package/dist/src/modules/email/utils/helpers/email.helpers.js +25 -0
  44. package/dist/src/modules/email/utils/helpers/email.helpers.js.map +1 -0
  45. package/dist/src/modules/error-handler/error-handler.controller.d.ts +4 -0
  46. package/dist/src/modules/error-handler/error-handler.controller.d.ts.map +1 -0
  47. package/dist/src/modules/error-handler/error-handler.controller.js +182 -0
  48. package/dist/src/modules/error-handler/error-handler.controller.js.map +1 -0
  49. package/dist/src/modules/error-handler/utils/app-error.d.ts +11 -0
  50. package/dist/src/modules/error-handler/utils/app-error.d.ts.map +1 -0
  51. package/dist/src/modules/error-handler/utils/app-error.js +23 -0
  52. package/dist/src/modules/error-handler/utils/app-error.js.map +1 -0
  53. package/dist/src/modules/error-handler/utils/catch-async.d.ts +4 -0
  54. package/dist/src/modules/error-handler/utils/catch-async.d.ts.map +1 -0
  55. package/dist/src/modules/error-handler/utils/catch-async.js +9 -0
  56. package/dist/src/modules/error-handler/utils/catch-async.js.map +1 -0
  57. package/dist/src/modules/error-handler/utils/error-handler.helpers.d.ts +43 -0
  58. package/dist/src/modules/error-handler/utils/error-handler.helpers.d.ts.map +1 -0
  59. package/dist/src/modules/error-handler/utils/error-handler.helpers.js +209 -0
  60. package/dist/src/modules/error-handler/utils/error-handler.helpers.js.map +1 -0
  61. package/dist/src/modules/file-uploader/file-uploader.service.d.ts +20 -0
  62. package/dist/src/modules/file-uploader/file-uploader.service.d.ts.map +1 -0
  63. package/dist/src/modules/file-uploader/file-uploader.service.js +114 -0
  64. package/dist/src/modules/file-uploader/file-uploader.service.js.map +1 -0
  65. package/dist/src/paths.d.ts +2 -0
  66. package/dist/src/paths.d.ts.map +1 -0
  67. package/dist/src/paths.js +9 -0
  68. package/dist/src/paths.js.map +1 -0
  69. package/dist/src/server.d.ts +21 -0
  70. package/dist/src/server.d.ts.map +1 -0
  71. package/dist/src/server.js +50 -0
  72. package/dist/src/server.js.map +1 -0
  73. package/dist/src/utils/features/api.features.d.ts +20 -0
  74. package/dist/src/utils/features/api.features.d.ts.map +1 -0
  75. package/dist/src/utils/features/api.features.js +175 -0
  76. package/dist/src/utils/features/api.features.js.map +1 -0
  77. package/dist/src/utils/features/prisma.helpers.d.ts +4 -0
  78. package/dist/src/utils/features/prisma.helpers.d.ts.map +1 -0
  79. package/dist/src/utils/features/prisma.helpers.js +68 -0
  80. package/dist/src/utils/features/prisma.helpers.js.map +1 -0
  81. package/dist/src/utils/helpers/api.features.helpers.d.ts +41 -0
  82. package/dist/src/utils/helpers/api.features.helpers.d.ts.map +1 -0
  83. package/dist/src/utils/helpers/api.features.helpers.js +161 -0
  84. package/dist/src/utils/helpers/api.features.helpers.js.map +1 -0
  85. package/dist/src/utils/helpers/models.helpers.d.ts +21 -0
  86. package/dist/src/utils/helpers/models.helpers.d.ts.map +1 -0
  87. package/dist/src/utils/helpers/models.helpers.js +192 -0
  88. package/dist/src/utils/helpers/models.helpers.js.map +1 -0
  89. package/dist/src/utils/helpers/text.helpers.d.ts +2 -0
  90. package/dist/src/utils/helpers/text.helpers.d.ts.map +1 -0
  91. package/dist/src/utils/helpers/text.helpers.js +12 -0
  92. package/dist/src/utils/helpers/text.helpers.js.map +1 -0
  93. package/dist/src/utils/permissions/index.d.ts +3 -0
  94. package/dist/src/utils/permissions/index.d.ts.map +1 -0
  95. package/dist/src/utils/permissions/index.js +17 -0
  96. package/dist/src/utils/permissions/index.js.map +1 -0
  97. package/dist/src/utils/scripts/export-prisma-types.d.ts +2 -0
  98. package/dist/src/utils/scripts/export-prisma-types.d.ts.map +1 -0
  99. package/dist/src/utils/scripts/export-prisma-types.js +152 -0
  100. package/dist/src/utils/scripts/export-prisma-types.js.map +1 -0
  101. package/dist/src/utils/scripts/generate-zod-schemas.d.ts +2 -0
  102. package/dist/src/utils/scripts/generate-zod-schemas.d.ts.map +1 -0
  103. package/dist/src/utils/scripts/generate-zod-schemas.js +121 -0
  104. package/dist/src/utils/scripts/generate-zod-schemas.js.map +1 -0
  105. package/dist/src/utils/scripts/prisma-db-push.d.ts +2 -0
  106. package/dist/src/utils/scripts/prisma-db-push.d.ts.map +1 -0
  107. package/dist/src/utils/scripts/prisma-db-push.js +24 -0
  108. package/dist/src/utils/scripts/prisma-db-push.js.map +1 -0
  109. package/dist/src/utils/validate-dto.d.ts +3 -0
  110. package/dist/src/utils/validate-dto.d.ts.map +1 -0
  111. package/dist/src/utils/validate-dto.js +17 -0
  112. package/dist/src/utils/validate-dto.js.map +1 -0
  113. package/package.json +1 -1
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.fileUploaderService = exports.videoUploaderService = exports.documentUploaderService = exports.imageUploaderService = exports.FileUploaderService = void 0;
7
+ const multer_1 = __importDefault(require("multer"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const app_error_1 = __importDefault(require("../error-handler/utils/app-error"));
11
+ const util_1 = require("util");
12
+ const baseUploadDir = process.env.BASE_UPLOAD_DIR || 'uploads';
13
+ class FileUploaderService {
14
+ uploadDir;
15
+ fileSizeLimit;
16
+ allowedFileTypes;
17
+ storage;
18
+ constructor(uploadDir = baseUploadDir, fileSizeLimit = 1024 * 1024 * 5, allowedFileTypes = /jpeg|jpg|png|gif/) {
19
+ this.uploadDir = path_1.default.join('.', `${uploadDir}/`);
20
+ this.fileSizeLimit = fileSizeLimit;
21
+ this.allowedFileTypes = allowedFileTypes;
22
+ if (!fs_1.default.existsSync(this.uploadDir)) {
23
+ fs_1.default.mkdirSync(this.uploadDir, { recursive: true });
24
+ }
25
+ this.storage = multer_1.default.diskStorage({
26
+ destination: (req, file, cb) => {
27
+ cb(null, this.uploadDir);
28
+ },
29
+ filename: (req, file, cb) => {
30
+ const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1e9);
31
+ cb(null, `${uniqueSuffix}${path_1.default.extname(file.originalname)}`);
32
+ },
33
+ });
34
+ }
35
+ fileFilter = (req, file, cb) => {
36
+ const extName = this.allowedFileTypes.test(path_1.default.extname(file.originalname).toLowerCase());
37
+ const mimeType = this.allowedFileTypes.test(file.mimetype);
38
+ if (mimeType && extName) {
39
+ cb(null, true);
40
+ }
41
+ else {
42
+ cb(new app_error_1.default('Invalid file type', 400));
43
+ }
44
+ };
45
+ getUploader() {
46
+ return (0, multer_1.default)({
47
+ storage: this.storage,
48
+ fileFilter: this.fileFilter,
49
+ limits: { fileSize: this.fileSizeLimit },
50
+ });
51
+ }
52
+ handleSingleUpload(fieldName, oldFilePath) {
53
+ return (req, res, next) => {
54
+ const upload = this.getUploader().single(fieldName);
55
+ upload(req, res, async (err) => {
56
+ if (err instanceof multer_1.default.MulterError) {
57
+ return next(err);
58
+ }
59
+ else if (err) {
60
+ return next(err);
61
+ }
62
+ if (oldFilePath) {
63
+ const filePath = path_1.default.join(oldFilePath);
64
+ try {
65
+ const stats = await (0, util_1.promisify)(fs_1.default.stat)(filePath);
66
+ if (stats) {
67
+ await (0, util_1.promisify)(fs_1.default.unlink)(filePath);
68
+ }
69
+ }
70
+ catch (err) { }
71
+ }
72
+ next();
73
+ });
74
+ };
75
+ }
76
+ handleMultipleUpload(fieldName, maxCount) {
77
+ return (req, res, next) => {
78
+ const upload = this.getUploader().array(fieldName, maxCount);
79
+ upload(req, res, (err) => {
80
+ if (err instanceof multer_1.default.MulterError)
81
+ return next(err);
82
+ else if (err)
83
+ return next(err);
84
+ next();
85
+ });
86
+ };
87
+ }
88
+ handleDeleteSingleFile(oldFilePath) {
89
+ return (req, res, next) => {
90
+ ;
91
+ (async () => {
92
+ const filePath = path_1.default.join(oldFilePath);
93
+ try {
94
+ const stats = await (0, util_1.promisify)(fs_1.default.stat)(filePath);
95
+ if (stats) {
96
+ await (0, util_1.promisify)(fs_1.default.unlink)(filePath);
97
+ }
98
+ }
99
+ catch (err) { }
100
+ next();
101
+ })();
102
+ };
103
+ }
104
+ }
105
+ exports.FileUploaderService = FileUploaderService;
106
+ const imageUploaderService = new FileUploaderService(`${baseUploadDir}/images`, 1024 * 1024 * 15, /jpeg|jpg|png|gif|webp|svg|bmp|tiff|heif|heic|ico|jfif|raw|cr2|nef|orf|sr2|arw|dng|pef|raf|rw2|psd|ai|eps|xcf|jxr|wdp|hdp|jp2|j2k|jpf|jpx|jpm|mj2|avif/);
107
+ exports.imageUploaderService = imageUploaderService;
108
+ const videoUploaderService = new FileUploaderService(`${baseUploadDir}/videos`, 1024 * 1024 * 100, /mp4|avi|mov|mkv|flv|wmv|webm|mpg|mpeg|3gp|m4v|ts|rm|rmvb|vob|ogv|dv|qt|asf|m2ts|mts|divx|f4v|swf|mxf|roq|nsv|mvb|svi|mpe|m2v|mp2|mpv|h264|h265|hevc/);
109
+ exports.videoUploaderService = videoUploaderService;
110
+ const documentUploaderService = new FileUploaderService(`${baseUploadDir}/documents`, 1024 * 1024 * 50, /pdf|doc|docx|xls|xlsx|ppt|pptx|odt|ods|odg|odp|txt|rtf|csv|epub|md|tex|pages|numbers|key|xml|json|yaml|yml|ini|cfg|conf|log|html|htm|xhtml|djvu|mobi|azw|azw3|fb2|lit|ps|wpd|wps|dot|dotx|xlt|xltx|pot|potx|oft|one|onetoc2|opf|oxps|hwp/);
111
+ exports.documentUploaderService = documentUploaderService;
112
+ const fileUploaderService = new FileUploaderService(`${baseUploadDir}/`, 1024 * 1024 * 1024, /.*/);
113
+ exports.fileUploaderService = fileUploaderService;
114
+ //# sourceMappingURL=file-uploader.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-uploader.service.js","sourceRoot":"","sources":["../../../../src/modules/file-uploader/file-uploader.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const ROOT_DIR: string;
2
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/paths.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,QAAmC,CAAA"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ROOT_DIR = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ exports.ROOT_DIR = path_1.default.resolve(__dirname, '../..');
9
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/paths.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AAEV,QAAA,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { IncomingMessage, Server, ServerResponse } from "http";
2
+ import { Express } from "express";
3
+ import { InitConfigs } from "./app";
4
+ declare let server: Server<typeof IncomingMessage, typeof ServerResponse>;
5
+ declare let app: Express;
6
+ /**
7
+ * Initializes the application server.
8
+ *
9
+ * This function starts the server by listening on a specified port.
10
+ * The port is determined by the following order of precedence:
11
+ * 1. The `PORT` environment variable.
12
+ * 2. The `port` argument passed to the function.
13
+ * 3. Defaults to `3000` if neither is provided.
14
+ *
15
+ * @param {Express} app - express app.
16
+ * @param {InitConfigs} initConfigs - initial configs for the api (prisma, authentication, port).
17
+ * @returns {void} This function does not return a value.
18
+ */
19
+ declare function initApp(app: Express, initConfigs: InitConfigs): void;
20
+ export { server, app, initApp };
21
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAa,WAAW,EAAE,MAAM,OAAO,CAAC;AAS/C,QAAA,IAAI,MAAM,EAAE,MAAM,CAAC,OAAO,eAAe,EAAE,OAAO,cAAc,CAAC,CAAC;AAClE,QAAA,IAAI,GAAG,EAAE,OAAO,CAAC;AAEjB;;;;;;;;;;;;GAYG;AACH,iBAAS,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,CAY7D;AAiBD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.app = exports.server = void 0;
4
+ exports.initApp = initApp;
5
+ const app_1 = require("./app");
6
+ process.on("uncaughtException", (err) => {
7
+ console.error("UNCAUGHT EXCEPTION! SHUTTING DOWN...");
8
+ console.error(err.name, err.message);
9
+ console.error(err);
10
+ process.exit(1);
11
+ });
12
+ let server;
13
+ let app;
14
+ /**
15
+ * Initializes the application server.
16
+ *
17
+ * This function starts the server by listening on a specified port.
18
+ * The port is determined by the following order of precedence:
19
+ * 1. The `PORT` environment variable.
20
+ * 2. The `port` argument passed to the function.
21
+ * 3. Defaults to `3000` if neither is provided.
22
+ *
23
+ * @param {Express} app - express app.
24
+ * @param {InitConfigs} initConfigs - initial configs for the api (prisma, authentication, port).
25
+ * @returns {void} This function does not return a value.
26
+ */
27
+ function initApp(app, initConfigs) {
28
+ const port = initConfigs.port || Number(process.env.PORT) || 8000;
29
+ const application = (0, app_1.bootstrap)(app, {
30
+ authentication: initConfigs.authentication || false,
31
+ });
32
+ exports.server = server = application.listen(port, () => {
33
+ const time = new Date().toTimeString().split(" ")[0];
34
+ console.info(`[\x1b[32mREADY\x1b[0m] \x1b[90m${time}\x1b[0m App running on port \x1b[33m${port}\x1b[0m, server waiting on http://localhost:${port}`);
35
+ });
36
+ }
37
+ process.on("unhandledRejection", (err) => {
38
+ console.error("UNHANDLED REJECTION! SHUTTING DOWN...");
39
+ console.error(err.name, err.message);
40
+ server.close(() => {
41
+ process.exit(1);
42
+ });
43
+ });
44
+ process.on("SIGTERM", () => {
45
+ console.error("👋🏽 SIGTERM RECEIVED. Shutting down gracefully!");
46
+ server.close(() => {
47
+ console.error("🔥 Process terminated");
48
+ });
49
+ });
50
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":";;;AAyDsB,0BAAO;AAtD7B,+BAA+C;AAE/C,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACtC,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,IAAI,MAA6D,CAAC;AAClE,IAAI,GAAY,CAAC;AAEjB;;;;;;;;;;;;GAYG;AACH,SAAS,OAAO,CAAC,GAAY,EAAE,WAAwB;IACrD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAClE,MAAM,WAAW,GAAG,IAAA,eAAS,EAAC,GAAG,EAAE;QACjC,cAAc,EAAE,WAAW,CAAC,cAAc,IAAI,KAAK;KACpD,CAAC,CAAC;IAEH,iBAAA,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACrC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CACV,kCAAkC,IAAI,uCAAuC,IAAI,+CAA+C,IAAI,EAAE,CACvI,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAa,EAAE,EAAE;IACjD,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACvD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAClE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAChB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { Request } from "express";
2
+ type ModelName = string;
3
+ export default class APIFeatures {
4
+ req: Request;
5
+ searchParams: any;
6
+ searchParamsWithModifiers: any;
7
+ filters: any;
8
+ modelName: ModelName;
9
+ relationFields: Record<string, boolean>;
10
+ excludedFields: string[];
11
+ constructor(req: Request, modelName: ModelName, relationFields?: Record<string, boolean>);
12
+ filter(): this;
13
+ search(): void;
14
+ sort(): this;
15
+ limitFields(): this;
16
+ paginate(): this;
17
+ exec(): Promise<any>;
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=api.features.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.features.d.ts","sourceRoot":"","sources":["../../../../src/utils/features/api.features.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAMlC,KAAK,SAAS,GAAG,MAAM,CAAC;AAExB,MAAM,CAAC,OAAO,OAAO,WAAW;IAC9B,GAAG,EAAE,OAAO,CAAC;IACb,YAAY,EAAE,GAAG,CAAC;IAClB,yBAAyB,EAAE,GAAG,CAAC;IAC/B,OAAO,EAAE,GAAG,CAAM;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,cAAc,WAaZ;gBAGA,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,SAAS,EACpB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAW1C,MAAM;IA8DN,MAAM;IAUN,IAAI;IAcJ,WAAW;IA2EX,QAAQ;IAaF,IAAI;CAGX"}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const deepmerge_1 = __importDefault(require("deepmerge"));
7
+ const api_features_helpers_1 = require("../helpers/api.features.helpers");
8
+ const app_error_1 = __importDefault(require("../../modules/error-handler/utils/app-error"));
9
+ const app_1 = require("../../app");
10
+ class APIFeatures {
11
+ req; // The Prisma query
12
+ searchParams; // The query string parameters from the request
13
+ searchParamsWithModifiers; // The query string parameters from the request
14
+ filters = {};
15
+ modelName;
16
+ relationFields;
17
+ excludedFields = [
18
+ "page",
19
+ "sort",
20
+ "limit",
21
+ "fields",
22
+ "addFields",
23
+ "removeFields",
24
+ "search",
25
+ "include",
26
+ "filterMode",
27
+ "where",
28
+ "prismaQueryOptions",
29
+ "ignoredFields",
30
+ ];
31
+ constructor(req, modelName, relationFields) {
32
+ this.req = req;
33
+ this.modelName = modelName;
34
+ this.searchParams = (0, api_features_helpers_1.parseQueryParamsWithModifiers)(req.query);
35
+ this.filters = { ...this.filters };
36
+ if (relationFields)
37
+ this.filters.iclude = relationFields;
38
+ this.relationFields = relationFields || {};
39
+ }
40
+ filter() {
41
+ const searchableFields = [];
42
+ const queryObj = { ...this.searchParams };
43
+ this.excludedFields.forEach((el) => delete queryObj[el]);
44
+ let queryStr = JSON.stringify(queryObj);
45
+ queryStr = queryStr.replace(/\b(gte|gt|lte|lt)\b/g, (match) => `${match}`);
46
+ const whereObj = { ...this.req.params, ...queryObj };
47
+ const whereLogicalOperatorFilters = Object.keys(whereObj).map((key) => ({
48
+ [key]: whereObj[key],
49
+ }));
50
+ let whereOptions = whereLogicalOperatorFilters.length > 0
51
+ ? {
52
+ [this.req.query?.filterMode ?? "OR"]: whereLogicalOperatorFilters,
53
+ }
54
+ : {};
55
+ if (!!this.searchParams.search) {
56
+ Object.keys(app_1.prisma[this.modelName].fields).forEach((key) => {
57
+ const field = app_1.prisma[this.modelName].fields[key];
58
+ if (field.typeName === "String" &&
59
+ key !== "id" &&
60
+ !field.isList &&
61
+ !field.name.includes("Id") &&
62
+ !field.name.includes("ID")) {
63
+ searchableFields.push({
64
+ [`${key}`]: {
65
+ contains: this.searchParams.search,
66
+ mode: "insensitive",
67
+ },
68
+ });
69
+ }
70
+ });
71
+ whereOptions = (0, deepmerge_1.default)(whereOptions, {
72
+ OR: searchableFields,
73
+ });
74
+ }
75
+ const parsedQueryOptions = typeof this.req.query?.prismaQueryOptions === "string"
76
+ ? JSON.parse(this.req.query?.prismaQueryOptions)
77
+ : {};
78
+ this.filters = (0, deepmerge_1.default)({
79
+ where: whereOptions,
80
+ }, parsedQueryOptions, this.filters);
81
+ return this;
82
+ }
83
+ search() {
84
+ if (this.searchParams?.search) {
85
+ this.filters = (0, deepmerge_1.default)(this.filters, {
86
+ where: {
87
+ OR: [],
88
+ },
89
+ });
90
+ }
91
+ }
92
+ sort() {
93
+ if (this.searchParams.sort) {
94
+ const sortBy = this.searchParams?.sort
95
+ ?.split(",")
96
+ ?.map((field) => ({
97
+ [field.startsWith("-") ? field.substring(1) : field]: field.startsWith("-") ? "desc" : "asc",
98
+ }));
99
+ this.filters = (0, deepmerge_1.default)(this.filters, { orderBy: sortBy });
100
+ }
101
+ return this;
102
+ }
103
+ limitFields() {
104
+ if (this.searchParams?.fields &&
105
+ !this.searchParams?.addFields &&
106
+ !this.searchParams?.removeFields) {
107
+ const fieldsToSelect = this.searchParams.fields
108
+ .split(",")
109
+ .filter((field) => !field.startsWith("+") && !field.startsWith("-"));
110
+ this.filters = {
111
+ ...this.filters,
112
+ select: fieldsToSelect.reduce((acc, field) => {
113
+ acc[field] = true;
114
+ return acc;
115
+ }, {}),
116
+ };
117
+ this.filters.select = { ...this.filters.select, ...this.filters.include };
118
+ delete this.filters.include;
119
+ }
120
+ else if (this.searchParams?.fields &&
121
+ (this.searchParams?.addFields || this.searchParams?.removeFields))
122
+ throw new app_error_1.default("Cannot use fields in the same query with addFields or removeFields.", 400);
123
+ if (this.searchParams?.addFields && !this.searchParams?.fields) {
124
+ const fieldsToAdd = this.searchParams.addFields
125
+ .split(",")
126
+ .filter((field) => field.startsWith("+"));
127
+ this.filters = {
128
+ ...this.filters,
129
+ select: {
130
+ ...this.filters.include,
131
+ ...fieldsToAdd.reduce((acc, field) => {
132
+ acc[field.replace("+", "")] = true;
133
+ return acc;
134
+ }, {}),
135
+ },
136
+ };
137
+ }
138
+ else if (this.searchParams?.fields && this.searchParams?.addFields)
139
+ throw new app_error_1.default("Cannot use addFields in the same query with fields.", 400);
140
+ if (this.searchParams?.removeFields && !this.searchParams?.fields) {
141
+ const fieldsToRemove = this.searchParams.removeFields
142
+ .split(",")
143
+ .filter((field) => field.startsWith("-"));
144
+ this.filters = {
145
+ ...this.filters,
146
+ select: {
147
+ ...this.filters.include,
148
+ ...fieldsToRemove.reduce((acc, field) => {
149
+ acc[field.replace("-", "")] = false;
150
+ return acc;
151
+ }, {}),
152
+ },
153
+ };
154
+ }
155
+ else if (this.searchParams?.removeFields && this.searchParams?.addFields)
156
+ throw new app_error_1.default("Cannot use removeFields in the same query with fields.", 400);
157
+ return this;
158
+ }
159
+ paginate() {
160
+ const page = parseInt(this.searchParams.page, 10) || 1;
161
+ const limit = parseInt(this.searchParams.limit, 10) || 30;
162
+ const skip = (page - 1) * limit;
163
+ this.filters = {
164
+ ...this.filters,
165
+ skip,
166
+ take: limit,
167
+ };
168
+ return this;
169
+ }
170
+ async exec() {
171
+ return await app_1.prisma[this.modelName].findMany(this.filters);
172
+ }
173
+ }
174
+ exports.default = APIFeatures;
175
+ //# sourceMappingURL=api.features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.features.js","sourceRoot":"","sources":["../../../../src/utils/features/api.features.ts"],"names":[],"mappings":";;;;;AACA,0DAAkC;AAClC,0EAAgF;AAChF,4FAAmE;AACnE,mCAAmC;AAInC,MAAqB,WAAW;IAC9B,GAAG,CAAU,CAAC,mBAAmB;IACjC,YAAY,CAAM,CAAC,+CAA+C;IAClE,yBAAyB,CAAM,CAAC,+CAA+C;IAC/E,OAAO,GAAQ,EAAE,CAAC;IAClB,SAAS,CAAY;IACrB,cAAc,CAA0B;IACxC,cAAc,GAAG;QACf,MAAM;QACN,MAAM;QACN,OAAO;QACP,QAAQ;QACR,WAAW;QACX,cAAc;QACd,QAAQ;QACR,SAAS;QACT,YAAY;QACZ,OAAO;QACP,oBAAoB;QACpB,eAAe;KAChB,CAAC;IAEF,YACE,GAAY,EACZ,SAAoB,EACpB,cAAwC;QAExC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,IAAA,oDAA6B,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAEnC,IAAI,cAAc;YAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC;QACzD,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM;QACJ,MAAM,gBAAgB,GAA0B,EAAE,CAAC;QAEnD,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAEzD,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;QACrD,MAAM,2BAA2B,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACtE,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC;SACrB,CAAC,CAAC,CAAC;QAEJ,IAAI,YAAY,GACd,2BAA2B,CAAC,MAAM,GAAG,CAAC;YACpC,CAAC,CAAC;gBACE,CAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAqB,IAAI,IAAI,CAAC,EAC9C,2BAA2B;aAC9B;YACH,CAAC,CAAC,EAAE,CAAC;QAET,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAE,YAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAClE,MAAM,KAAK,GAAK,YAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAc,CAAC,GAAG,CAAC,CAAC;gBACnE,IACE,KAAK,CAAC,QAAQ,KAAK,QAAQ;oBAC3B,GAAG,KAAK,IAAI;oBACZ,CAAC,KAAK,CAAC,MAAM;oBACb,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAC1B,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC1B,CAAC;oBACD,gBAAgB,CAAC,IAAI,CAAC;wBACpB,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;4BACV,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;4BAClC,IAAI,EAAE,aAAa;yBACpB;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,YAAY,GAAG,IAAA,mBAAS,EAAC,YAAY,EAAE;gBACrC,EAAE,EAAE,gBAAgB;aACrB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,kBAAkB,GACtB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,QAAQ;YACpD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,kBAAkB,CAAC;YAChD,CAAC,CAAC,EAAE,CAAC;QAET,IAAI,CAAC,OAAO,GAAG,IAAA,mBAAS,EACtB;YACE,KAAK,EAAE,YAAY;SACpB,EACD,kBAAkB,EAClB,IAAI,CAAC,OAAO,CACb,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,GAAG,IAAA,mBAAS,EAAC,IAAI,CAAC,OAAO,EAAE;gBACrC,KAAK,EAAE;oBACL,EAAE,EAAE,EAAE;iBACP;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI;gBACpC,EAAE,KAAK,CAAC,GAAG,CAAC;gBACZ,EAAE,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;gBACxB,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAClD,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;aACzC,CAAC,CAAC,CAAC;YACN,IAAI,CAAC,OAAO,GAAG,IAAA,mBAAS,EAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;QACT,IACE,IAAI,CAAC,YAAY,EAAE,MAAM;YACzB,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS;YAC7B,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,EAChC,CAAC;YACD,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;iBAC5C,KAAK,CAAC,GAAG,CAAC;iBACV,MAAM,CACL,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CACpE,CAAC;YAEJ,IAAI,CAAC,OAAO,GAAG;gBACb,GAAG,IAAI,CAAC,OAAO;gBACf,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,KAAa,EAAE,EAAE;oBACxD,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;oBAClB,OAAO,GAAG,CAAC;gBACb,CAAC,EAAE,EAAE,CAAC;aACP,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1E,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC9B,CAAC;aAAM,IACL,IAAI,CAAC,YAAY,EAAE,MAAM;YACzB,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC;YAEjE,MAAM,IAAI,mBAAQ,CAChB,qEAAqE,EACrE,GAAG,CACJ,CAAC;QAEJ,IAAI,IAAI,CAAC,YAAY,EAAE,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;YAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS;iBAC5C,KAAK,CAAC,GAAG,CAAC;iBACV,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YAEpD,IAAI,CAAC,OAAO,GAAG;gBACb,GAAG,IAAI,CAAC,OAAO;gBACf,MAAM,EAAE;oBACN,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;oBACvB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,KAAa,EAAE,EAAE;wBAChD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;wBACnC,OAAO,GAAG,CAAC;oBACb,CAAC,EAAE,EAAE,CAAC;iBACP;aACF,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,SAAS;YAClE,MAAM,IAAI,mBAAQ,CAChB,qDAAqD,EACrD,GAAG,CACJ,CAAC;QAEJ,IAAI,IAAI,CAAC,YAAY,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;YAClE,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY;iBAClD,KAAK,CAAC,GAAG,CAAC;iBACV,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YAEpD,IAAI,CAAC,OAAO,GAAG;gBACb,GAAG,IAAI,CAAC,OAAO;gBACf,MAAM,EAAE;oBACN,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;oBACvB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,KAAa,EAAE,EAAE;wBACnD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;wBACpC,OAAO,GAAG,CAAC;oBACb,CAAC,EAAE,EAAE,CAAC;iBACP;aACF,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,YAAY,EAAE,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,SAAS;YACxE,MAAM,IAAI,mBAAQ,CAChB,wDAAwD,EACxD,GAAG,CACJ,CAAC;QAEJ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;QAEhC,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,IAAI,CAAC,OAAO;YACf,IAAI;YACJ,IAAI,EAAE,KAAK;SACZ,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,MAAO,YAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;CACF;AArND,8BAqNC"}
@@ -0,0 +1,4 @@
1
+ import { Request, Response, NextFunction } from "express";
2
+ export declare const loadPrismaModule: () => Promise<any>;
3
+ export declare const checkDatabaseConnection: (prisma: any) => (req: Request, res: Response, next: NextFunction) => void;
4
+ //# sourceMappingURL=prisma.helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.helpers.d.ts","sourceRoot":"","sources":["../../../../src/utils/features/prisma.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAM1D,eAAO,MAAM,gBAAgB,oBAW5B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,QAAQ,GAAG,8DAS/C,CAAC"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.checkDatabaseConnection = exports.loadPrismaModule = void 0;
40
+ const catch_async_1 = __importDefault(require("../../modules/error-handler/utils/catch-async"));
41
+ const app_error_1 = __importDefault(require("../../modules/error-handler/utils/app-error"));
42
+ let prismaInstance = null;
43
+ const loadPrismaModule = async () => {
44
+ if (!prismaInstance) {
45
+ try {
46
+ const prismaModule = await Promise.resolve(`${`${process.cwd()}/src/utils/prisma`}`).then(s => __importStar(require(s)));
47
+ prismaInstance = prismaModule.default || prismaModule;
48
+ }
49
+ catch (error) {
50
+ console.error("Failed to load prisma.ts:", error);
51
+ throw new Error("Could not initialize Prisma module.");
52
+ }
53
+ }
54
+ return prismaInstance;
55
+ };
56
+ exports.loadPrismaModule = loadPrismaModule;
57
+ const checkDatabaseConnection = (prisma) => (0, catch_async_1.default)(async (req, res, next) => {
58
+ try {
59
+ await prisma.$connect();
60
+ next();
61
+ }
62
+ catch (error) {
63
+ console.error("Database connection error", error.message);
64
+ next(new app_error_1.default(error.message, 503));
65
+ }
66
+ });
67
+ exports.checkDatabaseConnection = checkDatabaseConnection;
68
+ //# sourceMappingURL=prisma.helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.helpers.js","sourceRoot":"","sources":["../../../../src/utils/features/prisma.helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gGAAuE;AACvE,4FAAmE;AAEnE,IAAI,cAAc,GAAQ,IAAI,CAAC;AAExB,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;IACzC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,yBAAa,GAAG,OAAO,CAAC,GAAG,EAAE,mBAAmB,uCAAC,CAAC;YACvE,cAAc,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAXW,QAAA,gBAAgB,oBAW3B;AAEK,MAAM,uBAAuB,GAAG,CAAC,MAAW,EAAE,EAAE,CACrD,IAAA,qBAAU,EAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IACnE,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,IAAI,EAAE,CAAC;IACT,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,mBAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAC,CAAC;AATQ,QAAA,uBAAuB,2BAS/B"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Configuration types for field type mapping
3
+ */
4
+ interface FieldConfig {
5
+ dateFields: string[];
6
+ booleanFields: string[];
7
+ numericFields: string[];
8
+ }
9
+ /**
10
+ * Type for the structured filter object returned by the parser
11
+ */
12
+ type ParsedFilter = {
13
+ [key: string]: any;
14
+ orderBy?: Record<string, 'asc' | 'desc'>;
15
+ OR?: Record<string, any>[];
16
+ };
17
+ /**
18
+ * Parses query parameters into a structured filter object compatible with Prisma queries.
19
+ * Supports various operators and data type conversions.
20
+ *
21
+ * @param query - Object containing query parameters
22
+ * @param fieldConfig - Optional configuration for field type mapping
23
+ * @returns Structured filter object for database queries
24
+ *
25
+ * @example
26
+ * // Basic usage
27
+ * parseQueryParamsWithModifiers({ name__contains: 'john' })
28
+ * // => { name: { contains: 'john', mode: 'sensitive' } }
29
+ *
30
+ * @example
31
+ * // Complex query
32
+ * parseQueryParamsWithModifiers({
33
+ * name__not__equals: 'john',
34
+ * age__gt: '25',
35
+ * tags__in: 'tag1,tag2',
36
+ * orderBy__createdAt: 'desc'
37
+ * })
38
+ */
39
+ export declare function parseQueryParamsWithModifiers(query: Record<string, any>, fieldConfig?: FieldConfig): ParsedFilter;
40
+ export {};
41
+ //# sourceMappingURL=api.features.helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.features.helpers.d.ts","sourceRoot":"","sources":["../../../../src/utils/helpers/api.features.helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,aAAa,EAAE,MAAM,EAAE,CAAA;CACxB;AAED;;GAEG;AACH,KAAK,YAAY,GAAG;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,CAAA;IACxC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAA;CAC3B,CAAA;AAWD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAE1B,WAAW,GAAE,WAAkC,GAC9C,YAAY,CAuHd"}