arkos 1.1.12-test → 1.1.13-test
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/app.js +1 -1
- package/dist/cjs/app.js.map +1 -1
- package/dist/cjs/modules/auth/auth.controller.js +53 -64
- package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
- package/dist/cjs/modules/auth/auth.router.js +46 -58
- package/dist/cjs/modules/auth/auth.router.js.map +1 -1
- package/dist/cjs/modules/auth/auth.service.js +75 -97
- package/dist/cjs/modules/auth/auth.service.js.map +1 -1
- package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +6 -7
- package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js.map +1 -1
- package/dist/cjs/modules/base/base.controller.js +30 -46
- package/dist/cjs/modules/base/base.controller.js.map +1 -1
- package/dist/cjs/modules/base/base.middlewares.js +17 -21
- package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
- package/dist/cjs/modules/base/base.router.js +6 -17
- package/dist/cjs/modules/base/base.router.js.map +1 -1
- package/dist/cjs/modules/base/base.service.js +128 -116
- package/dist/cjs/modules/base/base.service.js.map +1 -1
- package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +3 -5
- package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js.map +1 -1
- package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +36 -47
- package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +30 -40
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
- package/dist/cjs/modules/email/email.service.js +28 -39
- package/dist/cjs/modules/email/email.service.js.map +1 -1
- package/dist/cjs/modules/error-handler/error-handler.controller.js +6 -3
- package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
- package/dist/cjs/modules/error-handler/utils/catch-async.js +3 -12
- package/dist/cjs/modules/error-handler/utils/catch-async.js.map +1 -1
- package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +17 -31
- package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
- package/dist/cjs/modules/file-uploader/file-uploader.controller.js +18 -27
- package/dist/cjs/modules/file-uploader/file-uploader.controller.js.map +1 -1
- package/dist/cjs/modules/file-uploader/file-uploader.router.js +23 -34
- package/dist/cjs/modules/file-uploader/file-uploader.router.js.map +1 -1
- package/dist/cjs/modules/file-uploader/file-uploader.service.js +117 -131
- package/dist/cjs/modules/file-uploader/file-uploader.service.js.map +1 -1
- package/dist/cjs/modules/file-uploader/utils/helpers/file-uploader.helpers.js +15 -26
- package/dist/cjs/modules/file-uploader/utils/helpers/file-uploader.helpers.js.map +1 -1
- package/dist/cjs/server.js +1 -1
- package/dist/cjs/server.js.map +1 -1
- package/dist/cjs/utils/cli/build.js +9 -2
- package/dist/cjs/utils/cli/build.js.map +1 -1
- package/dist/cjs/utils/cli/dev.js +43 -48
- package/dist/cjs/utils/cli/dev.js.map +1 -1
- package/dist/cjs/utils/cli/start.js +35 -38
- package/dist/cjs/utils/cli/start.js.map +1 -1
- package/dist/cjs/utils/features/api.features.js +26 -33
- package/dist/cjs/utils/features/api.features.js.map +1 -1
- package/dist/cjs/utils/helpers/api.features.helpers.js +4 -6
- package/dist/cjs/utils/helpers/api.features.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/change-case.helpers.js +28 -36
- package/dist/cjs/utils/helpers/change-case.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/deepmerge.helper.js +4 -8
- package/dist/cjs/utils/helpers/deepmerge.helper.js.map +1 -1
- package/dist/cjs/utils/helpers/global.helpers.js +2 -13
- package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/models.helpers.js +65 -80
- package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/prisma.helpers.js +23 -34
- package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
- package/dist/cjs/utils/validate-dto.js +6 -17
- package/dist/cjs/utils/validate-dto.js.map +1 -1
- package/dist/cjs/utils/validate-schema.js +6 -17
- package/dist/cjs/utils/validate-schema.js.map +1 -1
- package/dist/es2020/app.js +1 -1
- package/dist/es2020/app.js.map +1 -1
- package/dist/es2020/modules/auth/auth.controller.js +53 -64
- package/dist/es2020/modules/auth/auth.controller.js.map +1 -1
- package/dist/es2020/modules/auth/auth.router.js +46 -58
- package/dist/es2020/modules/auth/auth.router.js.map +1 -1
- package/dist/es2020/modules/auth/auth.service.js +75 -97
- package/dist/es2020/modules/auth/auth.service.js.map +1 -1
- package/dist/es2020/modules/auth/utils/helpers/auth.controller.helpers.js +6 -7
- package/dist/es2020/modules/auth/utils/helpers/auth.controller.helpers.js.map +1 -1
- package/dist/es2020/modules/base/base.controller.js +30 -46
- package/dist/es2020/modules/base/base.controller.js.map +1 -1
- package/dist/es2020/modules/base/base.middlewares.js +17 -21
- package/dist/es2020/modules/base/base.middlewares.js.map +1 -1
- package/dist/es2020/modules/base/base.router.js +6 -17
- package/dist/es2020/modules/base/base.router.js.map +1 -1
- package/dist/es2020/modules/base/base.service.js +128 -116
- package/dist/es2020/modules/base/base.service.js.map +1 -1
- package/dist/es2020/modules/base/utils/helpers/base.controller.helpers.js +3 -5
- package/dist/es2020/modules/base/utils/helpers/base.controller.helpers.js.map +1 -1
- package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js +36 -47
- package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
- package/dist/es2020/modules/base/utils/helpers/base.service.helpers.js +30 -40
- package/dist/es2020/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
- package/dist/es2020/modules/email/email.service.js +28 -39
- package/dist/es2020/modules/email/email.service.js.map +1 -1
- package/dist/es2020/modules/error-handler/error-handler.controller.js +6 -3
- package/dist/es2020/modules/error-handler/error-handler.controller.js.map +1 -1
- package/dist/es2020/modules/error-handler/utils/catch-async.js +3 -12
- package/dist/es2020/modules/error-handler/utils/catch-async.js.map +1 -1
- package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js +17 -31
- package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
- package/dist/es2020/modules/file-uploader/file-uploader.controller.js +18 -27
- package/dist/es2020/modules/file-uploader/file-uploader.controller.js.map +1 -1
- package/dist/es2020/modules/file-uploader/file-uploader.router.js +23 -34
- package/dist/es2020/modules/file-uploader/file-uploader.router.js.map +1 -1
- package/dist/es2020/modules/file-uploader/file-uploader.service.js +117 -131
- package/dist/es2020/modules/file-uploader/file-uploader.service.js.map +1 -1
- package/dist/es2020/modules/file-uploader/utils/helpers/file-uploader.helpers.js +15 -26
- package/dist/es2020/modules/file-uploader/utils/helpers/file-uploader.helpers.js.map +1 -1
- package/dist/es2020/server.js +1 -1
- package/dist/es2020/server.js.map +1 -1
- package/dist/es2020/utils/cli/build.js +9 -2
- package/dist/es2020/utils/cli/build.js.map +1 -1
- package/dist/es2020/utils/cli/dev.js +43 -48
- package/dist/es2020/utils/cli/dev.js.map +1 -1
- package/dist/es2020/utils/cli/start.js +35 -38
- package/dist/es2020/utils/cli/start.js.map +1 -1
- package/dist/es2020/utils/features/api.features.js +26 -33
- package/dist/es2020/utils/features/api.features.js.map +1 -1
- package/dist/es2020/utils/helpers/api.features.helpers.js +4 -6
- package/dist/es2020/utils/helpers/api.features.helpers.js.map +1 -1
- package/dist/es2020/utils/helpers/change-case.helpers.js +28 -36
- package/dist/es2020/utils/helpers/change-case.helpers.js.map +1 -1
- package/dist/es2020/utils/helpers/deepmerge.helper.js +4 -8
- package/dist/es2020/utils/helpers/deepmerge.helper.js.map +1 -1
- package/dist/es2020/utils/helpers/global.helpers.js +2 -13
- package/dist/es2020/utils/helpers/global.helpers.js.map +1 -1
- package/dist/es2020/utils/helpers/models.helpers.js +65 -80
- package/dist/es2020/utils/helpers/models.helpers.js.map +1 -1
- package/dist/es2020/utils/helpers/prisma.helpers.js +23 -34
- package/dist/es2020/utils/helpers/prisma.helpers.js.map +1 -1
- package/dist/es2020/utils/validate-dto.js +6 -17
- package/dist/es2020/utils/validate-dto.js.map +1 -1
- package/dist/es2020/utils/validate-schema.js +6 -17
- package/dist/es2020/utils/validate-schema.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.controller.js","sourceRoot":"","sources":["../../../../src/modules/base/base.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport catchAsync from \"../error-handler/utils/catch-async\";\nimport APIFeatures from \"../../utils/features/api.features\";\nimport { BaseService } from \"./base.service\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { kebabCase } from \"../../utils/helpers/change-case.helpers\";\nimport { getExpressApp } from \"../../server\";\nimport { getModelModules, getModels } from \"../../utils/helpers/models.helpers\";\nimport { getAppRoutes } from \"./utils/helpers/base.controller.helpers\";\n\n/**\n * BaseController class providing standardized RESTful API endpoints for any prisma model\n * @class BaseController\n */\nexport class BaseController {\n /**\n * Service instance to handle business logic operations\n * @private\n */\n private baseService: BaseService;\n\n /**\n * Name of the model this controller handles\n * @private\n */\n private modelName: string;\n\n /**\n * Model-specific middlewares loaded from model modules\n * @private\n */\n private middlewares: any;\n\n /**\n * Creates a new BaseController instance\n * @param {string} modelName - The name of the model for which this controller will handle operations\n */\n constructor(modelName: string) {\n this.modelName = modelName;\n this.baseService = new BaseService(modelName);\n this.middlewares = getModelModules(modelName)?.middlewares || {};\n }\n\n /**\n * Creates a single resource\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n createOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.baseService.createOne(\n req.body,\n req.query?.prismaQueryOptions as string\n );\n\n if (this.middlewares.afterCreateOne) {\n req.responseData = { data };\n req.responseStatus = 201;\n return next();\n }\n\n res.status(201).json({ data });\n }\n );\n\n /**\n * Creates multiple resources in a single operation\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n createMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { data, total } = await this.baseService.createMany(req.body);\n\n if (this.middlewares.afterCreateMany) {\n req.responseData = { total, results: data.length, data };\n req.responseStatus = 201;\n return next();\n }\n\n res.status(201).json({ total, results: data.length, data });\n }\n );\n\n /**\n * Retrieves multiple resources with filtering, sorting, pagination, and field selection\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n findMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const features = new APIFeatures(\n req,\n this.modelName,\n this.baseService.relationFields?.singular.reduce(\n (acc: Record<string, boolean>, curr) => {\n acc[curr.name] = true;\n return acc;\n },\n {}\n )\n )\n .filter()\n .sort()\n .limitFields()\n .paginate();\n\n const { data, total } = await this.baseService.findMany(features.filters);\n\n if (this.middlewares.afterFindMany) {\n req.responseData = { total, results: data.length, data };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ total, results: data.length, data });\n }\n );\n\n /**\n * Retrieves a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n findOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.baseService.findOne(\n req.params,\n req.query?.prismaQueryOptions as string\n );\n\n if (this.middlewares.afterFindOne) {\n req.responseData = { data };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ data });\n }\n );\n\n /**\n * Updates a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n updateOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.baseService.updateOne(\n req.params,\n req.body,\n req.query?.prismaQueryOptions as string\n );\n\n if (this.middlewares.afterUpdateOne) {\n req.responseData = { data };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ data });\n }\n );\n\n /**\n * Updates multiple resources that match specified criteria\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n updateMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (!Object.keys(req.query).some((key) => key !== \"prismaQueryOptions\")) {\n return next(\n new AppError(\"Filter criteria not provided for bulk update.\", 400)\n );\n }\n\n req.query.filterMode = req.query?.filterMode || \"AND\";\n const features = new APIFeatures(req, this.modelName).filter().sort();\n delete features.filters.include;\n\n const { data, total } = await this.baseService.updateMany(\n features.filters,\n req.body\n );\n\n if (this.middlewares.afterUpdateMany) {\n req.responseData = { total, results: data.length, data };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ total, results: data.length, data });\n }\n );\n\n /**\n * Deletes a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n deleteOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n await this.baseService.deleteOne(req.params);\n\n if (this.middlewares.afterDeleteOne) {\n req.responseData = { id: String(req.params.id) };\n req.responseStatus = 204;\n return next();\n }\n\n res.status(204).send();\n }\n );\n\n /**\n * Deletes multiple resources that match specified criteria\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n deleteMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (!Object.keys(req.query).some((key) => key !== \"prismaQueryOptions\")) {\n return next(\n new AppError(\"Filter criteria not provided for bulk deletion.\", 400)\n );\n }\n\n req.query.filterMode = req.query?.filterMode || \"AND\";\n const features = new APIFeatures(req, this.modelName).filter().sort();\n delete features.filters.include;\n\n const { data, total } = await this.baseService.deleteMany(\n features.filters\n );\n\n if (this.middlewares.afterDeleteMany) {\n req.responseData = { total, results: data.length, data };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ total, results: data.length, data });\n }\n );\n}\n\n/**\n * Returns a list of all registered API routes in the Express application\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {void}\n */\nexport function getAvalibleRoutes(\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n) {\n const routes = getAppRoutes();\n\n res.json(routes);\n}\n\n/**\n * Returns a list of all available resource endpoints based on the application's models\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\nexport const getAvailableResources = catchAsync(async (req, res, next) => {\n const models = getModels();\n res.status(200).json({\n data: [...models.map((model) => kebabCase(model)), \"file-upload\"],\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"base.controller.js","sourceRoot":"","sources":["../../../../src/modules/base/base.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport catchAsync from \"../error-handler/utils/catch-async\";\nimport APIFeatures from \"../../utils/features/api.features\";\nimport { BaseService } from \"./base.service\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { kebabCase } from \"../../utils/helpers/change-case.helpers\";\nimport { getExpressApp } from \"../../server\";\nimport { getModelModules, getModels } from \"../../utils/helpers/models.helpers\";\nimport { getAppRoutes } from \"./utils/helpers/base.controller.helpers\";\n\n/**\n * BaseController class providing standardized RESTful API endpoints for any prisma model\n * @class BaseController\n */\nexport class BaseController {\n /**\n * Service instance to handle business logic operations\n * @private\n */\n private baseService: BaseService;\n\n /**\n * Name of the model this controller handles\n * @private\n */\n private modelName: string;\n\n /**\n * Model-specific middlewares loaded from model modules\n * @private\n */\n private middlewares: any;\n\n /**\n * Creates a new BaseController instance\n * @param {string} modelName - The name of the model for which this controller will handle operations\n */\n constructor(modelName: string) {\n this.modelName = modelName;\n this.baseService = new BaseService(modelName);\n this.middlewares = getModelModules(modelName)?.middlewares || {};\n }\n\n /**\n * Creates a single resource\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n createOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.baseService.createOne(\n req.body,\n req.query?.prismaQueryOptions as string\n );\n\n if (this.middlewares.afterCreateOne) {\n req.responseData = { data };\n req.responseStatus = 201;\n return next();\n }\n\n res.status(201).json({ data });\n }\n );\n\n /**\n * Creates multiple resources in a single operation\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n createMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { data, total } = await this.baseService.createMany(req.body);\n\n if (this.middlewares.afterCreateMany) {\n req.responseData = { total, results: data.length, data };\n req.responseStatus = 201;\n return next();\n }\n\n res.status(201).json({ total, results: data.length, data });\n }\n );\n\n /**\n * Retrieves multiple resources with filtering, sorting, pagination, and field selection\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n findMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const features = new APIFeatures(\n req,\n this.modelName,\n this.baseService.relationFields?.singular.reduce(\n (acc: Record<string, boolean>, curr) => {\n acc[curr.name] = true;\n return acc;\n },\n {}\n )\n )\n .filter()\n .sort()\n .limitFields()\n .paginate();\n\n const { data, total } = await this.baseService.findMany(features.filters);\n\n if (this.middlewares.afterFindMany) {\n req.responseData = { total, results: data.length, data };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ total, results: data.length, data });\n }\n );\n\n /**\n * Retrieves a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n findOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.baseService.findOne(\n req.params,\n req.query?.prismaQueryOptions as string\n );\n\n if (this.middlewares.afterFindOne) {\n req.responseData = { data };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ data });\n }\n );\n\n /**\n * Updates a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n updateOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.baseService.updateOne(\n req.params,\n req.body,\n req.query?.prismaQueryOptions as string\n );\n\n if (this.middlewares.afterUpdateOne) {\n req.responseData = { data };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ data });\n }\n );\n\n /**\n * Updates multiple resources that match specified criteria\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n updateMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (!Object.keys(req.query).some((key) => key !== \"prismaQueryOptions\")) {\n return next(\n new AppError(\"Filter criteria not provided for bulk update.\", 400)\n );\n }\n\n req.query.filterMode = req.query?.filterMode || \"AND\";\n const features = new APIFeatures(req, this.modelName).filter().sort();\n delete features.filters.include;\n\n const { data, total } = await this.baseService.updateMany(\n features.filters,\n req.body\n );\n\n if (this.middlewares.afterUpdateMany) {\n req.responseData = { total, results: data.length, data };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ total, results: data.length, data });\n }\n );\n\n /**\n * Deletes a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n deleteOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n await this.baseService.deleteOne(req.params);\n\n if (this.middlewares.afterDeleteOne) {\n req.responseData = { id: String(req.params.id) };\n req.responseStatus = 204;\n return next();\n }\n\n res.status(204).send();\n }\n );\n\n /**\n * Deletes multiple resources that match specified criteria\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n deleteMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (!Object.keys(req.query).some((key) => key !== \"prismaQueryOptions\")) {\n return next(\n new AppError(\"Filter criteria not provided for bulk deletion.\", 400)\n );\n }\n\n req.query.filterMode = req.query?.filterMode || \"AND\";\n const features = new APIFeatures(req, this.modelName).filter().sort();\n delete features.filters.include;\n\n const { data, total } = await this.baseService.deleteMany(\n features.filters\n );\n\n if (this.middlewares.afterDeleteMany) {\n req.responseData = { total, results: data.length, data };\n req.responseStatus = 200;\n return next();\n }\n\n res.status(200).json({ total, results: data.length, data });\n }\n );\n}\n\n/**\n * Returns a list of all registered API routes in the Express application\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {void}\n */\nexport function getAvalibleRoutes(\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n) {\n const routes = getAppRoutes();\n\n res.json(routes);\n}\n\n/**\n * Returns a list of all available resource endpoints based on the application's models\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\nexport const getAvailableResources = catchAsync(async (req, res, next) => {\n const models = getModels();\n res.status(200).json({\n data: [...models.map((model) => kebabCase(model)), \"file-upload\"],\n });\n});\n"]}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -39,11 +30,14 @@ function sendResponse(req, res, next) {
|
|
|
39
30
|
function addRouteMiddlwaresAndConfigs() { }
|
|
40
31
|
function addPrismaQueryOptionsToRequestQuery(prismaQueryOptions, action) {
|
|
41
32
|
return (req, res, next) => {
|
|
42
|
-
var _a, _b;
|
|
43
33
|
const configs = (0, server_1.getArkosConfig)();
|
|
44
|
-
req.query.prismaQueryOptions = JSON.stringify(
|
|
45
|
-
|
|
46
|
-
|
|
34
|
+
req.query.prismaQueryOptions = JSON.stringify({
|
|
35
|
+
...JSON.parse((configs?.request?.parameters?.allowDangerousPrismaQueryOptions &&
|
|
36
|
+
req.query.prismaQueryOptions) ||
|
|
37
|
+
"{}"),
|
|
38
|
+
...prismaQueryOptions?.queryOptions,
|
|
39
|
+
...(prismaQueryOptions?.[action] || {}),
|
|
40
|
+
});
|
|
47
41
|
next();
|
|
48
42
|
};
|
|
49
43
|
}
|
|
@@ -83,15 +77,17 @@ function handleRequestLogs(req, res, next) {
|
|
|
83
77
|
next();
|
|
84
78
|
}
|
|
85
79
|
function handleRequestBodyValidationAndTransformation(schemaOrDtoClass, classValidatorValidationOptions) {
|
|
86
|
-
return (0, error_handler_1.catchAsync)((req, res, next) =>
|
|
87
|
-
|
|
88
|
-
const validationConfigs = (_a = (0, server_1.getArkosConfig)()) === null || _a === void 0 ? void 0 : _a.validation;
|
|
80
|
+
return (0, error_handler_1.catchAsync)(async (req, res, next) => {
|
|
81
|
+
const validationConfigs = (0, server_1.getArkosConfig)()?.validation;
|
|
89
82
|
let body = req.body;
|
|
90
|
-
if (
|
|
91
|
-
req.body =
|
|
92
|
-
|
|
93
|
-
|
|
83
|
+
if (validationConfigs?.resolver === "class-validator" && schemaOrDtoClass)
|
|
84
|
+
req.body = await (0, validate_dto_1.default)(schemaOrDtoClass, body, (0, deepmerge_helper_1.default)({
|
|
85
|
+
whitelist: true,
|
|
86
|
+
...classValidatorValidationOptions,
|
|
87
|
+
}, validationConfigs?.validationOptions || {}));
|
|
88
|
+
else if (validationConfigs?.resolver === "zod" && schemaOrDtoClass)
|
|
89
|
+
req.body = await (0, validate_schema_1.default)(schemaOrDtoClass, body);
|
|
94
90
|
next();
|
|
95
|
-
})
|
|
91
|
+
});
|
|
96
92
|
}
|
|
97
93
|
//# sourceMappingURL=base.middlewares.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.middlewares.js","sourceRoot":"","sources":["../../../../src/modules/base/base.middlewares.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base.middlewares.js","sourceRoot":"","sources":["../../../../src/modules/base/base.middlewares.ts"],"names":[],"mappings":";;;;;AAmBA,4BAEC;AAED,oCASC;AAED,oEAAiD;AAUjD,kFAoBC;AAMD,8CAwDC;AAiBD,oGA2BC;AAlKD,yCAA8C;AAC9C,4FAA6D;AAC7D,+DAAyD;AAGzD,4EAAmD;AACnD,kFAAyD;AAKzD,SAAgB,QAAQ,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACtE,IAAI,EAAE,CAAC;AACT,CAAC;AAED,SAAgB,YAAY,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC1E,IAAK,GAAW,CAAC,YAAY,IAAK,GAAW,CAAC,cAAc;QAC1D,GAAG,CAAC,MAAM,CAAE,GAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAE,GAAW,CAAC,YAAY,CAAC,CAAC;SACrE,IAAK,GAAW,CAAC,cAAc,IAAI,CAAE,GAAW,CAAC,YAAY;QAChE,GAAG,CAAC,MAAM,CAAE,GAAW,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC;;QAE/C,GAAG;aACA,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CAAC,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAgB,4BAA4B,KAAI,CAAC;AAUjD,SAAgB,mCAAmC,CAGjD,kBAAyC,EACzC,MAAmC;IAEnC,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,IAAA,uBAAc,GAAE,CAAC;QAEjC,GAAG,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC;YAC5C,GAAG,IAAI,CAAC,KAAK,CACX,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,gCAAgC;gBAC5D,GAAG,CAAC,KAAK,CAAC,kBAA6B,CAAC;gBACzC,IAAI,CACP;YACD,GAAG,kBAAkB,EAAE,YAAY;YACnC,GAAG,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SACxC,CAAC,CAAC;QACH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAMD,SAAgB,iBAAiB,CAC/B,GAAY,EACZ,GAAa,EACb,IAAkB;IAGlB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAG7B,MAAM,YAAY,GAAG;QACnB,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU;KACpB,CAAC;IAGF,MAAM,cAAc,GAAG,CAAC,UAAkB,EAAE,EAAE;QAC5C,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG;YAAE,OAAO,UAAU,CAAC;QAC7D,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG;YAAE,OAAO,UAAU,CAAC;QAC7D,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG;YAAE,OAAO,UAAU,CAAC;QAC7D,IAAI,UAAU,IAAI,GAAG;YAAE,OAAO,UAAU,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAGxC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,MAAM,WAAW,GACf,YAAY,CAAC,GAAG,CAAC,MAAmC,CAAC,IAAI,SAAS,CAAC;QACrE,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEnD,OAAO,CAAC,IAAI,CACV,iCAAiC,IAAI,WAAW,WAAW,GACzD,GAAG,CAAC,MACN,WAAW,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,WAAW,GAC3D,GAAG,CAAC,UACN,mBAAmB,QAAQ,WAAW,CACvC,CAAC;IAKJ,CAAC,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC;AACT,CAAC;AAiBD,SAAgB,4CAA4C,CAC1D,gBAAqD,EACrD,+BAAkD;IAElD,OAAO,IAAA,0BAAU,EACf,KAAK,EAAE,GAAiB,EAAE,GAAkB,EAAE,IAAuB,EAAE,EAAE;QACvE,MAAM,iBAAiB,GAAG,IAAA,uBAAc,GAAE,EAAE,UAAU,CAAC;QACvD,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QAEpB,IAAI,iBAAiB,EAAE,QAAQ,KAAK,iBAAiB,IAAI,gBAAgB;YACvE,GAAG,CAAC,IAAI,GAAG,MAAM,IAAA,sBAAW,EAC1B,gBAAuC,EACvC,IAAI,EACJ,IAAA,0BAAS,EACP;gBACE,SAAS,EAAE,IAAI;gBACf,GAAG,+BAA+B;aACnC,EACD,iBAAiB,EAAE,iBAAiB,IAAI,EAAE,CAC3C,CACF,CAAC;aACC,IAAI,iBAAiB,EAAE,QAAQ,KAAK,KAAK,IAAI,gBAAgB;YAChE,GAAG,CAAC,IAAI,GAAG,MAAM,IAAA,yBAAc,EAAC,gBAAgC,EAAE,IAAI,CAAC,CAAC;QAE1E,IAAI,EAAE,CAAC;IACT,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import { NextFunction, Request, Response } from \"express\";\nimport {\n PrismaQueryOptions,\n ArkosNextFunction,\n ArkosRequest,\n ArkosRequestHandler,\n ArkosResponse,\n} from \"../../types\";\nimport { getArkosConfig } from \"../../server\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport { catchAsync } from \"../../exports/error-handler\";\nimport { getModelModules } from \"../../utils/helpers/models.helpers\";\nimport { kebabCase } from \"../../exports/utils\";\nimport validateDto from \"../../utils/validate-dto\";\nimport validateSchema from \"../../utils/validate-schema\";\nimport { ZodSchema } from \"zod\";\nimport { ClassConstructor } from \"class-transformer\";\nimport { ValidatorOptions } from \"class-validator\";\n\nexport function callNext(req: Request, res: Response, next: NextFunction) {\n next();\n}\n\nexport function sendResponse(req: Request, res: Response, next: NextFunction) {\n if ((req as any).responseData && (req as any).responseStatus)\n res.status((req as any).responseStatus).json((req as any).responseData);\n else if ((req as any).responseStatus && !(req as any).responseData)\n res.status((req as any).responseStatus).send();\n else\n res\n .status(500)\n .json({ message: \"No status or data attached to the response\" });\n}\n\nexport function addRouteMiddlwaresAndConfigs() {}\n\n/**\n * Middleware to add Prisma query options to the request's query parameters.\n *\n * @template T - The type of the Prisma model.\n * @param {PrismaQueryOptions<T>} prismaQueryOptions - The Prisma query options to attach.\n * @param {ControllerActions} action - The controller action to apply.\n * @returns A middleware function that attaches the query options to the request.\n */\nexport function addPrismaQueryOptionsToRequestQuery<\n T extends Record<string, any>\n>(\n prismaQueryOptions: PrismaQueryOptions<T>,\n action: keyof PrismaQueryOptions<T>\n) {\n return (req: Request, res: Response, next: NextFunction) => {\n const configs = getArkosConfig();\n\n req.query.prismaQueryOptions = JSON.stringify({\n ...JSON.parse(\n (configs?.request?.parameters?.allowDangerousPrismaQueryOptions &&\n (req.query.prismaQueryOptions as string)) ||\n \"{}\"\n ),\n ...prismaQueryOptions?.queryOptions,\n ...(prismaQueryOptions?.[action] || {}),\n });\n next();\n };\n}\n\n/**\n * Logs request events with colored text such as errors, requests responses.\n *\n */\nexport function handleRequestLogs(\n req: Request,\n res: Response,\n next: NextFunction\n) {\n // if (process.env.NODE_ENV === \"production\") return next()\n const startTime = Date.now(); // Capture the start time\n\n // Define colors for each HTTP method\n const methodColors = {\n GET: \"\\x1b[36m\", // Cyan\n POST: \"\\x1b[32m\", // Green\n PUT: \"\\x1b[33m\", // Orange/Yellow\n PATCH: \"\\x1b[33m\", // Orange/Yellow\n DELETE: \"\\x1b[31m\", // Red\n HEAD: \"\\x1b[34m\", // Blue\n OPTIONS: \"\\x1b[34m\", // Blue\n };\n\n // Function to determine status code color\n const getStatusColor = (statusCode: number) => {\n if (statusCode >= 200 && statusCode < 300) return \"\\x1b[32m\"; // Green\n if (statusCode >= 300 && statusCode < 400) return \"\\x1b[33m\"; // Orange/Yellow\n if (statusCode >= 400 && statusCode < 500) return \"\\x1b[33m\"; // Red\n if (statusCode >= 500) return \"\\x1b[31m\"; // White on Red background\n return \"\\x1b[0m\"; // Default (no color)\n };\n\n res.on(\"finish\", () => {\n const duration = Date.now() - startTime; // Calculate the time taken to process the request\n\n // Get the current date and time\n const now = new Date();\n const dayNames = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n const dayName = dayNames[now.getDay()];\n const dayOfMonth = now.getDate();\n const time = now.toTimeString().split(\" \")[0]; // Format as HH:MM:SS\n\n const methodColor =\n methodColors[req.method as keyof typeof methodColors] || \"\\x1b[0m\"; // Default to no color\n const statusColor = getStatusColor(res.statusCode); // Get the color for the status code\n\n console.info(\n `[\\x1b[36mINFO\\x1b[0m] \\x1b[90m${time}\\x1b[0m ${methodColor}${\n req.method\n }\\x1b[0m ${decodeURIComponent(req.originalUrl)} ${statusColor}${\n res.statusCode\n }\\x1b[0m \\x1b[35m${duration}ms\\x1b[0m`\n );\n // Keep the commented-out example as it is\n // console.info(\n // `[\\x1b[36mINFO\\x1b[0m] ${dayName} ${dayOfMonth} ${time} ${methodColor}${req.method}\\x1b[0m ${req.originalUrl} \\x1b[32m${res.statusCode}\\x1b[0m \\x1b[35m${duration}ms\\x1b[0m`\n // );\n });\n\n next(); // Pass control to the next middleware or route handler\n}\n\ntype AuthActions = \"signup\" | \"login\" | \"updateMe\" | \"updatePassword\";\ntype DefaultActions = \"create\" | \"update\";\n\n// Overload for 'auth'\nexport function handleRequestBodyValidationAndTransformation<T extends object>(\n schemaOrDtoClass?: ClassConstructor<T>,\n classValidatorValidationOptions?: ValidatorOptions\n): ArkosRequestHandler;\n\n// Overload for other models\nexport function handleRequestBodyValidationAndTransformation<T extends object>(\n schemaOrDtoClass?: ZodSchema<T>\n): ArkosRequestHandler;\n\n// Implementation\nexport function handleRequestBodyValidationAndTransformation<T extends object>(\n schemaOrDtoClass?: ZodSchema<T> | ClassConstructor<T>,\n classValidatorValidationOptions?: ValidatorOptions\n) {\n return catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const validationConfigs = getArkosConfig()?.validation;\n let body = req.body;\n\n if (validationConfigs?.resolver === \"class-validator\" && schemaOrDtoClass)\n req.body = await validateDto(\n schemaOrDtoClass as ClassConstructor<T>,\n body,\n deepmerge(\n {\n whitelist: true,\n ...classValidatorValidationOptions,\n },\n validationConfigs?.validationOptions || {}\n )\n );\n else if (validationConfigs?.resolver === \"zod\" && schemaOrDtoClass)\n req.body = await validateSchema(schemaOrDtoClass as ZodSchema<T>, body);\n\n next();\n }\n );\n}\n"]}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -19,17 +10,15 @@ const base_controller_1 = require("./base.controller");
|
|
|
19
10
|
const models_helpers_1 = require("../../utils/helpers/models.helpers");
|
|
20
11
|
const auth_service_1 = __importDefault(require("../auth/auth.service"));
|
|
21
12
|
const base_router_helpers_1 = require("./utils/helpers/base.router.helpers");
|
|
22
|
-
function getPrismaModelsRouter(arkosConfigs) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return router;
|
|
27
|
-
});
|
|
13
|
+
async function getPrismaModelsRouter(arkosConfigs) {
|
|
14
|
+
const router = (0, express_1.Router)();
|
|
15
|
+
await Promise.all((0, base_router_helpers_1.setupRouters)((0, models_helpers_1.getModels)(), router, arkosConfigs));
|
|
16
|
+
return router;
|
|
28
17
|
}
|
|
29
18
|
function getAvailableResourcesAndRoutesRouter() {
|
|
30
19
|
const router = (0, express_1.Router)();
|
|
31
|
-
router.get("/available-routes", auth_service_1.default
|
|
32
|
-
router.get("/available-resources", auth_service_1.default
|
|
20
|
+
router.get("/available-routes", auth_service_1.default?.authenticate, base_controller_1.getAvalibleRoutes);
|
|
21
|
+
router.get("/available-resources", auth_service_1.default?.authenticate, base_controller_1.getAvailableResources);
|
|
33
22
|
return router;
|
|
34
23
|
}
|
|
35
24
|
//# sourceMappingURL=base.router.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.router.js","sourceRoot":"","sources":["../../../../src/modules/base/base.router.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base.router.js","sourceRoot":"","sources":["../../../../src/modules/base/base.router.ts"],"names":[],"mappings":";;;;;AAQA,sDAMC;AAED,oFAkBC;AAlCD,qCAAiC;AACjC,uDAA6E;AAC7E,uEAA+D;AAE/D,wEAA+C;AAE/C,6EAAmE;AAE5D,KAAK,UAAU,qBAAqB,CAAC,YAAyB;IACnE,MAAM,MAAM,GAAW,IAAA,gBAAM,GAAE,CAAC;IAEhC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAA,kCAAY,EAAC,IAAA,0BAAS,GAAE,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAEnE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,oCAAoC;IAClD,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CACR,mBAAmB,EACnB,sBAAW,EAAE,YAAY,EAEzB,mCAAiB,CAClB,CAAC;IAEF,MAAM,CAAC,GAAG,CACR,sBAAsB,EACtB,sBAAW,EAAE,YAAY,EAEzB,uCAAqB,CACtB,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { Router } from \"express\";\nimport { getAvalibleRoutes, getAvailableResources } from \"./base.controller\";\nimport { getModels } from \"../../utils/helpers/models.helpers\";\n\nimport authService from \"../auth/auth.service\";\nimport { ArkosConfig } from \"../../types/arkos-config\";\nimport { setupRouters } from \"./utils/helpers/base.router.helpers\";\n\nexport async function getPrismaModelsRouter(arkosConfigs: ArkosConfig) {\n const router: Router = Router();\n\n await Promise.all(setupRouters(getModels(), router, arkosConfigs));\n\n return router;\n}\n\nexport function getAvailableResourcesAndRoutesRouter(): Router {\n const router = Router();\n //\n router.get(\n \"/available-routes\",\n authService?.authenticate,\n // authService?.handleAccessControl({}, \"view\", \"\"),\n getAvalibleRoutes\n );\n\n router.get(\n \"/available-resources\",\n authService?.authenticate,\n // authService?.handleAccessControl({}, \"view\", \"\"),\n getAvailableResources\n );\n\n return router;\n}\n"]}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -24,140 +15,161 @@ const prisma_helpers_1 = require("../../utils/helpers/prisma.helpers");
|
|
|
24
15
|
const auth_service_1 = __importDefault(require("../auth/auth.service"));
|
|
25
16
|
class BaseService {
|
|
26
17
|
constructor(modelName) {
|
|
27
|
-
var _a, _b, _c, _d;
|
|
28
18
|
this.modelName = (0, change_case_helpers_1.camelCase)(modelName);
|
|
29
19
|
this.relationFields = (0, models_helpers_1.getPrismaModelRelations)((0, change_case_helpers_1.pascalCase)(modelName));
|
|
30
|
-
this.singularRelationFieldToInclude =
|
|
20
|
+
this.singularRelationFieldToInclude = this.relationFields?.singular?.reduce((acc, curr) => {
|
|
31
21
|
acc[curr.name] = true;
|
|
32
22
|
return acc;
|
|
33
23
|
}, {});
|
|
34
|
-
this.listRelationFieldToInclude =
|
|
24
|
+
this.listRelationFieldToInclude = this.relationFields?.list?.reduce((acc, curr) => {
|
|
35
25
|
acc[curr.name] = true;
|
|
36
26
|
return acc;
|
|
37
27
|
}, {});
|
|
38
28
|
}
|
|
39
|
-
createOne(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
29
|
+
async createOne(body, queryOptions = "{}") {
|
|
30
|
+
if ((0, change_case_helpers_1.kebabCase)(this.modelName) === "user" && body.password) {
|
|
31
|
+
body.password = await auth_service_1.default.hashPassword(body.password);
|
|
32
|
+
}
|
|
33
|
+
const prisma = (0, prisma_helpers_1.getPrismaInstance)();
|
|
34
|
+
const bodyWithRelationFieldsHandled = (0, base_service_helpers_1.handleRelationFieldsInBody)(body, {
|
|
35
|
+
...this.relationFields,
|
|
36
|
+
}, ["delete", "disconnect", "update"]);
|
|
37
|
+
return await prisma[this.modelName].create((0, deepmerge_helper_1.default)({
|
|
38
|
+
data: bodyWithRelationFieldsHandled,
|
|
39
|
+
...(JSON.parse(queryOptions || "{}").hasOwnProperty("select")
|
|
47
40
|
? {
|
|
48
|
-
select:
|
|
41
|
+
select: {
|
|
42
|
+
...this.singularRelationFieldToInclude,
|
|
43
|
+
...this.listRelationFieldToInclude,
|
|
44
|
+
},
|
|
49
45
|
}
|
|
50
46
|
: {
|
|
51
|
-
include:
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
createMany(body) {
|
|
56
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
-
const prisma = (0, prisma_helpers_1.getPrismaInstance)();
|
|
58
|
-
if (!Array.isArray(body) || body.length === 0) {
|
|
59
|
-
throw new app_error_1.default("Invalid or empty data array provided for creation.", 400);
|
|
60
|
-
}
|
|
61
|
-
const [data, total] = yield Promise.all([
|
|
62
|
-
prisma[this.modelName].createMany({
|
|
63
|
-
data: body,
|
|
47
|
+
include: {
|
|
48
|
+
...this.singularRelationFieldToInclude,
|
|
49
|
+
...this.listRelationFieldToInclude,
|
|
50
|
+
},
|
|
64
51
|
}),
|
|
65
|
-
|
|
66
|
-
]);
|
|
67
|
-
return { total, data };
|
|
68
|
-
});
|
|
52
|
+
}, JSON.parse(queryOptions || "{}")));
|
|
69
53
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
where: filters.where,
|
|
83
|
-
}),
|
|
84
|
-
]);
|
|
85
|
-
return { total, data };
|
|
86
|
-
});
|
|
54
|
+
async createMany(body) {
|
|
55
|
+
const prisma = (0, prisma_helpers_1.getPrismaInstance)();
|
|
56
|
+
if (!Array.isArray(body) || body.length === 0) {
|
|
57
|
+
throw new app_error_1.default("Invalid or empty data array provided for creation.", 400);
|
|
58
|
+
}
|
|
59
|
+
const [data, total] = await Promise.all([
|
|
60
|
+
prisma[this.modelName].createMany({
|
|
61
|
+
data: body,
|
|
62
|
+
}),
|
|
63
|
+
prisma[this.modelName].count(),
|
|
64
|
+
]);
|
|
65
|
+
return { total, data };
|
|
87
66
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
67
|
+
async findMany(filters) {
|
|
68
|
+
const prisma = (0, prisma_helpers_1.getPrismaInstance)();
|
|
69
|
+
const [data, total] = await Promise.all([
|
|
70
|
+
prisma[this.modelName].findMany("select" in filters
|
|
71
|
+
? (0, deepmerge_helper_1.default)({ ...filters }, {
|
|
72
|
+
select: this.singularRelationFieldToInclude,
|
|
73
|
+
})
|
|
74
|
+
: (0, deepmerge_helper_1.default)({ ...filters }, {
|
|
75
|
+
include: this.singularRelationFieldToInclude,
|
|
76
|
+
})),
|
|
77
|
+
prisma[this.modelName].count({
|
|
78
|
+
where: filters.where,
|
|
79
|
+
}),
|
|
80
|
+
]);
|
|
81
|
+
return { total, data };
|
|
82
|
+
}
|
|
83
|
+
async findOne(filters, queryOptions = "{}") {
|
|
84
|
+
const prisma = (0, prisma_helpers_1.getPrismaInstance)();
|
|
85
|
+
const data = await prisma[this.modelName].findFirst((0, deepmerge_helper_1.default)({
|
|
86
|
+
where: { ...filters },
|
|
87
|
+
...(JSON.parse(queryOptions || "{}").hasOwnProperty("select")
|
|
92
88
|
? {
|
|
93
|
-
select:
|
|
89
|
+
select: {
|
|
90
|
+
...this.singularRelationFieldToInclude,
|
|
91
|
+
...this.listRelationFieldToInclude,
|
|
92
|
+
},
|
|
94
93
|
}
|
|
95
94
|
: {
|
|
96
|
-
include:
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
95
|
+
include: {
|
|
96
|
+
...this.singularRelationFieldToInclude,
|
|
97
|
+
...this.listRelationFieldToInclude,
|
|
98
|
+
},
|
|
99
|
+
}),
|
|
100
|
+
}, JSON.parse(queryOptions || "{}")));
|
|
101
|
+
if (!data && Object.keys(filters).length === 1 && "id" in filters)
|
|
102
|
+
throw new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${filters.id} not found`, 404, {}, "not_found");
|
|
103
|
+
else if (!data)
|
|
104
|
+
throw new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} not found`, 404, {}, "not_found");
|
|
105
|
+
return data;
|
|
104
106
|
}
|
|
105
|
-
updateOne(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
107
|
+
async updateOne(filters, body, queryOptions = "{}") {
|
|
108
|
+
const prisma = (0, prisma_helpers_1.getPrismaInstance)();
|
|
109
|
+
if ((0, change_case_helpers_1.kebabCase)(this.modelName) === "user" && body.password) {
|
|
110
|
+
body.password = await auth_service_1.default.hashPassword(body.password);
|
|
111
|
+
}
|
|
112
|
+
const bodyWithRelationFieldsHandled = (0, base_service_helpers_1.handleRelationFieldsInBody)(body, {
|
|
113
|
+
...this.relationFields,
|
|
114
|
+
});
|
|
115
|
+
const data = await prisma[this.modelName].update((0, deepmerge_helper_1.default)({
|
|
116
|
+
where: { ...filters },
|
|
117
|
+
data: bodyWithRelationFieldsHandled,
|
|
118
|
+
...(JSON.parse(queryOptions || "{}").hasOwnProperty("select")
|
|
113
119
|
? {
|
|
114
|
-
select:
|
|
120
|
+
select: {
|
|
121
|
+
...this.singularRelationFieldToInclude,
|
|
122
|
+
...this.listRelationFieldToInclude,
|
|
123
|
+
},
|
|
115
124
|
}
|
|
116
125
|
: {
|
|
117
|
-
include:
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
126
|
+
include: {
|
|
127
|
+
...this.singularRelationFieldToInclude,
|
|
128
|
+
...this.listRelationFieldToInclude,
|
|
129
|
+
},
|
|
130
|
+
}),
|
|
131
|
+
}, JSON.parse(queryOptions || "{}")));
|
|
132
|
+
if (!data && Object.keys(filters).length === 1 && "id" in filters)
|
|
133
|
+
throw new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${filters.id} not found`, 404, {}, "not_found");
|
|
134
|
+
else if (!data)
|
|
135
|
+
throw new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} not found`, 404, {}, "not_found");
|
|
136
|
+
return data;
|
|
125
137
|
}
|
|
126
|
-
updateMany(filters, body) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
throw new app_error_1.default(`${(0, pluralize_1.default)((0, change_case_helpers_1.pascalCase)(String(this.modelName)))} not found`, 404);
|
|
135
|
-
}
|
|
136
|
-
const total = yield prisma[this.modelName].count();
|
|
137
|
-
return { total, data };
|
|
138
|
+
async updateMany(filters, body) {
|
|
139
|
+
const prisma = (0, prisma_helpers_1.getPrismaInstance)();
|
|
140
|
+
if (!filters || typeof filters !== "object") {
|
|
141
|
+
throw new app_error_1.default("Invalid filters provided for udpate many.", 400);
|
|
142
|
+
}
|
|
143
|
+
const data = await prisma[this.modelName].updateMany({
|
|
144
|
+
...filters,
|
|
145
|
+
data: body,
|
|
138
146
|
});
|
|
147
|
+
if (!data || data.count === 0) {
|
|
148
|
+
throw new app_error_1.default(`${(0, pluralize_1.default)((0, change_case_helpers_1.pascalCase)(String(this.modelName)))} not found`, 404);
|
|
149
|
+
}
|
|
150
|
+
const total = await prisma[this.modelName].count();
|
|
151
|
+
return { total, data };
|
|
139
152
|
}
|
|
140
|
-
deleteOne(params) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
153
|
+
async deleteOne(params) {
|
|
154
|
+
const prisma = (0, prisma_helpers_1.getPrismaInstance)();
|
|
155
|
+
return await prisma[this.modelName].delete({
|
|
156
|
+
where: {
|
|
157
|
+
...params,
|
|
158
|
+
id: String(params.id),
|
|
159
|
+
},
|
|
146
160
|
});
|
|
147
161
|
}
|
|
148
|
-
deleteMany(filters) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
return { total, data };
|
|
160
|
-
});
|
|
162
|
+
async deleteMany(filters) {
|
|
163
|
+
const prisma = (0, prisma_helpers_1.getPrismaInstance)();
|
|
164
|
+
if (!filters || typeof filters !== "object") {
|
|
165
|
+
throw new app_error_1.default("Invalid filters provided for deletion.", 400);
|
|
166
|
+
}
|
|
167
|
+
const data = await prisma[this.modelName].deleteMany(filters);
|
|
168
|
+
if (!data || data.count === 0) {
|
|
169
|
+
throw new app_error_1.default(`No records found to delete`, 404);
|
|
170
|
+
}
|
|
171
|
+
const total = await prisma[this.modelName].count();
|
|
172
|
+
return { total, data };
|
|
161
173
|
}
|
|
162
174
|
}
|
|
163
175
|
exports.BaseService = BaseService;
|