import { ILogger, ModuleParams, validateRequest } from "@erp/core/api"; import { Application, NextFunction, Request, Response, Router } from "express"; import { Sequelize } from "sequelize"; import { CreateCustomerRequestSchema, CustomerListRequestSchema, DeleteCustomerByIdRequestSchema, GetCustomerByIdRequestSchema, } from "../../../common/dto"; import { getCustomerDependencies } from "../dependencies"; import { CreateCustomerController, DeleteCustomerController, GetCustomerController, ListCustomersController, } from "./controllers"; export const customersRouter = (params: ModuleParams) => { const { app, database, baseRoutePath, logger } = params as { app: Application; database: Sequelize; baseRoutePath: string; logger: ILogger; }; const router: Router = Router({ mergeParams: true }); const deps = getCustomerDependencies(params); // 🔐 Autenticación + Tenancy para TODO el router //router.use(/* authenticateJWT(), */ enforceTenant() /*checkTabContext*/); router.get( "/", //checkTabContext, validateRequest(CustomerListRequestSchema, "params"), (req: Request, res: Response, next: NextFunction) => { const useCase = deps.build.list(); const controller = new ListCustomersController(useCase /*, deps.presenters.list */); return controller.execute(req, res, next); } ); router.get( "/:id", //checkTabContext, validateRequest(GetCustomerByIdRequestSchema, "params"), (req: Request, res: Response, next: NextFunction) => { const useCase = deps.build.get(); const controller = new GetCustomerController(useCase); return controller.execute(req, res, next); } ); router.post( "/", //checkTabContext, validateRequest(CreateCustomerRequestSchema), (req: Request, res: Response, next: NextFunction) => { const useCase = deps.build.create(); const controller = new CreateCustomerController(useCase); return controller.execute(req, res, next); } ); /*routes.put( "/:customerId", validateAndParseBody(IUpdateCustomerRequestSchema), checkTabContext, (req: Request, res: Response, next: NextFunction) => { buildUpdateCustomerController().execute(req, res, next); } );*/ router.delete( "/:id", //checkTabContext, validateRequest(DeleteCustomerByIdRequestSchema, "params"), (req: Request, res: Response, next: NextFunction) => { const useCase = deps.build.delete(); const controller = new DeleteCustomerController(useCase); return controller.execute(req, res, next); } ); app.use(`${baseRoutePath}/customers`, router); };