arkos 1.1.10-beta → 1.1.12-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.
Files changed (94) hide show
  1. package/dist/cjs/app.js +1 -1
  2. package/dist/cjs/app.js.map +1 -1
  3. package/dist/cjs/exports/auth/index.js +1 -1
  4. package/dist/cjs/exports/auth/index.js.map +1 -1
  5. package/dist/cjs/exports/utils/index.js.map +1 -1
  6. package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
  7. package/dist/cjs/modules/auth/auth.router.js +20 -20
  8. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  9. package/dist/cjs/modules/auth/auth.service.js +22 -21
  10. package/dist/cjs/modules/auth/auth.service.js.map +1 -1
  11. package/dist/cjs/modules/base/base.middlewares.js +5 -12
  12. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  13. package/dist/cjs/modules/base/base.router.js +1 -1
  14. package/dist/cjs/modules/base/base.router.js.map +1 -1
  15. package/dist/cjs/modules/base/base.service.js +9 -7
  16. package/dist/cjs/modules/base/base.service.js.map +1 -1
  17. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +64 -22
  18. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  19. package/dist/cjs/modules/file-uploader/file-uploader.router.js +3 -3
  20. package/dist/cjs/modules/file-uploader/file-uploader.router.js.map +1 -1
  21. package/dist/cjs/types/arkos-config.js.map +1 -1
  22. package/dist/cjs/types/auth.js.map +1 -1
  23. package/dist/cjs/types/index.js.map +1 -1
  24. package/dist/cjs/utils/cli/build.js +93 -47
  25. package/dist/cjs/utils/cli/build.js.map +1 -1
  26. package/dist/cjs/utils/cli/dev.js +5 -3
  27. package/dist/cjs/utils/cli/dev.js.map +1 -1
  28. package/dist/cjs/utils/cli/index.js +4 -6
  29. package/dist/cjs/utils/cli/index.js.map +1 -1
  30. package/dist/cjs/utils/cli/start.js +5 -3
  31. package/dist/cjs/utils/cli/start.js.map +1 -1
  32. package/dist/cjs/utils/dotenv.helpers.js +43 -0
  33. package/dist/cjs/utils/dotenv.helpers.js.map +1 -0
  34. package/dist/cjs/utils/helpers/fs.helpers.js +1 -1
  35. package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
  36. package/dist/cjs/utils/helpers/models.helpers.js +4 -0
  37. package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
  38. package/dist/cjs/utils/validate-dto.js +1 -1
  39. package/dist/cjs/utils/validate-dto.js.map +1 -1
  40. package/dist/cjs/utils/validate-schema.js +1 -1
  41. package/dist/cjs/utils/validate-schema.js.map +1 -1
  42. package/dist/es2020/app.js +1 -1
  43. package/dist/es2020/app.js.map +1 -1
  44. package/dist/es2020/exports/auth/index.js +1 -2
  45. package/dist/es2020/exports/auth/index.js.map +1 -1
  46. package/dist/es2020/exports/utils/index.js.map +1 -1
  47. package/dist/es2020/modules/auth/auth.controller.js.map +1 -1
  48. package/dist/es2020/modules/auth/auth.router.js +20 -20
  49. package/dist/es2020/modules/auth/auth.router.js.map +1 -1
  50. package/dist/es2020/modules/auth/auth.service.js +22 -21
  51. package/dist/es2020/modules/auth/auth.service.js.map +1 -1
  52. package/dist/es2020/modules/base/base.middlewares.js +5 -12
  53. package/dist/es2020/modules/base/base.middlewares.js.map +1 -1
  54. package/dist/es2020/modules/base/base.router.js +1 -1
  55. package/dist/es2020/modules/base/base.router.js.map +1 -1
  56. package/dist/es2020/modules/base/base.service.js +9 -7
  57. package/dist/es2020/modules/base/base.service.js.map +1 -1
  58. package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js +31 -22
  59. package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  60. package/dist/es2020/modules/file-uploader/file-uploader.router.js +3 -3
  61. package/dist/es2020/modules/file-uploader/file-uploader.router.js.map +1 -1
  62. package/dist/es2020/types/arkos-config.js.map +1 -1
  63. package/dist/es2020/types/auth.js.map +1 -1
  64. package/dist/es2020/types/index.js.map +1 -1
  65. package/dist/es2020/utils/cli/build.js +94 -48
  66. package/dist/es2020/utils/cli/build.js.map +1 -1
  67. package/dist/es2020/utils/cli/dev.js +5 -3
  68. package/dist/es2020/utils/cli/dev.js.map +1 -1
  69. package/dist/es2020/utils/cli/index.js +4 -6
  70. package/dist/es2020/utils/cli/index.js.map +1 -1
  71. package/dist/es2020/utils/cli/start.js +5 -3
  72. package/dist/es2020/utils/cli/start.js.map +1 -1
  73. package/dist/es2020/utils/dotenv.helpers.js +37 -0
  74. package/dist/es2020/utils/dotenv.helpers.js.map +1 -0
  75. package/dist/es2020/utils/helpers/fs.helpers.js +1 -1
  76. package/dist/es2020/utils/helpers/fs.helpers.js.map +1 -1
  77. package/dist/es2020/utils/helpers/models.helpers.js +4 -0
  78. package/dist/es2020/utils/helpers/models.helpers.js.map +1 -1
  79. package/dist/es2020/utils/validate-dto.js +1 -1
  80. package/dist/es2020/utils/validate-dto.js.map +1 -1
  81. package/dist/es2020/utils/validate-schema.js +1 -1
  82. package/dist/es2020/utils/validate-schema.js.map +1 -1
  83. package/dist/types/exports/auth/index.d.ts +2 -3
  84. package/dist/types/modules/auth/auth.service.d.ts +3 -3
  85. package/dist/types/modules/base/base.middlewares.d.ts +5 -5
  86. package/dist/types/modules/base/base.router.d.ts +1 -1
  87. package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +2 -1
  88. package/dist/types/types/auth.d.ts +10 -9
  89. package/dist/types/types/index.d.ts +2 -2
  90. package/dist/types/utils/cli/build.d.ts +0 -1
  91. package/dist/types/utils/dotenv.helpers.d.ts +1 -0
  92. package/dist/types/utils/helpers/models.helpers.d.ts +21 -2
  93. package/dist/types/utils/validate-dto.d.ts +1 -1
  94. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"base.middlewares.js","sourceRoot":"","sources":["../../../../src/modules/base/base.middlewares.ts"],"names":[],"mappings":"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","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\";\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(\n resourceName: \"auth\",\n action: AuthActions\n): ArkosRequestHandler;\n\n// Overload for other models\nexport function handleRequestBodyValidationAndTransformation(\n resourceName: Exclude<string, \"auth\">,\n action: DefaultActions\n): ArkosRequestHandler;\n\n// Implementation\nexport function handleRequestBodyValidationAndTransformation(\n resourceName: string,\n action: string\n) {\n return catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const modelModules = getModelModules(kebabCase(resourceName));\n const validationConfigs = getArkosConfig()?.validation;\n let body = req.body;\n\n if (\n validationConfigs?.resolver === \"class-validator\" &&\n modelModules.dtos[action]\n )\n req.body = await validateDto(\n modelModules.dtos[action],\n body,\n deepmerge(\n {\n whitelist: true,\n },\n validationConfigs?.validationOptions || {}\n )\n );\n else if (\n validationConfigs?.resolver === \"zod\" &&\n modelModules.schemas[action]\n )\n req.body = await validateSchema(modelModules.schemas[action], body);\n\n next();\n }\n );\n}\n"]}
1
+ {"version":3,"file":"base.middlewares.js","sourceRoot":"","sources":["../../../../src/modules/base/base.middlewares.ts"],"names":[],"mappings":"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","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"]}
@@ -22,7 +22,7 @@ const base_router_helpers_1 = require("./utils/helpers/base.router.helpers");
22
22
  function getPrismaModelsRouter(arkosConfigs) {
23
23
  return __awaiter(this, void 0, void 0, function* () {
24
24
  const router = (0, express_1.Router)();
25
- yield Promise.all((0, base_router_helpers_1.setupRouters)((0, models_helpers_1.getModels)(), router));
25
+ yield Promise.all((0, base_router_helpers_1.setupRouters)((0, models_helpers_1.getModels)(), router, arkosConfigs));
26
26
  return router;
27
27
  });
28
28
  }
