import { RequestWithAuth, enforceTenant } from "@erp/auth/api"; import { ILogger, ModuleParams, validateRequest } from "@erp/core/api"; import { Application, NextFunction, Request, Response, Router } from "express"; import { Sequelize } from "sequelize"; import { CreateCustomerInvoiceRequestSchema, CustomerInvoiceListRequestSchema, DeleteCustomerInvoiceByIdRequestSchema, GetCustomerInvoiceByIdRequestSchema, } from "../../../common/dto"; import { getInvoiceDependencies } from "../dependencies"; import { CreateCustomerInvoiceController, DeleteCustomerInvoiceController, GetCustomerInvoiceController, ListCustomerInvoicesController, } from "./controllers"; export const customerInvoicesRouter = (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 = getInvoiceDependencies(params); // 🔐 Autenticación + Tenancy para TODO el router router.use(/* authenticateJWT(), */ enforceTenant() /*checkTabContext*/); router.get( "/", //checkTabContext, validateRequest(CustomerInvoiceListRequestSchema, "params"), async (req: RequestWithAuth, res: Response, next: NextFunction) => { const useCase = deps.build.list(); const controller = new ListCustomerInvoicesController(useCase /*, deps.presenters.list */); return controller.execute(req, res, next); } ); router.get( "/:id", //checkTabContext, validateRequest(GetCustomerInvoiceByIdRequestSchema, "params"), (req: Request, res: Response, next: NextFunction) => { const useCase = deps.build.get(); const controller = new GetCustomerInvoiceController(useCase); return controller.execute(req, res, next); } ); router.post( "/", //checkTabContext, validateRequest(CreateCustomerInvoiceRequestSchema), (req: Request, res: Response, next: NextFunction) => { const useCase = deps.build.create(); const controller = new CreateCustomerInvoiceController(useCase); return controller.execute(req, res, next); } ); /*routes.put( "/:customerInvoiceId", validateAndParseBody(IUpdateCustomerInvoiceRequestSchema), checkTabContext, (req: Request, res: Response, next: NextFunction) => { buildUpdateCustomerInvoiceController().execute(req, res, next); } );*/ router.delete( "/:id", //checkTabContext, validateRequest(DeleteCustomerInvoiceByIdRequestSchema, "params"), (req: Request, res: Response, next: NextFunction) => { const useCase = deps.build.delete(); const controller = new DeleteCustomerInvoiceController(useCase); return controller.execute(req, res, next); } ); app.use(`${baseRoutePath}/customer-invoices`, router); };