import { Body, Controller, Get, Post, Put, Query, 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 { ModuloService } from './modulo.service'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { CreateModuloDto } from './dto/input/create.dto'; import { ModuloDto } from './dto/input/modulo.dto'; import { UpdateModuloDto } from './dto/input/update.dto'; import { ModuloOutputDto } from './dto/output/modulo.dto'; @Controller('modulo') @ApiTags('modulo') export class ModuloController { constructor(private moduloService: ModuloService) {} @Post() @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que crea un módulo.' }) @ApiBearerAuth('jwt') @ApiBody({ description: 'Ambas variables son obligatorias.', examples: { ejemplo: { value: { id_institucion: 200, modulo: '' } } }, }) create(@Body() body: CreateModuloDto) { return this.moduloService.create(body.id_institucion, body.modulo); } @Serealize(ModuloOutputDto) @Get('modulo') @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que retorna la información de un módulo.', }) @ApiBearerAuth('jwt') @ApiQuery({ description: 'Id del modulo.', name: 'id_modulo', type: 'string', }) modulo(@Query() query: ModuloDto) { return this.moduloService.findById(parseInt(query.id_modulo)); } @Serealize(ModuloOutputDto) @Get('modulos') @ApiOperation({ description: 'Endpoint que retorna todos los módulos de una institución.', }) @ApiQuery({ description: 'Id de la institución.', name: 'id_institucion', type: 'string', }) modulos(@Query() query: IdInstitucionDto) { return this.moduloService.findAllByIdInstitucion( parseInt(query.id_institucion), ); } @Put() @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que actualiza la información de un módulo.', }) @ApiBearerAuth('jwt') @ApiBody({ description: 'Todas las variables a excepción de id_modulo son opcionales.', examples: { ejemplo: { value: { id_modulo: 1, _activo: true, _modulo: '' } }, }, }) update(@Body() body: UpdateModuloDto) { return this.moduloService.update(body); } }