import { Body, Controller, Get, 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 { PasscodeService } from './passcode.service'; import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Modulo } from '../modulo/entity/modulo.entity'; import { Operador } from '../operador/entity/operador.entity'; import { DevolucionDto } from './dto/input/devolucion.dto'; import { NotificacionDto } from './dto/input/notificacion.dto'; import { PrestamoDto } from './dto/input/prestamo.dto'; import { CodeOutputDto } from './dto/output/code.dto'; import { PasscodeOutputDto } from './dto/output/passcode.dto'; @Controller('passcode') @ApiTags('passcode') export class PasscodeController { constructor( private passcodeService: PasscodeService, private validarUsuarioService: ValidarUsuarioService, ) {} @Serealize(CodeOutputDto) @Put('devolucion') @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Regresar equipo de cómputo al locker.' }) @ApiBearerAuth('jwt') @ApiBody({ description: 'Variables que necesita el endpoint.', examples: { ejemplo: { value: { passcode: '123456789012' } } }, }) devolucion(@Request() req, @Body() body: DevolucionDto) { const operador: Operador = req.user.operador; const modulo: Modulo = req.user.modulo; this.validarUsuarioService.validarSoloOperador(operador); return this.passcodeService.devolverEquipo(operador, modulo, body.passcode); } @Serealize(CodeOutputDto) @Put('notificacion') @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Entregar equipo de computo de un lokcer.' }) @ApiBearerAuth('jwt') @ApiBody({ description: 'Variables que necesita el endpoint.', examples: { ejemplo: { value: { passcode: "123456789012", estatus: 1 } } }, }) autoprestamo(@Request() req, @Body() body: NotificacionDto) { const operador: Operador = req.user.operador; const modulo: Modulo = req.user.modulo; this.validarUsuarioService.validarSoloOperador(operador); return this.passcodeService.entregarEquipo( operador, modulo, body.passcode, body.estatus, ); } @Serealize(PasscodeOutputDto) @Get('prestamo') @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Verificar la existencia y validez del passcode.', }) @ApiBearerAuth('jwt') @ApiQuery({ description: 'Id del lokcer. Un locker hace referencia a un carrito.', name: 'id_locker', type: 'string', }) @ApiQuery({ description: 'Passcode del préstamo', name: 'passcode', type: 'string', }) prestamo(@Request() req, @Query() query: PrestamoDto) { const operador: Operador = req.user.operador; this.validarUsuarioService.validarSoloOperador(operador); return this.passcodeService.findByPasscode( query.passcode, false, query.id_locker, ); } }