@@ -1 +1 @@
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;AAEnE,SAAsB,qBAAqB,CAAC,YAA0B;;QACpE,MAAM,MAAM,GAAW,IAAA,gBAAM,GAAE,CAAC;QAEhC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAA,kCAAY,EAAC,IAAA,0BAAS,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAErD,OAAO,MAAM,CAAC;IAChB,CAAC;CAAA;AAED,SAAgB,oCAAoC;IAClD,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CACR,mBAAmB,EACnB,sBAAW,aAAX,sBAAW,uBAAX,sBAAW,CAAE,YAAY,EAEzB,mCAAiB,CAClB,CAAC;IAEF,MAAM,CAAC,GAAG,CACR,sBAAsB,EACtB,sBAAW,aAAX,sBAAW,uBAAX,sBAAW,CAAE,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));\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?.handleActionAccessControl({}, \"view\", \"\"),\n getAvalibleRoutes\n );\n\n router.get(\n \"/available-resources\",\n authService?.authenticate,\n // authService?.handleActionAccessControl({}, \"view\", \"\"),\n getAvailableResources\n );\n\n return router;\n}\n"]}
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;AAEnE,SAAsB,qBAAqB,CAAC,YAAyB;;QACnE,MAAM,MAAM,GAAW,IAAA,gBAAM,GAAE,CAAC;QAEhC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAA,kCAAY,EAAC,IAAA,0BAAS,GAAE,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QAEnE,OAAO,MAAM,CAAC;IAChB,CAAC;CAAA;AAED,SAAgB,oCAAoC;IAClD,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CACR,mBAAmB,EACnB,sBAAW,aAAX,sBAAW,uBAAX,sBAAW,CAAE,YAAY,EAEzB,mCAAiB,CAClB,CAAC;IAEF,MAAM,CAAC,GAAG,CACR,sBAAsB,EACtB,sBAAW,aAAX,sBAAW,uBAAX,sBAAW,CAAE,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"]}
@@ -88,16 +88,17 @@ class BaseService {
88
88
  findOne(filters_1) {
89
89
  return __awaiter(this, arguments, void 0, function* (filters, queryOptions = "{}") {
90
90
  const prisma = (0, prisma_helpers_1.getPrismaInstance)();
91
- const data = yield prisma[this.modelName].findUnique((0, deepmerge_helper_1.default)(Object.assign({ where: Object.assign({}, filters) }, (JSON.parse(queryOptions || "{}").hasOwnProperty("select")
91
+ const data = yield prisma[this.modelName].findFirst((0, deepmerge_helper_1.default)(Object.assign({ where: Object.assign({}, filters) }, (JSON.parse(queryOptions || "{}").hasOwnProperty("select")
92
92
  ? {
93
93
  select: Object.assign(Object.assign({}, this.singularRelationFieldToInclude), this.listRelationFieldToInclude),
94
94
  }
95
95
  : {
96
96
  include: Object.assign(Object.assign({}, this.singularRelationFieldToInclude), this.listRelationFieldToInclude),
97
97
  })), JSON.parse(queryOptions || "{}")));
98
- if (!data) {
99
- throw new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${filters.id} not found`, 404);
100
- }
98
+ if (!data && Object.keys(filters).length === 1 && "id" in filters)
99
+ throw new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${filters.id} not found`, 404, {}, "not_found");
100
+ else if (!data)
101
+ throw new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} not found`, 404, {}, "not_found");
101
102
  return data;
102
103
  });
103
104
  }
@@ -115,9 +116,10 @@ class BaseService {
115
116
  : {
116
117
  include: Object.assign(Object.assign({}, this.singularRelationFieldToInclude), this.listRelationFieldToInclude),
117
118
  })), JSON.parse(queryOptions || "{}")));
118
- if (!data) {
119
- throw new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${filters.id} not found`, 404);
120
- }
119
+ if (!data && Object.keys(filters).length === 1 && "id" in filters)
120
+ throw new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${filters.id} not found`, 404, {}, "not_found");
121
+ else if (!data)
122
+ throw new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} not found`, 404, {}, "not_found");
121
123
  return data;
122
124
  });
123
125
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base.service.js","sourceRoot":"","sources":["../../../../src/modules/base/base.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n camelCase,\n kebabCase,\n pascalCase,\n} from \"../../utils/helpers/change-case.helpers\";\nimport {\n getModels,\n getPrismaModelRelations,\n RelationFields,\n} from \"../../utils/helpers/models.helpers\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport pluralize from \"pluralize\";\nimport { handleRelationFieldsInBody } from \"./utils/helpers/base.service.helpers\";\nimport { getPrismaInstance } from \"../../utils/helpers/prisma.helpers\";\nimport authService from \"../auth/auth.service\";\n\n/**\n * Base service class for handling CRUD operations on a specific model.\n * This class provides standard implementation of data operations that can be extended\n * by model-specific service classes.\n *\n * @class BaseService\n */\nexport class BaseService {\n /**\n * The camelCase name of the model\n * @public\n */\n modelName: string;\n\n /**\n * Object containing singular and list relation fields for the model\n * @public\n */\n relationFields: RelationFields;\n\n /**\n * Map of singular relation fields to include in queries\n * @public\n */\n singularRelationFieldToInclude: Record<string, boolean>;\n\n /**\n * Map of list relation fields to include in queries\n * @public\n */\n listRelationFieldToInclude: Record<string, boolean>;\n\n /**\n * Instance of the Prisma client\n * @public\n */\n prisma: any;\n\n /**\n * Creates an instance of BaseService.\n * @param {string} modelName - The name of the model to perform operations on.\n */\n constructor(modelName: string) {\n this.modelName = camelCase(modelName);\n this.relationFields = getPrismaModelRelations(pascalCase(modelName))!;\n this.singularRelationFieldToInclude = this.relationFields?.singular?.reduce(\n (acc: Record<string, boolean>, curr) => {\n acc[curr.name] = true;\n return acc;\n },\n {}\n );\n this.listRelationFieldToInclude = this.relationFields?.list?.reduce(\n (acc: Record<string, boolean>, curr) => {\n acc[curr.name] = true;\n return acc;\n },\n {}\n );\n }\n /**\n * Creates a single record in the database.\n *\n * @param {Record<string, any>} body - The data to create the record with.\n * @param {string} [queryOptions] - Additional query options to modify the Prisma query.\n * @returns {Promise<any>} The created record.\n */\n async createOne(\n body: Record<string, any>,\n queryOptions: string = \"{}\"\n ): Promise<any> {\n if (kebabCase(this.modelName) === \"user\" && body.password) {\n body.password = await authService.hashPassword(body.password);\n }\n\n const prisma = getPrismaInstance();\n\n const bodyWithRelationFieldsHandled = handleRelationFieldsInBody(\n body,\n {\n ...this.relationFields,\n },\n [\"delete\", \"disconnect\", \"update\"]\n );\n\n return await prisma[this.modelName].create(\n deepmerge(\n {\n data: bodyWithRelationFieldsHandled,\n ...(JSON.parse(queryOptions || \"{}\").hasOwnProperty(\"select\")\n ? {\n select: {\n ...this.singularRelationFieldToInclude,\n ...this.listRelationFieldToInclude,\n },\n }\n : {\n include: {\n ...this.singularRelationFieldToInclude,\n ...this.listRelationFieldToInclude,\n },\n }),\n },\n JSON.parse(queryOptions || \"{}\")\n )\n );\n }\n\n /**\n * Creates multiple records in the database.\n *\n * @param {Record<string, any>[]} body - An array of data to create records with.\n * @returns {Promise<{ total: number; data: any }>} The result containing the total count and the created data.\n * @throws {AppError} Throws an error if the data array is invalid or empty.\n */\n async createMany(\n body: Record<string, any>[]\n ): Promise<{ total: number; data: any }> {\n const prisma = getPrismaInstance();\n\n if (!Array.isArray(body) || body.length === 0) {\n throw new AppError(\n \"Invalid or empty data array provided for creation.\",\n 400\n );\n }\n\n const [data, total] = await Promise.all([\n prisma[this.modelName].createMany({\n data: body,\n }),\n prisma[this.modelName].count(),\n ]);\n\n return { total, data };\n }\n\n /**\n * Finds multiple records based on provided filters.\n *\n * @param {Record<string, any>} filters - The filters to apply to the query.\n * @returns {Promise<{ total: number; data: any }>} The result containing the total count and the found data.\n */\n async findMany(\n filters: Record<string, any>\n ): Promise<{ total: number; data: any }> {\n const prisma = getPrismaInstance();\n\n const [data, total] = await Promise.all([\n prisma[this.modelName].findMany(\n \"select\" in filters\n ? deepmerge(\n { ...filters },\n {\n select: this.singularRelationFieldToInclude,\n }\n )\n : deepmerge(\n { ...filters },\n {\n include: this.singularRelationFieldToInclude,\n }\n )\n ),\n prisma[this.modelName].count({\n where: filters.where,\n }),\n ]);\n\n return { total, data };\n }\n\n /**\n * Finds a single record by its parameters.\n *\n * @param {Record<string, any>} filters - The parameters to find the record by.\n * @param {string} [queryOptions] - Additional query options to modify the Prisma query.\n * @returns {Promise<any>} The found record.\n * @throws {AppError} Throws an error if the record is not found.\n */\n async findOne(\n filters: Record<string, any>,\n queryOptions: string = \"{}\"\n ): Promise<any> {\n const prisma = getPrismaInstance();\n\n const data = await prisma[this.modelName].findUnique(\n deepmerge(\n {\n where: { ...filters },\n ...(JSON.parse(queryOptions || \"{}\").hasOwnProperty(\"select\")\n ? {\n select: {\n ...this.singularRelationFieldToInclude,\n ...this.listRelationFieldToInclude,\n },\n }\n : {\n include: {\n ...this.singularRelationFieldToInclude,\n ...this.listRelationFieldToInclude,\n },\n }),\n },\n JSON.parse(queryOptions || \"{}\")\n )\n );\n\n if (!data) {\n throw new AppError(\n `${pascalCase(String(this.modelName))} with ID ${filters.id} not found`,\n 404\n );\n }\n\n return data;\n }\n\n /**\n * Updates a single record by its ID.\n *\n * @param {Record<string, any>} filters - The parameters to find the record by.\n * @param {Record<string, any>} body - The data to update the record with.\n * @param {string} [queryOptions] - Additional query options to modify the Prisma query.\n * @returns {Promise<any>} The updated record.\n * @throws {AppError} Throws an error if the record is not found.\n */\n async updateOne(\n filters: Record<string, any>,\n body: Record<string, any>,\n queryOptions: string = \"{}\"\n ): Promise<any> {\n const prisma = getPrismaInstance();\n\n if (kebabCase(this.modelName) === \"user\" && body.password) {\n body.password = await authService.hashPassword(body.password);\n }\n\n const bodyWithRelationFieldsHandled = handleRelationFieldsInBody(body, {\n ...this.relationFields,\n });\n\n const data = await prisma[this.modelName].update(\n deepmerge(\n {\n where: { ...filters },\n data: bodyWithRelationFieldsHandled,\n ...(JSON.parse(queryOptions || \"{}\").hasOwnProperty(\"select\")\n ? {\n select: {\n ...this.singularRelationFieldToInclude,\n ...this.listRelationFieldToInclude,\n },\n }\n : {\n include: {\n ...this.singularRelationFieldToInclude,\n ...this.listRelationFieldToInclude,\n },\n }),\n },\n JSON.parse(queryOptions || \"{}\")\n )\n );\n\n if (!data) {\n throw new AppError(\n `${pascalCase(String(this.modelName))} with ID ${filters.id} not found`,\n 404\n );\n }\n\n return data;\n }\n\n /**\n * Updates multiple records based on the provided filter and data.\n *\n * @param {Record<string, any>} filters - The filters to identify records to update.\n * @param {Record<string, any>} body - The data to update the records with.\n * @returns {Promise<{ total: number; data: any }>} The result containing the total count and the updated data.\n * @throws {AppError} Throws an error if no records match the filters.\n */\n async updateMany(\n filters: Record<string, any>,\n body: Record<string, any>\n ): Promise<{ total: number; data: any }> {\n const prisma = getPrismaInstance();\n\n if (!filters || typeof filters !== \"object\") {\n throw new AppError(\"Invalid filters provided for udpate many.\", 400);\n }\n\n const data = await prisma[this.modelName].updateMany({\n ...filters,\n data: body,\n });\n\n if (!data || data.count === 0) {\n throw new AppError(\n `${pluralize(pascalCase(String(this.modelName)))} not found`,\n 404\n );\n }\n\n const total = await prisma[this.modelName].count();\n return { total, data };\n }\n\n /**\n * Deletes a single record by its ID.\n *\n * @param {Record<string, any>} params - The parameters to find the record by.\n * @returns {Promise<any>} The deleted record.\n */\n async deleteOne(params: Record<string, any>): Promise<any> {\n const prisma = getPrismaInstance();\n\n return await prisma[this.modelName].delete({\n where: {\n ...params,\n id: String(params.id),\n },\n });\n }\n\n /**\n * Deletes multiple records based on the provided filter.\n *\n * @param {Record<string, any>} filter - The filter to identify records to delete.\n * @returns {Promise<{ total: number; data: any }>} The result containing the total count and the deleted data.\n * @throws {AppError} Throws an error if no records match the filter.\n */\n async deleteMany(\n filters: Record<string, any>\n ): Promise<{ total: number; data: any }> {\n const prisma = getPrismaInstance();\n\n if (!filters || typeof filters !== \"object\") {\n throw new AppError(\"Invalid filters provided for deletion.\", 400);\n }\n\n const data = await prisma[this.modelName].deleteMany(filters);\n\n if (!data || data.count === 0) {\n throw new AppError(`No records found to delete`, 404);\n }\n\n const total = await prisma[this.modelName].count();\n return { total, data };\n }\n}\n\n/**\n * Generates a set of base service instances for all available models.\n *\n * @returns {Record<string, BaseService>} A dictionary of base service instances, keyed by model name.\n */\nexport function getBaseServices(): Record<string, BaseService> {\n const models = getModels();\n const baseServices: Record<string, BaseService> = {};\n models.forEach((model) => {\n baseServices[`${camelCase(model)}`] = new BaseService(model);\n });\n return baseServices;\n}\n"]}
1
+ {"version":3,"file":"base.service.js","sourceRoot":"","sources":["../../../../src/modules/base/base.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n camelCase,\n kebabCase,\n pascalCase,\n} from \"../../utils/helpers/change-case.helpers\";\nimport {\n getModels,\n getPrismaModelRelations,\n RelationFields,\n} from \"../../utils/helpers/models.helpers\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport pluralize from \"pluralize\";\nimport { handleRelationFieldsInBody } from \"./utils/helpers/base.service.helpers\";\nimport { getPrismaInstance } from \"../../utils/helpers/prisma.helpers\";\nimport authService from \"../auth/auth.service\";\n\n/**\n * Base service class for handling CRUD operations on a specific model.\n * This class provides standard implementation of data operations that can be extended\n * by model-specific service classes.\n *\n * @class BaseService\n */\nexport class BaseService {\n /**\n * The camelCase name of the model\n * @public\n */\n modelName: string;\n\n /**\n * Object containing singular and list relation fields for the model\n * @public\n */\n relationFields: RelationFields;\n\n /**\n * Map of singular relation fields to include in queries\n * @public\n */\n singularRelationFieldToInclude: Record<string, boolean>;\n\n /**\n * Map of list relation fields to include in queries\n * @public\n */\n listRelationFieldToInclude: Record<string, boolean>;\n\n /**\n * Instance of the Prisma client\n * @public\n */\n prisma: any;\n\n /**\n * Creates an instance of BaseService.\n * @param {string} modelName - The name of the model to perform operations on.\n */\n constructor(modelName: string) {\n this.modelName = camelCase(modelName);\n this.relationFields = getPrismaModelRelations(pascalCase(modelName))!;\n this.singularRelationFieldToInclude = this.relationFields?.singular?.reduce(\n (acc: Record<string, boolean>, curr) => {\n acc[curr.name] = true;\n return acc;\n },\n {}\n );\n this.listRelationFieldToInclude = this.relationFields?.list?.reduce(\n (acc: Record<string, boolean>, curr) => {\n acc[curr.name] = true;\n return acc;\n },\n {}\n );\n }\n /**\n * Creates a single record in the database.\n *\n * @param {Record<string, any>} body - The data to create the record with.\n * @param {string} [queryOptions] - Additional query options to modify the Prisma query.\n * @returns {Promise<any>} The created record.\n */\n async createOne(\n body: Record<string, any>,\n queryOptions: string = \"{}\"\n ): Promise<any> {\n if (kebabCase(this.modelName) === \"user\" && body.password) {\n body.password = await authService.hashPassword(body.password);\n }\n\n const prisma = getPrismaInstance();\n\n const bodyWithRelationFieldsHandled = handleRelationFieldsInBody(\n body,\n {\n ...this.relationFields,\n },\n [\"delete\", \"disconnect\", \"update\"]\n );\n\n return await prisma[this.modelName].create(\n deepmerge(\n {\n data: bodyWithRelationFieldsHandled,\n ...(JSON.parse(queryOptions || \"{}\").hasOwnProperty(\"select\")\n ? {\n select: {\n ...this.singularRelationFieldToInclude,\n ...this.listRelationFieldToInclude,\n },\n }\n : {\n include: {\n ...this.singularRelationFieldToInclude,\n ...this.listRelationFieldToInclude,\n },\n }),\n },\n JSON.parse(queryOptions || \"{}\")\n )\n );\n }\n\n /**\n * Creates multiple records in the database.\n *\n * @param {Record<string, any>[]} body - An array of data to create records with.\n * @returns {Promise<{ total: number; data: any }>} The result containing the total count and the created data.\n * @throws {AppError} Throws an error if the data array is invalid or empty.\n */\n async createMany(\n body: Record<string, any>[]\n ): Promise<{ total: number; data: any }> {\n const prisma = getPrismaInstance();\n\n if (!Array.isArray(body) || body.length === 0) {\n throw new AppError(\n \"Invalid or empty data array provided for creation.\",\n 400\n );\n }\n\n const [data, total] = await Promise.all([\n prisma[this.modelName].createMany({\n data: body,\n }),\n prisma[this.modelName].count(),\n ]);\n\n return { total, data };\n }\n\n /**\n * Finds multiple records based on provided filters.\n *\n * @param {Record<string, any>} filters - The filters to apply to the query.\n * @returns {Promise<{ total: number; data: any }>} The result containing the total count and the found data.\n */\n async findMany(\n filters: Record<string, any>\n ): Promise<{ total: number; data: any }> {\n const prisma = getPrismaInstance();\n\n const [data, total] = await Promise.all([\n prisma[this.modelName].findMany(\n \"select\" in filters\n ? deepmerge(\n { ...filters },\n {\n select: this.singularRelationFieldToInclude,\n }\n )\n : deepmerge(\n { ...filters },\n {\n include: this.singularRelationFieldToInclude,\n }\n )\n ),\n prisma[this.modelName].count({\n where: filters.where,\n }),\n ]);\n\n return { total, data };\n }\n\n /**\n * Finds a single record by its parameters.\n *\n * @param {Record<string, any>} filters - The parameters to find the record by.\n * @param {string} [queryOptions] - Additional query options to modify the Prisma query.\n * @returns {Promise<any>} The found record.\n * @throws {AppError} Throws an error if the record is not found.\n */\n async findOne(\n filters: Record<string, any>,\n queryOptions: string = \"{}\"\n ): Promise<any> {\n const prisma = getPrismaInstance();\n\n const data = await prisma[this.modelName].findFirst(\n deepmerge(\n {\n where: { ...filters },\n ...(JSON.parse(queryOptions || \"{}\").hasOwnProperty(\"select\")\n ? {\n select: {\n ...this.singularRelationFieldToInclude,\n ...this.listRelationFieldToInclude,\n },\n }\n : {\n include: {\n ...this.singularRelationFieldToInclude,\n ...this.listRelationFieldToInclude,\n },\n }),\n },\n JSON.parse(queryOptions || \"{}\")\n )\n );\n\n if (!data && Object.keys(filters).length === 1 && \"id\" in filters)\n throw new AppError(\n `${pascalCase(String(this.modelName))} with ID ${filters.id} not found`,\n 404,\n {},\n \"not_found\"\n );\n else if (!data)\n throw new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"not_found\"\n );\n\n return data;\n }\n\n /**\n * Updates a single record by its ID.\n *\n * @param {Record<string, any>} filters - The parameters to find the record by.\n * @param {Record<string, any>} body - The data to update the record with.\n * @param {string} [queryOptions] - Additional query options to modify the Prisma query.\n * @returns {Promise<any>} The updated record.\n * @throws {AppError} Throws an error if the record is not found.\n */\n async updateOne(\n filters: Record<string, any>,\n body: Record<string, any>,\n queryOptions: string = \"{}\"\n ): Promise<any> {\n const prisma = getPrismaInstance();\n\n if (kebabCase(this.modelName) === \"user\" && body.password) {\n body.password = await authService.hashPassword(body.password);\n }\n\n const bodyWithRelationFieldsHandled = handleRelationFieldsInBody(body, {\n ...this.relationFields,\n });\n\n const data = await prisma[this.modelName].update(\n deepmerge(\n {\n where: { ...filters },\n data: bodyWithRelationFieldsHandled,\n ...(JSON.parse(queryOptions || \"{}\").hasOwnProperty(\"select\")\n ? {\n select: {\n ...this.singularRelationFieldToInclude,\n ...this.listRelationFieldToInclude,\n },\n }\n : {\n include: {\n ...this.singularRelationFieldToInclude,\n ...this.listRelationFieldToInclude,\n },\n }),\n },\n JSON.parse(queryOptions || \"{}\")\n )\n );\n\n if (!data && Object.keys(filters).length === 1 && \"id\" in filters)\n throw new AppError(\n `${pascalCase(String(this.modelName))} with ID ${filters.id} not found`,\n 404,\n {},\n \"not_found\"\n );\n else if (!data)\n throw new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"not_found\"\n );\n\n return data;\n }\n\n /**\n * Updates multiple records based on the provided filter and data.\n *\n * @param {Record<string, any>} filters - The filters to identify records to update.\n * @param {Record<string, any>} body - The data to update the records with.\n * @returns {Promise<{ total: number; data: any }>} The result containing the total count and the updated data.\n * @throws {AppError} Throws an error if no records match the filters.\n */\n async updateMany(\n filters: Record<string, any>,\n body: Record<string, any>\n ): Promise<{ total: number; data: any }> {\n const prisma = getPrismaInstance();\n\n if (!filters || typeof filters !== \"object\") {\n throw new AppError(\"Invalid filters provided for udpate many.\", 400);\n }\n\n const data = await prisma[this.modelName].updateMany({\n ...filters,\n data: body,\n });\n\n if (!data || data.count === 0) {\n throw new AppError(\n `${pluralize(pascalCase(String(this.modelName)))} not found`,\n 404\n );\n }\n\n const total = await prisma[this.modelName].count();\n return { total, data };\n }\n\n /**\n * Deletes a single record by its ID.\n *\n * @param {Record<string, any>} params - The parameters to find the record by.\n * @returns {Promise<any>} The deleted record.\n */\n async deleteOne(params: Record<string, any>): Promise<any> {\n const prisma = getPrismaInstance();\n\n return await prisma[this.modelName].delete({\n where: {\n ...params,\n id: String(params.id),\n },\n });\n }\n\n /**\n * Deletes multiple records based on the provided filter.\n *\n * @param {Record<string, any>} filter - The filter to identify records to delete.\n * @returns {Promise<{ total: number; data: any }>} The result containing the total count and the deleted data.\n * @throws {AppError} Throws an error if no records match the filter.\n */\n async deleteMany(\n filters: Record<string, any>\n ): Promise<{ total: number; data: any }> {\n const prisma = getPrismaInstance();\n\n if (!filters || typeof filters !== \"object\") {\n throw new AppError(\"Invalid filters provided for deletion.\", 400);\n }\n\n const data = await prisma[this.modelName].deleteMany(filters);\n\n if (!data || data.count === 0) {\n throw new AppError(`No records found to delete`, 404);\n }\n\n const total = await prisma[this.modelName].count();\n return { total, data };\n }\n}\n\n/**\n * Generates a set of base service instances for all available models.\n *\n * @returns {Record<string, BaseService>} A dictionary of base service instances, keyed by model name.\n */\nexport function getBaseServices(): Record<string, BaseService> {\n const models = getModels();\n const baseServices: Record<string, BaseService> = {};\n models.forEach((model) => {\n baseServices[`${camelCase(model)}`] = new BaseService(model);\n });\n return baseServices;\n}\n"]}
@@ -1,4 +1,37 @@
1
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
+ })();
2
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -13,28 +46,27 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
46
  };
