arkos 0.0.2 → 0.0.3

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/app.d.ts +10 -0
  2. package/dist/app.d.ts.map +1 -0
  3. package/dist/app.js +114 -0
  4. package/dist/app.js.map +1 -0
  5. package/dist/index.d.ts +21 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +51 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/modules/auth/auth.controller.d.ts +23 -0
  10. package/dist/modules/auth/auth.controller.d.ts.map +1 -0
  11. package/dist/modules/auth/auth.controller.js +317 -0
  12. package/dist/modules/auth/auth.controller.js.map +1 -0
  13. package/dist/modules/auth/auth.router.d.ts +4 -0
  14. package/dist/modules/auth/auth.router.d.ts.map +1 -0
  15. package/dist/modules/auth/auth.router.js +64 -0
  16. package/dist/modules/auth/auth.router.js.map +1 -0
  17. package/dist/modules/auth/auth.service.d.ts +16 -0
  18. package/dist/modules/auth/auth.service.d.ts.map +1 -0
  19. package/dist/modules/auth/auth.service.js +122 -0
  20. package/dist/modules/auth/auth.service.js.map +1 -0
  21. package/dist/modules/base/base.controller.d.ts +17 -0
  22. package/dist/modules/base/base.controller.d.ts.map +1 -0
  23. package/dist/modules/base/base.controller.js +296 -0
  24. package/dist/modules/base/base.controller.js.map +1 -0
  25. package/dist/modules/base/base.middlewares.d.ts +20 -0
  26. package/dist/modules/base/base.middlewares.d.ts.map +1 -0
  27. package/dist/modules/base/base.middlewares.js +86 -0
  28. package/dist/modules/base/base.middlewares.js.map +1 -0
  29. package/dist/modules/base/base.router.d.ts +4 -0
  30. package/dist/modules/base/base.router.d.ts.map +1 -0
  31. package/dist/modules/base/base.router.js +74 -0
  32. package/dist/modules/base/base.router.js.map +1 -0
  33. package/dist/modules/base/base.service.d.ts +32 -0
  34. package/dist/modules/base/base.service.d.ts.map +1 -0
  35. package/dist/modules/base/base.service.js +149 -0
  36. package/dist/modules/base/base.service.js.map +1 -0
  37. package/dist/modules/base/utils/base.helpers.d.ts +29 -0
  38. package/dist/modules/base/utils/base.helpers.d.ts.map +1 -0
  39. package/dist/modules/base/utils/base.helpers.js +106 -0
  40. package/dist/modules/base/utils/base.helpers.js.map +1 -0
  41. package/dist/modules/email/email.service.d.ts +22 -0
  42. package/dist/modules/email/email.service.d.ts.map +1 -0
  43. package/dist/modules/email/email.service.js +45 -0
  44. package/dist/modules/email/email.service.js.map +1 -0
  45. package/dist/modules/email/utils/email.helpers.d.ts +9 -0
  46. package/dist/modules/email/utils/email.helpers.d.ts.map +1 -0
  47. package/dist/modules/email/utils/email.helpers.js +25 -0
  48. package/dist/modules/email/utils/email.helpers.js.map +1 -0
  49. package/dist/modules/error-handler/error-handler.controller.d.ts +4 -0
  50. package/dist/modules/error-handler/error-handler.controller.d.ts.map +1 -0
  51. package/dist/modules/error-handler/error-handler.controller.js +182 -0
  52. package/dist/modules/error-handler/error-handler.controller.js.map +1 -0
  53. package/dist/modules/error-handler/utils/app-error.d.ts +11 -0
  54. package/dist/modules/error-handler/utils/app-error.d.ts.map +1 -0
  55. package/dist/modules/error-handler/utils/app-error.js +23 -0
  56. package/dist/modules/error-handler/utils/app-error.js.map +1 -0
  57. package/dist/modules/error-handler/utils/catch-async.d.ts +4 -0
  58. package/dist/modules/error-handler/utils/catch-async.d.ts.map +1 -0
  59. package/dist/modules/error-handler/utils/catch-async.js +9 -0
  60. package/dist/modules/error-handler/utils/catch-async.js.map +1 -0
  61. package/dist/modules/error-handler/utils/error-handler.helpers.d.ts +43 -0
  62. package/dist/modules/error-handler/utils/error-handler.helpers.d.ts.map +1 -0
  63. package/dist/modules/error-handler/utils/error-handler.helpers.js +209 -0
  64. package/dist/modules/error-handler/utils/error-handler.helpers.js.map +1 -0
  65. package/dist/modules/file-uploader/file-uploader.service.d.ts +20 -0
  66. package/dist/modules/file-uploader/file-uploader.service.d.ts.map +1 -0
  67. package/dist/modules/file-uploader/file-uploader.service.js +114 -0
  68. package/dist/modules/file-uploader/file-uploader.service.js.map +1 -0
  69. package/dist/paths.d.ts +2 -0
  70. package/dist/paths.d.ts.map +1 -0
  71. package/dist/paths.js +9 -0
  72. package/dist/paths.js.map +1 -0
  73. package/dist/utils/features/api.features.d.ts +20 -0
  74. package/dist/utils/features/api.features.d.ts.map +1 -0
  75. package/dist/utils/features/api.features.js +177 -0
  76. package/dist/utils/features/api.features.js.map +1 -0
  77. package/dist/utils/features/prisma.helpers.d.ts +3 -0
  78. package/dist/utils/features/prisma.helpers.d.ts.map +1 -0
  79. package/dist/utils/features/prisma.helpers.js +20 -0
  80. package/dist/utils/features/prisma.helpers.js.map +1 -0
  81. package/dist/utils/helpers/api.features.helpers.d.ts +41 -0
  82. package/dist/utils/helpers/api.features.helpers.d.ts.map +1 -0
  83. package/dist/utils/helpers/api.features.helpers.js +161 -0
  84. package/dist/utils/helpers/api.features.helpers.js.map +1 -0
  85. package/dist/utils/helpers/models.helpers.d.ts +21 -0
  86. package/dist/utils/helpers/models.helpers.d.ts.map +1 -0
  87. package/dist/utils/helpers/models.helpers.js +195 -0
  88. package/dist/utils/helpers/models.helpers.js.map +1 -0
  89. package/dist/utils/helpers/text.helpers.d.ts +2 -0
  90. package/dist/utils/helpers/text.helpers.d.ts.map +1 -0
  91. package/dist/utils/helpers/text.helpers.js +12 -0
  92. package/dist/utils/helpers/text.helpers.js.map +1 -0
  93. package/dist/utils/permissions/index.d.ts +3 -0
  94. package/dist/utils/permissions/index.d.ts.map +1 -0
  95. package/dist/utils/permissions/index.js +17 -0
  96. package/dist/utils/permissions/index.js.map +1 -0
  97. package/dist/utils/scripts/export-prisma-types.d.ts +2 -0
  98. package/dist/utils/scripts/export-prisma-types.d.ts.map +1 -0
  99. package/dist/utils/scripts/export-prisma-types.js +152 -0
  100. package/dist/utils/scripts/export-prisma-types.js.map +1 -0
  101. package/dist/utils/scripts/generate-zod-schemas.d.ts +2 -0
  102. package/dist/utils/scripts/generate-zod-schemas.d.ts.map +1 -0
  103. package/dist/utils/scripts/generate-zod-schemas.js +121 -0
  104. package/dist/utils/scripts/generate-zod-schemas.js.map +1 -0
  105. package/dist/utils/scripts/prisma-db-push.d.ts +2 -0
  106. package/dist/utils/scripts/prisma-db-push.d.ts.map +1 -0
  107. package/dist/utils/scripts/prisma-db-push.js +24 -0
  108. package/dist/utils/scripts/prisma-db-push.js.map +1 -0
  109. package/dist/utils/validate-dto.d.ts +3 -0
  110. package/dist/utils/validate-dto.d.ts.map +1 -0
  111. package/dist/utils/validate-dto.js +17 -0
  112. package/dist/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"}
