From cfa46171ce0ee6b0ddab80871c70ed21f25c7473 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 16 Jun 2025 14:14:23 -0600 Subject: [PATCH] origen desconocido, falta registrar los origenes y relacionarlos --- src/excel/excel.controller.ts | 89 +++++++++++------------------------ 1 file changed, 28 insertions(+), 61 deletions(-) diff --git a/src/excel/excel.controller.ts b/src/excel/excel.controller.ts index a4d0980..152593e 100644 --- a/src/excel/excel.controller.ts +++ b/src/excel/excel.controller.ts @@ -1,27 +1,19 @@ // src/excel/excel.controller.ts -import { - Controller, - Post, - UploadedFile, - UseInterceptors, - BadRequestException, - Request, - Get, - Res, - HttpStatus, -} from '@nestjs/common'; - +import { Controller, Post, Get, UseGuards, Request, Res, UploadedFile, UseInterceptors, HttpStatus } from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; +import { ApiBearerAuth } from '@nestjs/swagger'; import { FileInterceptor } from '@nestjs/platform-express'; -import { ExcelService } from './excel.service'; -import { ExcelDocumentation } from './excel.documentation'; -import { MovimientoService } from 'src/movimiento/movimiento.service'; import { Response } from 'express'; +import { ExcelDocumentation } from './excel.documentation'; +import { ExcelService } from './excel.service'; +import { MovimientoService } from '../movimiento/movimiento.service'; +@UseGuards(AuthGuard('jwt')) +@ApiBearerAuth('bearer') @Controller('excel') export class ExcelController { constructor( private readonly excelService: ExcelService, - private readonly movimientoService: MovimientoService, ) {} @@ -29,18 +21,14 @@ export class ExcelController { @UseInterceptors(FileInterceptor('file')) @ExcelDocumentation.verifyExcel() async verifyExcel(@UploadedFile() file: Express.Multer.File, @Request() req) { - if (!file) throw new BadRequestException('Se requiere un archivo .xlsx'); - const userId = req.user.userId; - + const userId: number = req.user.userId; // ahora sí existe const errors = await this.excelService.validateFile(file.buffer); - await this.movimientoService.log( userId, 'VERIFY', errors.length ? 'FAILED' : 'SUCCESS', - errors.join('; '), + errors.join('; ') ); - return { valid: errors.length === 0, errors }; } @@ -48,77 +36,56 @@ export class ExcelController { @UseInterceptors(FileInterceptor('file')) @ExcelDocumentation.loadExcel() async loadExcel(@UploadedFile() file: Express.Multer.File, @Request() req) { - const userId = req.user.userId; + const userId: number = req.user.userId; try { - const { inserted } = await this.excelService.loadFile(file.buffer); + const result = await this.excelService.loadFile(file.buffer); await this.movimientoService.log( userId, 'LOAD', 'SUCCESS', undefined, - `inserted=${inserted}`, + `inserted=${result.inserted}` ); - return { inserted }; + return result; } catch (err) { - await this.movimientoService.log(userId, 'LOAD', 'FAILED', err.message); + await this.movimientoService.log( + userId, + 'LOAD', + 'FAILED', + err.message + ); throw err; } } - - @ExcelDocumentation.downloadExcel() // <-- decorador correcto @Get('download') + @ExcelDocumentation.downloadExcel() async downloadData(@Request() req, @Res() res: Response) { - const userId: number = req.user.userId; // asegúrate de que sea primitivo - + const userId: number = req.user.userId; try { - // 1) Genera los datos - const data = await this.excelService.generateCsv(); - - // 2) Log SUCCESS + const csv = await this.excelService.generateCsv(); await this.movimientoService.log( - userId, // <-- solo el valor, no userId() + userId, 'DOWNLOAD', 'SUCCESS', undefined, - `size=${data.length}`, + `size=${csv.length}` ); - - // 3) Devuelve la respuesta return res - .status(HttpStatus.OK) // <-- HttpStatus importado + .status(HttpStatus.OK) .header('Content-Type', 'text/tab-separated-values') .header('Content-Disposition', 'attachment; filename="usuarios.tsv"') - .send(data); + .send(csv); } catch (err) { - // 4) Log FAILED await this.movimientoService.log( userId, 'DOWNLOAD', 'FAILED', - err.message, + err.message ); - - // 5) Responde el error return res .status(HttpStatus.INTERNAL_SERVER_ERROR) .json({ statusCode: 500, message: 'Error generando descarga.' }); } } - - - - - - - - - - - - - - - - }