14
47
  Object.defineProperty(exports, "__esModule", { value: true });
15
48
  exports.setupRouters = setupRouters;
16
- const pluralize_1 = __importDefault(require("pluralize"));
49
+ const pluralize_1 = __importStar(require("pluralize"));
17
50
  const utils_1 = require("../../../../exports/utils");
18
51
  const models_helpers_1 = require("../../../../utils/helpers/models.helpers");
19
52
  const auth_service_1 = __importDefault(require("../../../auth/auth.service"));
20
53
  const base_controller_1 = require("../../base.controller");
21
54
  const base_middlewares_1 = require("../../base.middlewares");
22
- function setupRouters(models, router) {
55
+ function setupRouters(models, router, arkosConfigs) {
23
56
  return models.map((model) => __awaiter(this, void 0, void 0, function* () {
24
57
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
25
58
  const modelNameInKebab = (0, utils_1.kebabCase)(model);
26
59
  const modelModules = yield (0, models_helpers_1.importPrismaModelModules)(modelNameInKebab);
27
- const { middlewares, authConfigs, prismaQueryOptions, router: customRouterModule, } = modelModules;
60
+ const { middlewares, authConfigs, prismaQueryOptions, router: customRouterModule, dtos, schemas, } = modelModules;
28
61
  const routeName = pluralize_1.default.plural(modelNameInKebab);
29
- const apiRoutePath = `/api/${routeName}`;
30
- const { createOne, findMany, findOne, updateOne, deleteOne, createMany, updateMany, deleteMany, } = new base_controller_1.BaseController(model);
62
+ const controller = new base_controller_1.BaseController(model);
31
63
  const routerConfig = customRouterModule === null || customRouterModule === void 0 ? void 0 : customRouterModule.config;
32
64
  const disableConfig = (routerConfig === null || routerConfig === void 0 ? void 0 : routerConfig.disable) || {};
33
65
  const isCompletelyDisabled = disableConfig === true;
34
66
  const customRouter = (customRouterModule === null || customRouterModule === void 0 ? void 0 : customRouterModule.default) || {};
35
67
  const hasCustomImplementation = (path, method) => {
36
68
  var _a;
37
- return (_a = customRouter.stack) === null || _a === void 0 ? void 0 : _a.some((layer) => layer.path === path &&
69
+ return (_a = customRouter.stack) === null || _a === void 0 ? void 0 : _a.some((layer) => layer.path === `/api/${path}` &&
38
70
  layer.method.toLowerCase() === method.toLowerCase());
39
71
  };
40
72
  const isEndpointDisabled = (endpoint) => {
@@ -42,66 +74,76 @@ function setupRouters(models, router) {
42
74
  return true;
43
75
  return typeof disableConfig === "object" && !!disableConfig[endpoint];
44
76
  };
77
+ const getValidationSchemaOrDto = (key) => {
78
+ const validationConfigs = arkosConfigs === null || arkosConfigs === void 0 ? void 0 : arkosConfigs.validation;
79
+ if ((validationConfigs === null || validationConfigs === void 0 ? void 0 : validationConfigs.resolver) === "class-validator") {
80
+ return dtos === null || dtos === void 0 ? void 0 : dtos[key];
81
+ }
82
+ else if ((validationConfigs === null || validationConfigs === void 0 ? void 0 : validationConfigs.resolver) === "zod") {
83
+ return schemas === null || schemas === void 0 ? void 0 : schemas[key];
84
+ }
85
+ return undefined;
86
+ };
45
87
  if (!isEndpointDisabled("createOne") &&
46
88
  !hasCustomImplementation(`/${routeName}`, "post")) {
47
- router.post(`/${routeName}`, auth_service_1.default.handleAuthenticationControl(authConfigs, "create"), auth_service_1.default.handleActionAccessControl(authConfigs, "create", modelNameInKebab), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(modelNameInKebab, "create"), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "createOne"), (_a = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeCreateOne) !== null && _a !== void 0 ? _a : createOne, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeCreateOne)
48
- ? createOne
89
+ router.post(`/${routeName}`, auth_service_1.default.handleAuthenticationControl("Create", authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.authenticationControl), auth_service_1.default.handleAccessControl("Create", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), (authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.accessControl) || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("create")), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "createOne"), (_a = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeCreateOne) !== null && _a !== void 0 ? _a : controller.createOne, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeCreateOne)
90
+ ? controller.createOne
49
91
  : (_b = middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterCreateOne) !== null && _b !== void 0 ? _b : base_middlewares_1.sendResponse, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeCreateOne) && (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterCreateOne)
50
92
  ? middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterCreateOne
51
93
  : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
52
94
  }
53
95
  if (!isEndpointDisabled("findMany") &&
54
96
  !hasCustomImplementation(`/${routeName}`, "get")) {
55
- router.get(`/${routeName}`, auth_service_1.default.handleAuthenticationControl(authConfigs, "view"), auth_service_1.default.handleActionAccessControl(authConfigs, "view", modelNameInKebab), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "findMany"), (_c = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeFindMany) !== null && _c !== void 0 ? _c : findMany, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeFindMany)
56
- ? findMany
97
+ router.get(`/${routeName}`, auth_service_1.default.handleAuthenticationControl("View", authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.authenticationControl), auth_service_1.default.handleAccessControl("View", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), (authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.accessControl) || {}), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "findMany"), (_c = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeFindMany) !== null && _c !== void 0 ? _c : controller.findMany, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeFindMany)
98
+ ? controller.findMany
57
99
  : (_d = middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterFindMany) !== null && _d !== void 0 ? _d : base_middlewares_1.sendResponse, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeFindMany) && (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterFindMany)
