33 lines
1.5 KiB
TypeScript
33 lines
1.5 KiB
TypeScript
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 };
|