import { Body, Controller, Get, Post, Put, Query, Request, UseGuards, } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiBody, ApiOperation, ApiQuery, ApiTags, } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { MultaService } from './multa.service'; import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { Usuario } from '../usuario/entity/usuario.entity'; import { IdUsuarioDto } from '../dto/input/id-usuario.dto'; import { IdEquipoPaginaDto } from '../dto/input/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/input/id-usuario-pagina.dto'; import { MessageOutputDto } from '../dto/output/message.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, private validarUsuarioService: ValidarUsuarioService, ) {} @Serealize(MessageOutputDto) @Post() @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint utilizado para multar a un usuario.' }) @ApiBearerAuth('jwt') @ApiBody({ description: 'Todas las vairales son obligatorias.', examples: { ejemplo: { value: { id_institucion_infraccion: 1, id_prestamo: 1, descripcion: '', }, }, }, }) multar(@Request() req, @Body() body: MultarDto) { const operador: Operador = req.user.operador; this.validarUsuarioService.validarAdminOperador(operador); return this.multaService.create( body.id_prestamo, operador, body.descripcion, null, body.id_institucion_infraccion, ); } @Serealize(MultasOutputDto) @Get() @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que retorna 25 multas dependiendo de la página en la que este el usuario y sus filtros.', }) @ApiBearerAuth('jwt') @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(@Request() req, @Query() query: MultasDto) { const operador: Operador = req.user.operador; this.validarUsuarioService.validarAdminOperador(operador); return this.multaService.findFullInfoMultaAll(query); } @Serealize(MultasEquipoOutputDto) @Get('multas-equipo') @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que retorna todas las multas de un equipo.', }) @ApiBearerAuth('jwt') @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(@Request() req, @Query() query: IdEquipoPaginaDto) { const operador: Operador = req.user.operador; this.validarUsuarioService.validarAdminOperador(operador); return this.multaService.findAllByIdEquipo( parseInt(query.id_equipo), parseInt(query.pagina), ); } @Serealize(MultasUsuarioOutputDto) @Get('multas-usuario') @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que retorna todas las multas de un usuario .', }) @ApiBearerAuth('jwt') @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(@Request() req, @Query() query: IdUsuarioPaginaDto) { const operador: Operador = req.user.operador; this.validarUsuarioService.validarAdminOperador(operador); return this.multaService.findAllByIdUsuario( parseInt(query.id_usuario), parseInt(query.pagina), ); } @Serealize(MultasMinOutputDto) @Get('multas-usuario-activas') @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que retorna todas las multas de un usuario que esten activas.', }) @ApiBearerAuth('jwt') @ApiQuery({ description: 'Id del usuario.', name: 'id_usuario', type: 'string', }) multasActivas(@Request() req, @Query() query: IdUsuarioDto) { const usuario: Usuario = req.user.usuario; this.validarUsuarioService.validarUsuario(usuario); return this.multaService.findMultasActivas(parseInt(query.id_usuario)); } @Serealize(MessageOutputDto) @Put() @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que se encarga de quitar la multa de un alumno de cierta institución.', }) @ApiBearerAuth('jwt') @ApiBody({ description: 'La variable id_institucion_usuario es obligatoria.', examples: { example: { value: { id_institucion_usuario: 1 } } }, }) quitarMulta(@Request() req, @Body() body: QuitarMultarDto) { const admin: Operador = req.user.operador; this.validarUsuarioService.validarAdmin(admin); return this.multaService.quitarMulta(body.id_institucion_usuario); } // @Get('reporte') // @UseGuards(AuthGuard('jwt')) // @ApiBearerAuth('jwt') // reporte() {} }