Files
cargaMasiva_api/src/excel/excel.documentation.ts
T

190 lines
4.8 KiB
TypeScript

import { applyDecorators } from '@nestjs/common';
import {
ApiTags,
ApiOperation,
ApiConsumes,
ApiBody,
ApiResponse,
ApiBearerAuth,
ApiQuery,
} from '@nestjs/swagger';
export class ExcelDocumentation {
static getMovimientos() {
return applyDecorators(
ApiBearerAuth(),
ApiOperation({
summary: 'Obtener movimientos',
description:
'Obtiene un listado paginado de movimientos según el origen del usuario autenticado.',
}),
ApiQuery({
name: 'page',
required: false,
type: Number,
example: 1,
description: 'Número de página',
}),
ApiQuery({
name: 'limit',
required: false,
type: Number,
example: 10,
description: 'Cantidad de registros por página',
}),
ApiResponse({
status: 200,
description: 'Listado de movimientos obtenido correctamente',
}),
ApiResponse({
status: 401,
description: 'No autorizado',
}),
);
}
static verifyExcel() {
return applyDecorators(
ApiTags('Excel'),
ApiOperation({
summary: 'Verificar archivo Excel',
description:
'Valida duplicados, filas en blanco y formato básico de los datos sin realizar carga en la base.',
}),
ApiConsumes('multipart/form-data'),
ApiBody({
schema: {
type: 'object',
properties: {
file: {
type: 'string',
format: 'binary',
description: 'Archivo Excel (.xlsx) con usuarios a validar',
},
},
},
}),
ApiResponse({
status: 200,
description: 'Resultado de la validación',
schema: {
type: 'object',
properties: {
valid: { type: 'boolean', example: false },
errors: {
type: 'array',
items: { type: 'string' },
example: [
'Fila 2: cuenta duplicada "42515101".',
'Fila 3: fecha de nacimiento inválida "1988051".',
],
},
},
},
}),
ApiResponse({
status: 400,
description: 'No se recibió archivo o formato inválido.',
}),
);
}
/**
* Decorators Swagger para el endpoint POST /excel/load
*/
static loadExcel() {
return applyDecorators(
ApiTags('Excel'),
ApiOperation({
summary: 'Cargar archivo Excel',
description:
'Valida y persiste los datos en la base de datos. Retorna el número de registros insertados.',
}),
ApiConsumes('multipart/form-data'),
ApiBody({
schema: {
type: 'object',
properties: {
file: {
type: 'string',
format: 'binary',
description: 'Archivo Excel (.xlsx) con usuarios a cargar',
},
},
},
}),
ApiResponse({
status: 201,
description: 'Usuarios insertados correctamente',
schema: {
type: 'object',
properties: {
inserted: { type: 'number', example: 3 },
},
},
}),
ApiResponse({
status: 400,
description: 'Errores de validación o carga',
schema: {
type: 'object',
properties: {
errors: {
type: 'array',
items: { type: 'string' },
example: ['Fila 5: rfc contiene caracteres inválidos.'],
},
},
},
}),
);
}
static downloadExcel() {
return applyDecorators(
ApiTags('Excel'),
//ApiBearerAuth('bearer'),
ApiOperation({
summary: 'Descargar usuarios',
description:
'Exporta todos los usuarios en un archivo TSV (o CSV) y registra el movimiento.',
}),
ApiResponse({
status: 200,
description: 'TSV generado correctamente',
content: {
'text/tab-separated-values': {
schema: {
type: 'string',
example: 'num_cuenta\\tnombre\\t...\\n...',
},
},
},
}),
ApiResponse({ status: 401, description: 'No autorizado' }),
ApiResponse({ status: 500, description: 'Error al generar descarga' }),
);
}
static servAct() {
return applyDecorators(
ApiTags('Excel'),
ApiOperation({
summary: 'Obtener servicios activos',
description:
'Devuelve la lista de servicios activos registrados en el sistema',
}),
ApiResponse({
status: 200,
description: 'Lista de servicios activos',
// type: ServActivoDto, // si tienes DTO
// isArray: true,
}),
ApiResponse({
status: 401,
description: 'No autorizado',
}),
);
}
}