58
100
  ? middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterFindMany
59
101
  : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
60
102
  }
61
103
  if (!isEndpointDisabled("createMany") &&
62
104
  !hasCustomImplementation(`/${routeName}/many`, "post")) {
63
- router.post(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl(authConfigs, "create"), auth_service_1.default.handleActionAccessControl(authConfigs, "create", modelNameInKebab), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "createMany"), (_e = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeCreateMany) !== null && _e !== void 0 ? _e : createMany, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeCreateMany)
64
- ? createMany
105
+ router.post(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl("Create", authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.authenticationControl), auth_service_1.default.handleAccessControl("Create", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), (authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.accessControl) || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("createMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "createMany"), (_e = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeCreateMany) !== null && _e !== void 0 ? _e : controller.createMany, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeCreateMany)
106
+ ? controller.createMany
65
107
  : (_f = middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterCreateMany) !== null && _f !== void 0 ? _f : base_middlewares_1.sendResponse, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeCreateMany) && (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterCreateMany)
66
108
  ? middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterCreateMany
67
109
  : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
68
110
  }
69
111
  if (!isEndpointDisabled("updateMany") &&
70
112
  !hasCustomImplementation(`/${routeName}/many`, "patch")) {
71
- router.patch(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl(authConfigs, "update"), auth_service_1.default.handleActionAccessControl(authConfigs, "update", modelNameInKebab), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "updateMany"), (_g = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeUpdateMany) !== null && _g !== void 0 ? _g : updateMany, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeUpdateMany)
72
- ? updateMany
113
+ router.patch(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl("Update", authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.authenticationControl), auth_service_1.default.handleAccessControl("Update", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), (authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.accessControl) || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("updateMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "updateMany"), (_g = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeUpdateMany) !== null && _g !== void 0 ? _g : controller.updateMany, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeUpdateMany)
114
+ ? controller.updateMany
73
115
  : (_h = middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterUpdateMany) !== null && _h !== void 0 ? _h : base_middlewares_1.sendResponse, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeUpdateMany) && (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterUpdateMany)
74
116
  ? middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterUpdateMany
75
117
  : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
76
118
  }