package/dist/paths.js ADDED
@@ -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,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,CAAA;AAMjC,KAAK,SAAS,GAAG,MAAM,CAAA;AAEvB,MAAM,CAAC,OAAO,OAAO,WAAW;IAC9B,GAAG,EAAE,OAAO,CAAA;IACZ,YAAY,EAAE,GAAG,CAAA;IACjB,yBAAyB,EAAE,GAAG,CAAA;IAC9B,OAAO,EAAE,GAAG,CAAK;IACjB,SAAS,EAAE,SAAS,CAAA;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,cAAc,WAab;gBAGC,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,SAAS,EACpB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAW1C,MAAM;IA+DN,MAAM;IAUN,IAAI;IAcJ,WAAW;IA2EX,QAAQ;IAaF,IAAI;CAIX"}
@@ -0,0 +1,177 @@
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 prisma = app_1.initConfigs.prisma;
43
+ const queryObj = { ...this.searchParams };
44
+ this.excludedFields.forEach((el) => delete queryObj[el]);
45
+ let queryStr = JSON.stringify(queryObj);
46
+ queryStr = queryStr.replace(/\b(gte|gt|lte|lt)\b/g, (match) => `${match}`);
47
+ const whereObj = { ...this.req.params, ...queryObj };
48
+ const whereLogicalOperatorFilters = Object.keys(whereObj).map((key) => ({
49
+ [key]: whereObj[key],
50
+ }));
51
+ let whereOptions = whereLogicalOperatorFilters.length > 0
52
+ ? {
53
+ [this.req.query?.filterMode ?? 'OR']: whereLogicalOperatorFilters,
54
+ }
55
+ : {};
56
+ if (!!this.searchParams.search) {
57
+ Object.keys(prisma[this.modelName].fields).forEach((key) => {
58
+ const field = prisma[this.modelName].fields[key];
59
+ if (field.typeName === 'String' &&
60
+ key !== 'id' &&
61
+ !field.isList &&
62
+ !field.name.includes('Id') &&
63
+ !field.name.includes('ID')) {
64
+ searchableFields.push({
65
+ [`${key}`]: {
66
+ contains: this.searchParams.search,
67
+ mode: 'insensitive',
68
+ },
69
+ });
70
+ }
71
+ });
72
+ whereOptions = (0, deepmerge_1.default)(whereOptions, {
73
+ OR: searchableFields,
74
+ });
75
+ }
76
+ const parsedQueryOptions = typeof this.req.query?.prismaQueryOptions === 'string'
77
+ ? JSON.parse(this.req.query?.prismaQueryOptions)
78
+ : {};
79
+ this.filters = (0, deepmerge_1.default)({
80
+ where: whereOptions,
81
+ }, parsedQueryOptions, this.filters);
82
+ return this;
83
+ }
84
+ search() {
85
+ if (this.searchParams?.search) {
86
+ this.filters = (0, deepmerge_1.default)(this.filters, {
87
+ where: {
88
+ OR: [],
89
+ },
90
+ });
91
+ }
92
+ }
93
+ sort() {
94
+ if (this.searchParams.sort) {
95
+ const sortBy = this.searchParams?.sort
96
+ ?.split(',')
97
+ ?.map((field) => ({
98
+ [field.startsWith('-') ? field.substring(1) : field]: field.startsWith('-') ? 'desc' : 'asc',
99
+ }));
100
+ this.filters = (0, deepmerge_1.default)(this.filters, { orderBy: sortBy });
101
+ }
102
+ return this;
103
+ }
104
+ limitFields() {
105
+ if (this.searchParams?.fields &&
106
+ !this.searchParams?.addFields &&
107
+ !this.searchParams?.removeFields) {
108
+ const fieldsToSelect = this.searchParams.fields
109
+ .split(',')
110
+ .filter((field) => !field.startsWith('+') && !field.startsWith('-'));
111
+ this.filters = {
112
+ ...this.filters,
113
+ select: fieldsToSelect.reduce((acc, field) => {
114
+ acc[field] = true;
115
+ return acc;
116
+ }, {}),
117
+ };
118
+ this.filters.select = { ...this.filters.select, ...this.filters.include };
119
+ delete this.filters.include;
120
+ }
121
+ else if (this.searchParams?.fields &&
122
+ (this.searchParams?.addFields || this.searchParams?.removeFields))
123
+ throw new app_error_1.default('Cannot use fields in the same query with addFields or removeFields.', 400);
124
+ if (this.searchParams?.addFields && !this.searchParams?.fields) {
125
+ const fieldsToAdd = this.searchParams.addFields
126
+ .split(',')
127
+ .filter((field) => field.startsWith('+'));
128
+ this.filters = {
129
+ ...this.filters,
130
+ select: {
131
+ ...this.filters.include,
132
+ ...fieldsToAdd.reduce((acc, field) => {
133
+ acc[field.replace('+', '')] = true;
134
+ return acc;
135
+ }, {}),
136
+ },
137
+ };
138
+ }
139
+ else if (this.searchParams?.fields && this.searchParams?.addFields)
140
+ throw new app_error_1.default('Cannot use addFields in the same query with fields.', 400);
141
+ if (this.searchParams?.removeFields && !this.searchParams?.fields) {
142
+ const fieldsToRemove = this.searchParams.removeFields
143
+ .split(',')
144
+ .filter((field) => field.startsWith('-'));
145
+ this.filters = {
146
+ ...this.filters,
147
+ select: {
148
+ ...this.filters.include,
149
+ ...fieldsToRemove.reduce((acc, field) => {
150
+ acc[field.replace('-', '')] = false;
151
+ return acc;
152
+ }, {}),
153
+ },
154
+ };
155
+ }
156
+ else if (this.searchParams?.removeFields && this.searchParams?.addFields)
157
+ throw new app_error_1.default('Cannot use removeFields in the same query with fields.', 400);
158
+ return this;
159
+ }
160
+ paginate() {
161
+ const page = parseInt(this.searchParams.page, 10) || 1;
162
+ const limit = parseInt(this.searchParams.limit, 10) || 30;
163
+ const skip = (page - 1) * limit;
164
+ this.filters = {
165
+ ...this.filters,
166
+ skip,
167
+ take: limit,
168
+ };
169
+ return this;
170
+ }
171
+ async exec() {
172
+ const prisma = app_1.initConfigs.prisma;
173
+ return await prisma[this.modelName].findMany(this.filters);
174
+ }
175
+ }
176
+ exports.default = APIFeatures;
177
+ //# 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":"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"}
@@ -0,0 +1,3 @@
1
+ import { Request, Response, NextFunction } from "express";
2
+ export declare const checkDatabaseConnection: (prisma: any) => (req: Request, res: Response, next: NextFunction) => void;
3
+ //# 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;AAI1D,eAAO,MAAM,uBAAuB,GAAI,QAAQ,GAAG,8DAS/C,CAAC"}
@@ -0,0 +1,20 @@
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.checkDatabaseConnection = void 0;
7
+ const catch_async_1 = __importDefault(require("../../modules/error-handler/utils/catch-async"));
8
+ const app_error_1 = __importDefault(require("../../modules/error-handler/utils/app-error"));
9
+ const checkDatabaseConnection = (prisma) => (0, catch_async_1.default)(async (req, res, next) => {
10
+ try {
11
+ await prisma.$connect();
12
+ next();
13
+ }
14
+ catch (error) {
15
+ console.error("Database connection error", error.message);
16
+ next(new app_error_1.default(error.message, 503));
17
+ }
18
+ });
19
+ exports.checkDatabaseConnection = checkDatabaseConnection;
20
+ //# 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;AAE5D,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"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseQueryParamsWithModifiers = parseQueryParamsWithModifiers;
4
+ /**
5
+ * Default configuration for field types
6
+ */
7
+ const DEFAULT_FIELD_CONFIG = {
8
+ dateFields: ['createdAt', 'updatedAt', 'deletedAt', 'date'],
9
+ booleanFields: ['isActive', 'isDeleted', 'isPublished', 'isArchived'],
10
+ numericFields: ['age', 'price', 'quantity', 'amount', 'rating'],
11
+ };
12
+ /**
13
+ * Parses query parameters into a structured filter object compatible with Prisma queries.
14
+ * Supports various operators and data type conversions.
15
+ *
16
+ * @param query - Object containing query parameters
17
+ * @param fieldConfig - Optional configuration for field type mapping
18
+ * @returns Structured filter object for database queries
19
+ *
20
+ * @example
21
+ * // Basic usage
22
+ * parseQueryParamsWithModifiers({ name__contains: 'john' })
23
+ * // => { name: { contains: 'john', mode: 'sensitive' } }
24
+ *
25
+ * @example
26
+ * // Complex query
27
+ * parseQueryParamsWithModifiers({
28
+ * name__not__equals: 'john',
29
+ * age__gt: '25',
30
+ * tags__in: 'tag1,tag2',
31
+ * orderBy__createdAt: 'desc'
32
+ * })
33
+ */
34
+ function parseQueryParamsWithModifiers(query,
35
+ // excludedFields: string[],
36
+ fieldConfig = DEFAULT_FIELD_CONFIG) {
37
+ const queryObj = JSON.parse(JSON.stringify(query));
38
+ // excludedFields.forEach((el) => delete queryObj[el])
39
+ return Object.entries(JSON.parse(JSON.stringify(query))).reduce((acc, [key, value]) => {
40
+ if (!value)
41
+ return acc;
42
+ // Convert value to string if it's not already
43
+ const stringValue = Array.isArray(value)
44
+ ? value[0]?.toString()
45
+ : value.toString();
46
+ const parts = key.split('__');
47
+ if (parts.length < 2) {
48
+ acc[key] = value;
49
+ return acc;
50
+ }
51
+ const fieldName = parts[0];
52
+ // Handle ordering
53
+ if (fieldName === 'orderBy' && parts.length === 2) {
54
+ if (!acc.orderBy)
55
+ acc.orderBy = {};
56
+ acc.orderBy[parts[1]] = stringValue;
57
+ return acc;
58
+ }
59
+ // Handle simple equals case
60
+ if (parts.length === 1) {
61
+ acc[fieldName] = {
62
+ equals: convertValue(stringValue, fieldName, 'equals', fieldConfig),
63
+ };
64
+ return acc;
65
+ }
66
+ let currentLevel = acc;
67
+ let currentKey = fieldName;
68
+ // Build nested structure
69
+ for (let i = 1; i < parts.length - 1; i++) {
70
+ if (!currentLevel[currentKey]) {
71
+ currentLevel[currentKey] = {};
72
+ }
73
+ currentLevel = currentLevel[currentKey];
74
+ currentKey = parts[i];
75
+ }
76
+ const lastOperator = parts[parts.length - 1];
77
+ // Handle special operators
78
+ switch (lastOperator) {
79
+ case 'icontains':
80
+ currentLevel[currentKey] = {
81
+ contains: stringValue,
82
+ mode: 'insensitive',
83
+ };
84
+ break;
85
+ case 'contains':
86
+ currentLevel[currentKey] = {
87
+ contains: stringValue,
88
+ mode: 'sensitive',
89
+ };
90
+ break;
91
+ case 'in':
92
+ case 'notIn':
93
+ currentLevel[currentKey] = {
94
+ [lastOperator]: stringValue
95
+ .split(',')
96
+ .map((v) => convertValue(v.trim(), fieldName, lastOperator, fieldConfig)),
97
+ };
98
+ break;
99
+ case 'or':
100
+ const values = stringValue.split(',');
101
+ if (!acc.OR)
102
+ acc.OR = [];
103
+ acc.OR.push(...values.map((val) => ({
104
+ [fieldName]: {
105
+ equals: convertValue(val.trim(), fieldName, 'equals', fieldConfig),
106
+ },
107
+ })));
108
+ break;
109
+ case 'isNull':
110
+ currentLevel[currentKey] = {
111
+ equals: stringValue.toLowerCase() === 'true' ? null : undefined,
112
+ };
113
+ break;
114
+ case 'isEmpty':
115
+ currentLevel[currentKey] = {
116
+ equals: stringValue.toLowerCase() === 'true' ? '' : undefined,
117
+ };
118
+ break;
119
+ default:
120
+ currentLevel[currentKey] = {
121
+ [lastOperator]: convertValue(stringValue, fieldName, lastOperator, fieldConfig),
122
+ };
123
+ }
124
+ return acc;
125
+ }, {});
126
+ }
127
+ /**
128
+ * Converts string values to appropriate types based on field configuration
129
+ */
130
+ function convertValue(value, fieldName, operator, config) {
131
+ // Handle date fields
132
+ if (config.dateFields.includes(fieldName)) {
133
+ return new Date(value);
134
+ }
135
+ // Handle boolean fields
136
+ if (config.booleanFields.includes(fieldName)) {
137
+ return value.toLowerCase() === 'true';
138
+ }
139
+ // Handle numeric fields
140
+ if (config.numericFields.includes(fieldName)) {
141
+ return Number(value);
142
+ }
143
+ return value;
144
+ }
145
+ // Example usage:
146
+ /*
147
+ const query = {
148
+ name__not__equals: 'uanela',
149
+ email__contains: 'example.com',
150
+ description__icontains: 'test',
151
+ age__gt: '25',
152
+ status: 'active',
153
+ tags__in: 'tag1,tag2,tag3',
154
+ createdAt__gt: '2024-01-01',
155
+ isActive: 'true',
156
+ orderBy__createdAt: 'desc'
157
+ };
158
+
159
+ const result = parseQueryParamsWithModifiers(query);
160
+ */
161
+ //# sourceMappingURL=api.features.helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.features.helpers.js","sourceRoot":"","sources":["../../../src/utils/helpers/api.features.helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare function importPrismaModelModules(modelName: string): Promise<{
2
+ middlewares?: any;
3
+ authConfigs?: any;
4
+ prismaQueryOptions?: any;
5
+ }>;
6
+ export declare function getAppWidthEjectedMiddlewares(app: any): Promise<any>;
7
+ declare const models: string[];
8
+ export type RelationFields = {
9
+ singular: {
10
+ name: string;
11
+ type: string;
12
+ }[];
13
+ list: {
14
+ name: string;
15
+ type: string;
16
+ }[];
17
+ };
18
+ declare const prismaModelRelationFields: Record<string, RelationFields>;
19
+ export declare function getPrismaModelRelations(modelName: string): RelationFields | undefined;
20
+ export { models, prismaModelRelationFields };
21
+ //# sourceMappingURL=models.helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.helpers.d.ts","sourceRoot":"","sources":["../../../src/utils/helpers/models.helpers.ts"],"names":[],"mappings":"AAMA,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,MAAM;kBAuB9C,GAAG;kBACH,GAAG;yBACI,GAAG;GA4C3B;AAED,wBAAsB,6BAA6B,CAAC,GAAG,EAAE,GAAG,gBAoB3D;AAED,QAAA,MAAM,MAAM,EAAE,MAAM,EAAO,CAAC;AAkB5B,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACxC,CAAC;AAKF,QAAA,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAM,CAAC;AAsFrE,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,8BAIxD;AAED,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC"}