From ad767c7a2ea8263e4ce665bb9402ac0142a45491 Mon Sep 17 00:00:00 2001 From: Vins Date: Thu, 18 Apr 2024 14:40:44 +0200 Subject: [PATCH] RulesGroupsController --- package.json | 2 +- src/app/api/admin/RulesGroupsController.ts | 49 +++++++++++++++++++ src/app/index.ts | 3 ++ .../repositories/RulesGroupsRepository.ts | 27 ++++++++++ .../RulesGroupsService/RulesGroupsService.ts | 20 ++++++++ 5 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 src/app/api/admin/RulesGroupsController.ts create mode 100644 src/common/repositories/RulesGroupsRepository.ts create mode 100644 src/services/admin/RulesGroupsService/RulesGroupsService.ts diff --git a/package.json b/package.json index 4f214bbb..5afa8195 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "file-type-checker": "^1.0.8", "fp-ts": "^2.16.1", "jsonwebtoken": "^9.0.0", - "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.130", + "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.132", "module-alias": "^2.2.2", "monocle-ts": "^2.3.13", "multer": "^1.4.5-lts.1", diff --git a/src/app/api/admin/RulesGroupsController.ts b/src/app/api/admin/RulesGroupsController.ts new file mode 100644 index 00000000..0d691fe2 --- /dev/null +++ b/src/app/api/admin/RulesGroupsController.ts @@ -0,0 +1,49 @@ +import { Controller, Get} from "@ControllerPattern/index"; +import { Response, Request } from "express"; +import ApiController from "@Common/system/controller-pattern/ApiController"; +import { Service } from "typedi"; +import { Prisma } from "@prisma/client"; +import { RulesGroup } from "le-coffre-resources/dist/Admin"; +import roleHandler from "@App/middlewares/RolesHandler"; +import authHandler from "@App/middlewares/AuthHandler"; +import RulesGroupsService from "@Services/admin/RulesGroupsService/RulesGroupsService"; + +@Controller() +@Service() +export default class RulesRoupsController extends ApiController { + constructor(private rulesGroupsService: RulesGroupsService) { + super(); + } + + /** + * @description Get all subscriptions + */ + @Get("/api/v1/admin/rules-groups", [authHandler, roleHandler] ) + protected async get(req: Request, response: Response) { + try { + //get query + let query: Prisma.RulesGroupsFindManyArgs = {}; + if (req.query["q"]) { + query = JSON.parse(req.query["q"] as string); + if (query.where?.uid) { + this.httpBadRequest(response, "You can't filter by uid"); + return; + } + } + + //call service to get prisma entity + const rulesGroupsEntities = await this.rulesGroupsService.get(query); + + //Hydrate ressource with prisma entity + const rulesGroups = RulesGroup.hydrateArray(rulesGroupsEntities, { strategy: "excludeAll" }); + + //success + this.httpSuccess(response, rulesGroups); + } catch (error) { + this.httpInternalError(response, error); + return; + } + } + + +} diff --git a/src/app/index.ts b/src/app/index.ts index 174b9abd..1590b6f1 100644 --- a/src/app/index.ts +++ b/src/app/index.ts @@ -52,6 +52,8 @@ import IdNotOfficeController from "./api/idnot/OfficeController"; import SubscriptionsController from "./api/admin/SubscriptionsController"; import StripeController from "./api/admin/StripeController"; import StripeWebhooks from "@Common/webhooks/stripeWebhooks"; +import RulesGroupsController from "./api/admin/RulesGroupsController"; + /** * @description This allow to declare all controllers used in the application */ @@ -111,5 +113,6 @@ export default { Container.get(SubscriptionsController); Container.get(StripeController); Container.get(StripeWebhooks); + Container.get(RulesGroupsController); }, }; diff --git a/src/common/repositories/RulesGroupsRepository.ts b/src/common/repositories/RulesGroupsRepository.ts new file mode 100644 index 00000000..6c263cb1 --- /dev/null +++ b/src/common/repositories/RulesGroupsRepository.ts @@ -0,0 +1,27 @@ +import Database from "@Common/databases/database"; +import BaseRepository from "@Repositories/BaseRepository"; +import { Service } from "typedi"; +import { Prisma } from "@prisma/client"; + +@Service() +export default class RulesGroupsRepository extends BaseRepository { + constructor(private database: Database) { + super(); + } + protected get model() { + return this.database.getClient().rulesGroups; + } + protected get instanceDb() { + return this.database.getClient(); + } + + /** + * @description : Find many subscriptions + */ + public async findMany(query: Prisma.RulesGroupsFindManyArgs) { + query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); + if (!query.include) return this.model.findMany({ ...query }); + return this.model.findMany({ ...query }); + } + +} diff --git a/src/services/admin/RulesGroupsService/RulesGroupsService.ts b/src/services/admin/RulesGroupsService/RulesGroupsService.ts new file mode 100644 index 00000000..64dd738c --- /dev/null +++ b/src/services/admin/RulesGroupsService/RulesGroupsService.ts @@ -0,0 +1,20 @@ +import BaseService from "@Services/BaseService"; +import "reflect-metadata"; +import { Service } from "typedi"; +import { Prisma } from "@prisma/client"; +import RulesGroupsRepository from "@Repositories/RulesGroupsRepository"; + +@Service() +export default class RulesGroupsService extends BaseService { + constructor(private rulesGroupsRepository: RulesGroupsRepository) { + super(); + } + + /** + * @description : Get all subscriptions + * @throws {Error} If subscriptions cannot be get + */ + public get(query: Prisma.RulesGroupsFindManyArgs) { + return this.rulesGroupsRepository.findMany(query); + } +}