import { Router, type IRouter } from 'express'; import express from 'express'; import { authenticate } from '../middlewares/auth.middleware.js'; import { tenantMiddleware } from '../middlewares/tenant.middleware.js'; import { checkPlanLimits, checkCfdiLimit } from '../middlewares/plan-limits.middleware.js'; import { strictLimit } from '../middlewares/rate-limit.middleware.js'; import * as cfdiController from '../controllers/cfdi.controller.js'; const router: IRouter = Router(); router.use(authenticate); router.use(tenantMiddleware); router.use(checkPlanLimits); router.get('/', cfdiController.getCfdis); router.get('/resumen', cfdiController.getResumen); router.get('/emisores', cfdiController.getEmisores); router.get('/receptores', cfdiController.getReceptores); router.get('/drill-down', cfdiController.drillDown); // Listado de conceptos cross-CFDI (pestaña Conceptos en /cfdi). // Debe registrarse antes que /:id para que Express no lo trate como id. router.get('/conceptos', cfdiController.listConceptos); router.get('/:id', cfdiController.getCfdiById); router.get('/:id/conceptos', cfdiController.getConceptos); router.get('/:id/xml', cfdiController.getXml); router.post('/download-xmls', cfdiController.downloadXmlsZip); router.post('/', checkCfdiLimit, cfdiController.createCfdi); // Bulk upload: 10/hora — procesa hasta 50MB, pesado en parseo + inserts router.post('/bulk', strictLimit, express.json({ limit: '50mb' }), checkCfdiLimit, cfdiController.createManyCfdis); router.delete('/:id', cfdiController.deleteCfdi); export { router as cfdiRoutes };