77
119
  if (!isEndpointDisabled("deleteMany") &&
78
120
  !hasCustomImplementation(`/${routeName}/many`, "delete")) {
79
- router.delete(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl(authConfigs, "delete"), auth_service_1.default.handleActionAccessControl(authConfigs, "delete", modelNameInKebab), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "deleteMany"), (_j = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeDeleteMany) !== null && _j !== void 0 ? _j : deleteMany, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeDeleteMany)
80
- ? deleteMany
121
+ router.delete(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl("Delete", authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.authenticationControl), auth_service_1.default.handleAccessControl("Delete", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), (authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.accessControl) || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("deleteMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "deleteMany"), (_j = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeDeleteMany) !== null && _j !== void 0 ? _j : controller.deleteMany, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeDeleteMany)
122
+ ? controller.deleteMany
81
123
  : (_k = middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterDeleteMany) !== null && _k !== void 0 ? _k : base_middlewares_1.sendResponse, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeDeleteMany) && (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterDeleteMany)
82
124
  ? middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterDeleteMany
83
125
  : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
84
126
  }
85
127
  if (!isEndpointDisabled("findOne") &&
86
128
  !hasCustomImplementation(`/${routeName}/:id`, "get")) {
87
- router.get(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl(authConfigs, "view"), auth_service_1.default.handleActionAccessControl(authConfigs, "view", modelNameInKebab), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "findOne"), (_l = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeFindOne) !== null && _l !== void 0 ? _l : findOne, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeFindOne)
88
- ? findOne
129
+ router.get(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl("View", authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.authenticationControl), auth_service_1.default.handleAccessControl("View", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), (authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.accessControl) || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("findOne")), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "findOne"), (_l = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeFindOne) !== null && _l !== void 0 ? _l : controller.findOne, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeFindOne)
130
+ ? controller.findOne
89
131
  : (_m = middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterFindOne) !== null && _m !== void 0 ? _m : base_middlewares_1.sendResponse, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeFindOne) && (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterFindOne)
90
132
  ? middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterFindOne
91
133
  : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
92
134
  }
93
135
  if (!isEndpointDisabled("updateOne") &&
94
136
  !hasCustomImplementation(`/${routeName}/:id`, "patch")) {
95
- router.patch(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl(authConfigs, "update"), auth_service_1.default.handleActionAccessControl(authConfigs, "update", modelNameInKebab), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(modelNameInKebab, "update"), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "updateOne"), (_o = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeUpdateOne) !== null && _o !== void 0 ? _o : updateOne, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeUpdateOne)
96
- ? updateOne
137
+ router.patch(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl("Update", authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.authenticationControl), auth_service_1.default.handleAccessControl("Update", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), (authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.accessControl) || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("update")), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "updateOne"), (_o = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeUpdateOne) !== null && _o !== void 0 ? _o : controller.updateOne, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeUpdateOne)
138
+ ? controller.updateOne
97
139
  : (_p = middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterUpdateOne) !== null && _p !== void 0 ? _p : base_middlewares_1.sendResponse, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeUpdateOne) && (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterUpdateOne)
98
140
  ? middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterUpdateOne
99
141
  : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
100
142
  }
101
143
  if (!isEndpointDisabled("deleteOne") &&
102
144
  !hasCustomImplementation(`/${routeName}/:id`, "delete")) {
103
- router.delete(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl(authConfigs, "delete"), auth_service_1.default.handleActionAccessControl(authConfigs, "delete", modelNameInKebab), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "deleteOne"), (_q = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeDeleteOne) !== null && _q !== void 0 ? _q : deleteOne, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeDeleteOne)
104
- ? deleteOne
145
+ router.delete(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl("Delete", authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.authenticationControl), auth_service_1.default.handleAccessControl("Delete", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), (authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.accessControl) || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("delete")), (0, base_middlewares_1.addPrismaQueryOptionsToRequestQuery)(prismaQueryOptions, "deleteOne"), (_q = middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeDeleteOne) !== null && _q !== void 0 ? _q : controller.deleteOne, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeDeleteOne)
146
+ ? controller.deleteOne
105
147
  : (_r = middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterDeleteOne) !== null && _r !== void 0 ? _r : base_middlewares_1.sendResponse, (middlewares === null || middlewares === void 0 ? void 0 : middlewares.beforeDeleteOne) && (middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterDeleteOne)
106
148
  ? middlewares === null || middlewares === void 0 ? void 0 : middlewares.afterDeleteOne
