import { Body, Controller, Get, Post, Put, Query } from '@nestjs/common'; import { ApiBody, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { MultaService } from './multa.service'; import { IdUsuarioDto } from '../dto/id-usuario.dto'; import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto'; import { MultarDto } from './dto/input/multar.dto'; import { MultasDto } from './dto/input/multas.dto'; import { QuitarMultarDto } from './dto/input/quitar.dto'; import { IdUsuarioPaginaDto } from '../dto/id-usuario-pagina.dto'; import { MultasOutputDto } from './dto/output/multas.dto'; import { MultasEquipoOutputDto } from './dto/output/multas-equipo.dto'; import { MultasMinOutputDto } from './dto/output/multas-min.dto'; import { MultasUsuarioOutputDto } from './dto/output/multas-usuario.dto'; @Controller('multa') @ApiTags('multa') export class MultaController { constructor(private multaService: MultaService) {} @Post() @ApiOperation({ description: 'Endpoint utilizado para multar a un usuario.' }) @ApiBody({ description: 'Todas las vairales son obligatorias.', examples: { ejemplo: { value: { id_institucion_infraccion: 1, id_operador: 1, id_prestamo: 1, descripcion: '', }, }, }, }) multar(@Body() body: MultarDto) { return this.multaService.create( body.id_prestamo, body.id_operador, body.descripcion, null, body.id_institucion_infraccion, ); } @Serealize(MultasOutputDto) @Get() @ApiOperation({ description: 'Endpoint que retorna 25 multas dependiendo de la página en la que este el usuario y sus filtros.', }) @ApiQuery({ description: 'Página en la que se encuentra el usuario.', name: 'pagina', type: 'string', }) @ApiQuery({ description: 'Id de la institución.', name: 'id_institucion', type: 'string', required: false, }) @ApiQuery({ description: 'Usuario que se quiere usar como filtro.', name: 'usuario', type: 'string', required: false, }) multas(@Query() query: MultasDto) { return this.multaService.findAll(query); } @Serealize(MultasEquipoOutputDto) @Get('multas-equipo') @ApiOperation({ description: 'Endpoint que retorna todas las multas de un equipo.', }) @ApiQuery({ description: 'Id del equipo.', name: 'id_equipo', type: 'string', }) @ApiQuery({ description: 'Página en la que se encuentra el usuario', name: 'pagina', type: 'string', }) multasEquipo(@Query() query: IdEquipoPaginaDto) { return this.multaService.findAllByIdEquipo( parseInt(query.id_equipo), parseInt(query.pagina), ); } @Serealize(MultasUsuarioOutputDto) @Get('multas-usuario') @ApiOperation({ description: 'Endpoint que retorna todas las multas de un usuario .', }) @ApiQuery({ description: 'Id del usuario.', name: 'id_usuario', type: 'string', }) @ApiQuery({ description: 'Página en la que se encuentra el usuario', name: 'pagina', type: 'string', }) multasUsuario(@Query() query: IdUsuarioPaginaDto) { return this.multaService.findAllByIdUsuario( parseInt(query.id_usuario), parseInt(query.pagina), ); } @Serealize(MultasMinOutputDto) @Get('multas-usuario-activas') @ApiOperation({ description: 'Endpoint que retorna todas las multas de un usuario que esten activas.', }) @ApiQuery({ description: 'Id del usuario.', name: 'id_usuario', type: 'string', }) multasActivas(@Query() query: IdUsuarioDto) { return this.multaService.findMultasActivas(parseInt(query.id_usuario)); } @Put() @ApiOperation({ description: 'Endpoint que se encarga de quitar la multa de un alumno de cierta institución.', }) @ApiBody({ description: 'La variable id_institucion_usuario es obligatoria.', examples: { example: { value: { id_institucion_usuario: 1 } } }, }) quitarMulta(@Body() body: QuitarMultarDto) { return this.multaService.quitarMulta(body.id_institucion_usuario); } // @Get('reporte') // reporte() {} }