diff --git a/apps/api/src/controllers/cfdi.controller.ts b/apps/api/src/controllers/cfdi.controller.ts index 79f7cc3..d8872d2 100644 --- a/apps/api/src/controllers/cfdi.controller.ts +++ b/apps/api/src/controllers/cfdi.controller.ts @@ -45,6 +45,26 @@ export async function getCfdiById(req: Request, res: Response, next: NextFunctio } } +export async function getXml(req: Request, res: Response, next: NextFunction) { + try { + if (!req.tenantSchema) { + return next(new AppError(400, 'Schema no configurado')); + } + + const xml = await cfdiService.getXmlById(req.tenantSchema, String(req.params.id)); + + if (!xml) { + return next(new AppError(404, 'XML no encontrado para este CFDI')); + } + + res.set('Content-Type', 'application/xml'); + res.set('Content-Disposition', `attachment; filename="cfdi-${req.params.id}.xml"`); + res.send(xml); + } catch (error) { + next(error); + } +} + export async function getResumen(req: Request, res: Response, next: NextFunction) { try { if (!req.tenantSchema) { diff --git a/apps/api/src/routes/cfdi.routes.ts b/apps/api/src/routes/cfdi.routes.ts index 59722f5..703f0e7 100644 --- a/apps/api/src/routes/cfdi.routes.ts +++ b/apps/api/src/routes/cfdi.routes.ts @@ -11,6 +11,7 @@ router.use(tenantMiddleware); router.get('/', cfdiController.getCfdis); router.get('/resumen', cfdiController.getResumen); router.get('/:id', cfdiController.getCfdiById); +router.get('/:id/xml', cfdiController.getXml); router.post('/', cfdiController.createCfdi); router.post('/bulk', cfdiController.createManyCfdis); router.delete('/:id', cfdiController.deleteCfdi);