107
149
  : base_middlewares_1.sendResponse, base_middlewares_1.sendResponse);
@@ -1 +1 @@
1
- {"version":3,"file":"base.router.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.router.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport pluralize from \"pluralize\";\nimport { RouterConfig } from \"../../../../exports\";\nimport { kebabCase } from \"../../../../exports/utils\";\nimport { PrismaQueryOptions } from \"../../../../types\";\nimport { RouterEndpoint } from \"../../../../types/router-config\";\nimport { importPrismaModelModules } from \"../../../../utils/helpers/models.helpers\";\nimport authService from \"../../../auth/auth.service\";\nimport { BaseController } from \"../../base.controller\";\nimport {\n addPrismaQueryOptionsToRequestQuery,\n handleRequestBodyValidationAndTransformation,\n sendResponse,\n} from \"../../base.middlewares\";\n\nexport function setupRouters(models: string[], router: Router) {\n return models.map(async (model) => {\n const modelNameInKebab = kebabCase(model);\n const modelModules = await importPrismaModelModules(modelNameInKebab);\n const {\n middlewares,\n authConfigs,\n prismaQueryOptions,\n router: customRouterModule,\n } = modelModules;\n\n const routeName = pluralize.plural(modelNameInKebab);\n const apiRoutePath = `/api/${routeName}`;\n const {\n createOne,\n findMany,\n findOne,\n updateOne,\n deleteOne,\n createMany,\n updateMany,\n deleteMany,\n } = new BaseController(model);\n\n // Check for router customization/disabling\n const routerConfig: RouterConfig = customRouterModule?.config;\n const disableConfig = routerConfig?.disable || {};\n const isCompletelyDisabled = disableConfig === true;\n\n // Check if custom implementation exists\n const customRouter = (customRouterModule?.default as Router) || {};\n const hasCustomImplementation = (path: string, method: string) => {\n return customRouter.stack?.some(\n (layer) =>\n layer.path === path &&\n layer.method.toLowerCase() === method.toLowerCase()\n );\n };\n\n // Helper to determine if an endpoint should be disabled\n const isEndpointDisabled = (endpoint: RouterEndpoint): boolean => {\n if (isCompletelyDisabled) return true;\n return typeof disableConfig === \"object\" && !!disableConfig[endpoint];\n };\n\n // Create individual routes instead of chaining\n\n // POST /{routeName} - Create One\n if (\n !isEndpointDisabled(\"createOne\") &&\n !hasCustomImplementation(`/${routeName}`, \"post\")\n ) {\n router.post(\n `/${routeName}`,\n authService.handleAuthenticationControl(authConfigs, \"create\"),\n authService.handleActionAccessControl(\n authConfigs,\n \"create\",\n modelNameInKebab\n ),\n handleRequestBodyValidationAndTransformation(\n modelNameInKebab,\n \"create\"\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createOne\"\n ),\n middlewares?.beforeCreateOne ?? createOne,\n middlewares?.beforeCreateOne\n ? createOne\n : middlewares?.afterCreateOne ?? sendResponse,\n middlewares?.beforeCreateOne && middlewares?.afterCreateOne\n ? middlewares?.afterCreateOne\n : sendResponse,\n sendResponse\n );\n }\n\n // GET /{routeName} - Find Many\n if (\n !isEndpointDisabled(\"findMany\") &&\n !hasCustomImplementation(`/${routeName}`, \"get\")\n ) {\n router.get(\n `/${routeName}`,\n authService.handleAuthenticationControl(authConfigs, \"view\"),\n authService.handleActionAccessControl(\n authConfigs,\n \"view\",\n modelNameInKebab\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findMany\"\n ),\n middlewares?.beforeFindMany ?? findMany,\n middlewares?.beforeFindMany\n ? findMany\n : middlewares?.afterFindMany ?? sendResponse,\n middlewares?.beforeFindMany && middlewares?.afterFindMany\n ? middlewares?.afterFindMany\n : sendResponse,\n sendResponse\n );\n }\n\n // POST /{routeName}/many - Create Many\n if (\n !isEndpointDisabled(\"createMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"post\")\n ) {\n router.post(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(authConfigs, \"create\"),\n authService.handleActionAccessControl(\n authConfigs,\n \"create\",\n modelNameInKebab\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createMany\"\n ),\n middlewares?.beforeCreateMany ?? createMany,\n middlewares?.beforeCreateMany\n ? createMany\n : middlewares?.afterCreateMany ?? sendResponse,\n middlewares?.beforeCreateMany && middlewares?.afterCreateMany\n ? middlewares?.afterCreateMany\n : sendResponse,\n sendResponse\n );\n }\n\n // PATCH /{routeName}/many - Update Many\n if (\n !isEndpointDisabled(\"updateMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"patch\")\n ) {\n router.patch(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(authConfigs, \"update\"),\n authService.handleActionAccessControl(\n authConfigs,\n \"update\",\n modelNameInKebab\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateMany\"\n ),\n middlewares?.beforeUpdateMany ?? updateMany,\n middlewares?.beforeUpdateMany\n ? updateMany\n : middlewares?.afterUpdateMany ?? sendResponse,\n middlewares?.beforeUpdateMany && middlewares?.afterUpdateMany\n ? middlewares?.afterUpdateMany\n : sendResponse,\n sendResponse\n );\n }\n\n // DELETE /{routeName}/many - Delete Many\n if (\n !isEndpointDisabled(\"deleteMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"delete\")\n ) {\n router.delete(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(authConfigs, \"delete\"),\n authService.handleActionAccessControl(\n authConfigs,\n \"delete\",\n modelNameInKebab\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteMany\"\n ),\n middlewares?.beforeDeleteMany ?? deleteMany,\n middlewares?.beforeDeleteMany\n ? deleteMany\n : middlewares?.afterDeleteMany ?? sendResponse,\n middlewares?.beforeDeleteMany && middlewares?.afterDeleteMany\n ? middlewares?.afterDeleteMany\n : sendResponse,\n sendResponse\n );\n }\n\n // GET /{routeName}/:id - Find One\n if (\n !isEndpointDisabled(\"findOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"get\")\n ) {\n router.get(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(authConfigs, \"view\"),\n authService.handleActionAccessControl(\n authConfigs,\n \"view\",\n modelNameInKebab\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findOne\"\n ),\n middlewares?.beforeFindOne ?? findOne,\n middlewares?.beforeFindOne\n ? findOne\n : middlewares?.afterFindOne ?? sendResponse,\n middlewares?.beforeFindOne && middlewares?.afterFindOne\n ? middlewares?.afterFindOne\n : sendResponse,\n sendResponse\n );\n }\n\n // PATCH /{routeName}/:id - Update One\n if (\n !isEndpointDisabled(\"updateOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"patch\")\n ) {\n router.patch(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(authConfigs, \"update\"),\n authService.handleActionAccessControl(\n authConfigs,\n \"update\",\n modelNameInKebab\n ),\n handleRequestBodyValidationAndTransformation(\n modelNameInKebab,\n \"update\"\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateOne\"\n ),\n middlewares?.beforeUpdateOne ?? updateOne,\n middlewares?.beforeUpdateOne\n ? updateOne\n : middlewares?.afterUpdateOne ?? sendResponse,\n middlewares?.beforeUpdateOne && middlewares?.afterUpdateOne\n ? middlewares?.afterUpdateOne\n : sendResponse,\n sendResponse\n );\n }\n\n // DELETE /{routeName}/:id - Delete One\n if (\n !isEndpointDisabled(\"deleteOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"delete\")\n ) {\n router.delete(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(authConfigs, \"delete\"),\n authService.handleActionAccessControl(\n authConfigs,\n \"delete\",\n modelNameInKebab\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteOne\"\n ),\n middlewares?.beforeDeleteOne ?? deleteOne,\n middlewares?.beforeDeleteOne\n ? deleteOne\n : middlewares?.afterDeleteOne ?? sendResponse,\n middlewares?.beforeDeleteOne && middlewares?.afterDeleteOne\n ? middlewares?.afterDeleteOne\n : sendResponse,\n sendResponse\n );\n }\n\n // // If the custom router has its own routes, add them\n // if (customRouterModule?.default) {\n // customRouter.stack.forEach((stack) => {\n // const { method, path, handle } = stack;\n // (router as any)[method.toLowerCase()](path, handle);\n // });\n // }\n });\n}\n"]}
1
+ {"version":3,"file":"base.router.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.router.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport pluralize, { singular } from \"pluralize\";\nimport { ArkosConfig, RouterConfig } from \"../../../../exports\";\nimport { kebabCase } from \"../../../../exports/utils\";\nimport { PrismaQueryOptions } from \"../../../../types\";\nimport { RouterEndpoint } from \"../../../../types/router-config\";\nimport { importPrismaModelModules } from \"../../../../utils/helpers/models.helpers\";\nimport authService from \"../../../auth/auth.service\";\nimport { BaseController } from \"../../base.controller\";\nimport {\n addPrismaQueryOptionsToRequestQuery,\n handleRequestBodyValidationAndTransformation,\n sendResponse,\n} from \"../../base.middlewares\";\n\nexport function setupRouters(\n models: string[],\n router: Router,\n arkosConfigs: ArkosConfig\n) {\n return models.map(async (model) => {\n const modelNameInKebab = kebabCase(model);\n const modelModules = await importPrismaModelModules(modelNameInKebab);\n const {\n middlewares,\n authConfigs,\n prismaQueryOptions,\n router: customRouterModule,\n dtos,\n schemas,\n } = modelModules;\n\n const routeName = pluralize.plural(modelNameInKebab);\n const controller = new BaseController(model);\n\n // Check for router customization/disabling\n const routerConfig: RouterConfig = customRouterModule?.config;\n const disableConfig = routerConfig?.disable || {};\n const isCompletelyDisabled = disableConfig === true;\n\n // Check if custom implementation exists\n const customRouter = (customRouterModule?.default as Router) || {};\n const hasCustomImplementation = (path: string, method: string) => {\n return customRouter.stack?.some(\n (layer) =>\n layer.path === `/api/${path}` &&\n layer.method.toLowerCase() === method.toLowerCase()\n );\n };\n\n // Helper to determine if an endpoint should be disabled\n const isEndpointDisabled = (endpoint: RouterEndpoint): boolean => {\n if (isCompletelyDisabled) return true;\n return typeof disableConfig === \"object\" && !!disableConfig[endpoint];\n };\n\n // Helper to get the correct schema or DTO based on Arkos Config\n const getValidationSchemaOrDto = (\n key: keyof typeof dtos | keyof typeof schemas\n ) => {\n const validationConfigs = arkosConfigs?.validation;\n if (validationConfigs?.resolver === \"class-validator\") {\n return dtos?.[key];\n } else if (validationConfigs?.resolver === \"zod\") {\n return schemas?.[key];\n }\n return undefined;\n };\n\n // Create individual routes instead of chaining\n\n // POST /{routeName} - Create One\n if (\n !isEndpointDisabled(\"createOne\") &&\n !hasCustomImplementation(`/${routeName}`, \"post\")\n ) {\n router.post(\n `/${routeName}`,\n authService.handleAuthenticationControl(\n \"Create\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Create\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"create\")\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createOne\"\n ),\n middlewares?.beforeCreateOne ?? controller.createOne,\n middlewares?.beforeCreateOne\n ? controller.createOne\n : middlewares?.afterCreateOne ?? sendResponse,\n middlewares?.beforeCreateOne && middlewares?.afterCreateOne\n ? middlewares?.afterCreateOne\n : sendResponse,\n sendResponse\n );\n }\n\n // GET /{routeName} - Find Many\n if (\n !isEndpointDisabled(\"findMany\") &&\n !hasCustomImplementation(`/${routeName}`, \"get\")\n ) {\n router.get(\n `/${routeName}`,\n authService.handleAuthenticationControl(\n \"View\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"View\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findMany\"\n ),\n middlewares?.beforeFindMany ?? controller.findMany,\n middlewares?.beforeFindMany\n ? controller.findMany\n : middlewares?.afterFindMany ?? sendResponse,\n middlewares?.beforeFindMany && middlewares?.afterFindMany\n ? middlewares?.afterFindMany\n : sendResponse,\n sendResponse\n );\n }\n\n // POST /{routeName}/many - Create Many\n if (\n !isEndpointDisabled(\"createMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"post\")\n ) {\n router.post(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Create\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Create\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"createMany\")\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createMany\"\n ),\n middlewares?.beforeCreateMany ?? controller.createMany,\n middlewares?.beforeCreateMany\n ? controller.createMany\n : middlewares?.afterCreateMany ?? sendResponse,\n middlewares?.beforeCreateMany && middlewares?.afterCreateMany\n ? middlewares?.afterCreateMany\n : sendResponse,\n sendResponse\n );\n }\n\n // PATCH /{routeName}/many - Update Many\n if (\n !isEndpointDisabled(\"updateMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"patch\")\n ) {\n router.patch(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Update\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Update\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"updateMany\")\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateMany\"\n ),\n middlewares?.beforeUpdateMany ?? controller.updateMany,\n middlewares?.beforeUpdateMany\n ? controller.updateMany\n : middlewares?.afterUpdateMany ?? sendResponse,\n middlewares?.beforeUpdateMany && middlewares?.afterUpdateMany\n ? middlewares?.afterUpdateMany\n : sendResponse,\n sendResponse\n );\n }\n\n // DELETE /{routeName}/many - Delete Many\n if (\n !isEndpointDisabled(\"deleteMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"delete\")\n ) {\n router.delete(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Delete\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Delete\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"deleteMany\")\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteMany\"\n ),\n middlewares?.beforeDeleteMany ?? controller.deleteMany,\n middlewares?.beforeDeleteMany\n ? controller.deleteMany\n : middlewares?.afterDeleteMany ?? sendResponse,\n middlewares?.beforeDeleteMany && middlewares?.afterDeleteMany\n ? middlewares?.afterDeleteMany\n : sendResponse,\n sendResponse\n );\n }\n\n // GET /{routeName}/:id - Find One\n if (\n !isEndpointDisabled(\"findOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"get\")\n ) {\n router.get(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"View\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"View\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"findOne\")\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findOne\"\n ),\n middlewares?.beforeFindOne ?? controller.findOne,\n middlewares?.beforeFindOne\n ? controller.findOne\n : middlewares?.afterFindOne ?? sendResponse,\n middlewares?.beforeFindOne && middlewares?.afterFindOne\n ? middlewares?.afterFindOne\n : sendResponse,\n sendResponse\n );\n }\n\n // PATCH /{routeName}/:id - Update One\n if (\n !isEndpointDisabled(\"updateOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"patch\")\n ) {\n router.patch(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"Update\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Update\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"update\")\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateOne\"\n ),\n middlewares?.beforeUpdateOne ?? controller.updateOne,\n middlewares?.beforeUpdateOne\n ? controller.updateOne\n : middlewares?.afterUpdateOne ?? sendResponse,\n middlewares?.beforeUpdateOne && middlewares?.afterUpdateOne\n ? middlewares?.afterUpdateOne\n : sendResponse,\n sendResponse\n );\n }\n\n // DELETE /{routeName}/:id - Delete One\n if (\n !isEndpointDisabled(\"deleteOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"delete\")\n ) {\n router.delete(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"Delete\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Delete\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"delete\")\n ),\n addPrismaQueryOptionsToRequestQuery<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteOne\"\n ),\n middlewares?.beforeDeleteOne ?? controller.deleteOne,\n middlewares?.beforeDeleteOne\n ? controller.deleteOne\n : middlewares?.afterDeleteOne ?? sendResponse,\n middlewares?.beforeDeleteOne && middlewares?.afterDeleteOne\n ? middlewares?.afterDeleteOne\n : sendResponse,\n sendResponse\n );\n }\n });\n\n // // If the custom router has its own routes, add them\n // if (customRouterModule?.default) {\n // customRouter.stack.forEach((stack) => {\n // const { method, path, handle } = stack;\n // (router as any)[method.toLowerCase()](path, handle);\n // });\n // }\n}\n"]}
@@ -33,7 +33,7 @@ function getFileUploaderRouter(_a) {
33
33
  basePathname = "/" + basePathname;
34
34
  if (!basePathname.endsWith("/"))
35
35
  basePathname = basePathname + "/";
36
- router.use(basePathname, auth_service_1.default.handleAuthenticationControl(authConfigs, "view"), auth_service_1.default.handleActionAccessControl(authConfigs, "view", "file-upload"), express_2.default.static(path_1.default.resolve(process.cwd(), (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.baseUploadDir) || "uploads"), (0, deepmerge_helper_1.default)({
36
+ router.use(basePathname, auth_service_1.default.handleAuthenticationControl("view", authConfigs), auth_service_1.default.handleAccessControl("view", "file-upload", authConfigs), express_2.default.static(path_1.default.resolve(process.cwd(), (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.baseUploadDir) || "uploads"), (0, deepmerge_helper_1.default)({
37
37
  maxAge: "1y",
38
38
  etag: true,
39
39
  lastModified: true,
@@ -42,8 +42,8 @@ function getFileUploaderRouter(_a) {
42
42
  index: false,
43
43
  cacheControl: true,
44
44
  }, (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.expressStaticOptions) || {})));
45
- router.post(`${basePathname}:fileType`, auth_service_1.default.handleAuthenticationControl(authConfigs, "create"), auth_service_1.default.handleActionAccessControl(authConfigs, "create", "file-upload"), file_uploader_controller_1.uploadFile);
46
- router.delete(`${basePathname}:fileType/:fileName`, auth_service_1.default.handleAuthenticationControl(authConfigs, "delete"), auth_service_1.default.handleActionAccessControl(authConfigs, "create", "file-upload"), file_uploader_controller_1.deleteFile);
45
+ router.post(`${basePathname}:fileType`, auth_service_1.default.handleAuthenticationControl("create", authConfigs), auth_service_1.default.handleAccessControl("create", "file-upload", authConfigs), file_uploader_controller_1.uploadFile);
46
+ router.delete(`${basePathname}:fileType/:fileName`, auth_service_1.default.handleAuthenticationControl("delete", authConfigs), auth_service_1.default.handleAccessControl("create", "file-upload", authConfigs), file_uploader_controller_1.deleteFile);
47
47
  return router;
48
48
  });
49
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"file-uploader.router.js","sourceRoot":"","sources":["../../../../src/modules/file-uploader/file-uploader.router.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAWA,sDAiDC;AA5DD,qCAAiC;AACjC,uEAA8E;AAC9E,wEAA+C;AAC/C,yEAAoE;AAEpE,gDAAwB;AACxB,sDAA8B;AAC9B,4FAA6D;AAE7D,MAAM,MAAM,GAAW,IAAA,gBAAM,GAAE,CAAC;AAEhC,SAAsB,qBAAqB;yDAAC,EAAE,UAAU,EAAe;QACrE,MAAM,YAAY,GAAG,MAAM,IAAA,yCAAwB,EAAC,aAAa,CAAC,CAAC;QACnE,IAAI,EAAE,WAAW,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC;QAEhD,IAAI,YAAY,EAAE,CAAC;YACjB,CAAC,EAAE,WAAW,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,YAAY,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,YAAY,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,KAAI,eAAe,CAAC;QAE5D,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,YAAY,GAAG,GAAG,GAAG,YAAY,CAAC;QACrE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,YAAY,GAAG,YAAY,GAAG,GAAG,CAAC;QAEnE,MAAM,CAAC,GAAG,CACR,YAAY,EACZ,sBAAW,CAAC,2BAA2B,CAAC,WAAW,EAAE,MAAM,CAAC,EAC5D,sBAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EACzE,iBAAO,CAAC,MAAM,CACZ,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,aAAa,KAAI,SAAS,CAAC,EACnE,IAAA,0BAAS,EACP;YACE,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,KAAK;YACZ,YAAY,EAAE,IAAI;SACnB,EACD,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,oBAAoB,KAAI,EAAE,CACvC,CACF,CACF,CAAC;QAEF,MAAM,CAAC,IAAI,CACT,GAAG,YAAY,WAAW,EAC1B,sBAAW,CAAC,2BAA2B,CAAC,WAAW,EAAE,QAAQ,CAAC,EAC9D,sBAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,EAC3E,qCAAU,CACX,CAAC;QAEF,MAAM,CAAC,MAAM,CACX,GAAG,YAAY,qBAAqB,EACpC,sBAAW,CAAC,2BAA2B,CAAC,WAAW,EAAE,QAAQ,CAAC,EAC9D,sBAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,EAC3E,qCAAU,CACX,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;CAAA","sourcesContent":["import { Router } from \"express\";\nimport { importPrismaModelModules } from \"../../utils/helpers/models.helpers\";\nimport authService from \"../auth/auth.service\";\nimport { deleteFile, uploadFile } from \"./file-uploader.controller\";\nimport { ArkosConfig } from \"../../types/arkos-config\";\nimport path from \"path\";\nimport express from \"express\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\n\nconst router: Router = Router();\n\nexport async function getFileUploaderRouter({ fileUpload }: ArkosConfig) {\n const modelModules = await importPrismaModelModules(\"file-upload\");\n let { middlewares = {}, authConfigs = {} } = {};\n\n if (modelModules) {\n ({ middlewares = {}, authConfigs = {} } = modelModules);\n }\n\n let basePathname = fileUpload?.baseRoute || \"/api/uploads/\";\n\n if (!basePathname.startsWith(\"/\")) basePathname = \"/\" + basePathname;\n if (!basePathname.endsWith(\"/\")) basePathname = basePathname + \"/\";\n\n router.use(\n basePathname,\n authService.handleAuthenticationControl(authConfigs, \"view\"),\n authService.handleActionAccessControl(authConfigs, \"view\", \"file-upload\"),\n express.static(\n path.resolve(process.cwd(), fileUpload?.baseUploadDir || \"uploads\"),\n deepmerge(\n {\n maxAge: \"1y\",\n etag: true,\n lastModified: true,\n dotfiles: \"ignore\",\n fallthrough: true,\n index: false,\n cacheControl: true,\n },\n fileUpload?.expressStaticOptions || {}\n )\n )\n );\n\n router.post(\n `${basePathname}:fileType`,\n authService.handleAuthenticationControl(authConfigs, \"create\"),\n authService.handleActionAccessControl(authConfigs, \"create\", \"file-upload\"),\n uploadFile\n );\n\n router.delete(\n `${basePathname}:fileType/:fileName`,\n authService.handleAuthenticationControl(authConfigs, \"delete\"),\n authService.handleActionAccessControl(authConfigs, \"create\", \"file-upload\"),\n deleteFile\n );\n\n return router;\n}\n"]}
1
+ {"version":3,"file":"file-uploader.router.js","sourceRoot":"","sources":["../../../../src/modules/file-uploader/file-uploader.router.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAWA,sDAiDC;AA5DD,qCAAiC;AACjC,uEAA8E;AAC9E,wEAA+C;AAC/C,yEAAoE;AAEpE,gDAAwB;AACxB,sDAA8B;AAC9B,4FAA6D;AAE7D,MAAM,MAAM,GAAW,IAAA,gBAAM,GAAE,CAAC;AAEhC,SAAsB,qBAAqB;yDAAC,EAAE,UAAU,EAAe;QACrE,MAAM,YAAY,GAAG,MAAM,IAAA,yCAAwB,EAAC,aAAa,CAAC,CAAC;QACnE,IAAI,EAAE,WAAW,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC;QAEhD,IAAI,YAAY,EAAE,CAAC;YACjB,CAAC,EAAE,WAAW,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,YAAY,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,YAAY,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,KAAI,eAAe,CAAC;QAE5D,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,YAAY,GAAG,GAAG,GAAG,YAAY,CAAC;QACrE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,YAAY,GAAG,YAAY,GAAG,GAAG,CAAC;QAEnE,MAAM,CAAC,GAAG,CACR,YAAY,EACZ,sBAAW,CAAC,2BAA2B,CAAC,MAAM,EAAE,WAAW,CAAC,EAC5D,sBAAW,CAAC,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,EACnE,iBAAO,CAAC,MAAM,CACZ,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,aAAa,KAAI,SAAS,CAAC,EACnE,IAAA,0BAAS,EACP;YACE,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,KAAK;YACZ,YAAY,EAAE,IAAI;SACnB,EACD,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,oBAAoB,KAAI,EAAE,CACvC,CACF,CACF,CAAC;QAEF,MAAM,CAAC,IAAI,CACT,GAAG,YAAY,WAAW,EAC1B,sBAAW,CAAC,2BAA2B,CAAC,QAAQ,EAAE,WAAW,CAAC,EAC9D,sBAAW,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,CAAC,EACrE,qCAAU,CACX,CAAC;QAEF,MAAM,CAAC,MAAM,CACX,GAAG,YAAY,qBAAqB,EACpC,sBAAW,CAAC,2BAA2B,CAAC,QAAQ,EAAE,WAAW,CAAC,EAC9D,sBAAW,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,CAAC,EACrE,qCAAU,CACX,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;CAAA","sourcesContent":["import { Router } from \"express\";\nimport { importPrismaModelModules } from \"../../utils/helpers/models.helpers\";\nimport authService from \"../auth/auth.service\";\nimport { deleteFile, uploadFile } from \"./file-uploader.controller\";\nimport { ArkosConfig } from \"../../types/arkos-config\";\nimport path from \"path\";\nimport express from \"express\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\n\nconst router: Router = Router();\n\nexport async function getFileUploaderRouter({ fileUpload }: ArkosConfig) {\n const modelModules = await importPrismaModelModules(\"file-upload\");\n let { middlewares = {}, authConfigs = {} } = {};\n\n if (modelModules) {\n ({ middlewares = {}, authConfigs = {} } = modelModules);\n }\n\n let basePathname = fileUpload?.baseRoute || \"/api/uploads/\";\n\n if (!basePathname.startsWith(\"/\")) basePathname = \"/\" + basePathname;\n if (!basePathname.endsWith(\"/\")) basePathname = basePathname + \"/\";\n\n router.use(\n basePathname,\n authService.handleAuthenticationControl(\"view\", authConfigs),\n authService.handleAccessControl(\"view\", \"file-upload\", authConfigs),\n express.static(\n path.resolve(process.cwd(), fileUpload?.baseUploadDir || \"uploads\"),\n deepmerge(\n {\n maxAge: \"1y\",\n etag: true,\n lastModified: true,\n dotfiles: \"ignore\",\n fallthrough: true,\n index: false,\n cacheControl: true,\n },\n fileUpload?.expressStaticOptions || {}\n )\n )\n );\n\n router.post(\n `${basePathname}:fileType`,\n authService.handleAuthenticationControl(\"create\", authConfigs),\n authService.handleAccessControl(\"create\", \"file-upload\", authConfigs),\n uploadFile\n );\n\n router.delete(\n `${basePathname}:fileType/:fileName`,\n authService.handleAuthenticationControl(\"delete\", authConfigs),\n authService.handleAccessControl(\"create\", \"file-upload\", authConfigs),\n deleteFile\n );\n\n return router;\n}\n"]}