diff --git a/src/institucion-tipo-entrada/dto/institucion-tipo-entrada-update.dto.ts b/src/institucion-tipo-entrada/dto/institucion-tipo-entrada-update.dto.ts new file mode 100644 index 0000000..2d9cefc --- /dev/null +++ b/src/institucion-tipo-entrada/dto/institucion-tipo-entrada-update.dto.ts @@ -0,0 +1,9 @@ +import { IsBoolean, IsInt } from 'class-validator'; + +export class InstitucionTipoEntradaUpdateDto { + @IsInt() + id_institucion_tipo_entrada: number; + + @IsBoolean() + mostrar: boolean; +} diff --git a/src/institucion-tipo-entrada/entity/institucion-tipo-entrada.entity.ts b/src/institucion-tipo-entrada/entity/institucion-tipo-entrada.entity.ts index 6b6fcd3..f1ce279 100644 --- a/src/institucion-tipo-entrada/entity/institucion-tipo-entrada.entity.ts +++ b/src/institucion-tipo-entrada/entity/institucion-tipo-entrada.entity.ts @@ -11,7 +11,7 @@ import { TipoEntrada } from './tipo-entrada.entity'; @Entity() export class InstitucionTipoEntrada { @PrimaryGeneratedColumn() - id_institucion_carrera: number; + id_institucion_tipo_entrada: number; @Column({ type: Boolean, nullable: false, default: false }) mostrar: boolean; diff --git a/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts b/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts index e5bdc81..9e647d9 100644 --- a/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts +++ b/src/institucion-tipo-entrada/institucion-tipo-entrada.controller.ts @@ -1,25 +1,43 @@ -import { Body, Controller, Get, Post, Query } from '@nestjs/common'; -import { ApiTags } from '@nestjs/swagger'; +import { Body, Controller, Get, Post, Put, Query } from '@nestjs/common'; +import { ApiBody, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger'; import { InstitucionTipoEntradaService } from './institucion-tipo-entrada.service'; import { IdInstitucionDto } from 'src/dto/id-institucion.dto'; import { InstitucionTipoEntradaCreateDto } from './dto/institucion-tipo-entrada-create.dto'; +import { InstitucionTipoEntradaUpdateDto } from './dto/institucion-tipo-entrada-update.dto'; @Controller('institucion-tipo-entrada') -// @ApiTags('institucion-tipo-entrada') +@ApiTags('institucion-tipo-entrada') export class InstitucionTipoEntradaController { constructor(private tipoEntradaService: InstitucionTipoEntradaService) {} @Post() + @ApiOperation({ description: 'Endpoint que crea un tipo de entrada.' }) + @ApiBody({ + description: 'Es obligatorio mandar la variable tipo_entrada.', + examples: { ejemplo: { value: { tipo_entrada: '' } } }, + }) create(@Body() body: InstitucionTipoEntradaCreateDto) { return this.tipoEntradaService.create(body.tipo_entrada); } @Get() + @ApiOperation({ + description: 'Endpoint que retorna todos los tipos de entrada.', + }) get() { return this.tipoEntradaService.findAll(); } @Get('tipos-entrada') + @ApiOperation({ + description: + 'Endpoint que retorna todos los tipos de entradas de una institución.', + }) + @ApiQuery({ + description: 'Id de la institución', + name: 'id_institucion', + type: 'string', + }) tiposEntrada(@Query() query: IdInstitucionDto) { return this.tipoEntradaService.findAllByIdInstitucion( parseInt(query.id_institucion), @@ -27,9 +45,33 @@ export class InstitucionTipoEntradaController { } @Get('tipos-entrada-mostrar') + @ApiOperation({ + description: + 'Endpoint que retorna todos los tipos de entrada de una institución que tengan el campo mostrar en true.', + }) + @ApiQuery({ + description: 'Id de la institución', + name: 'id_institucion', + type: 'string', + }) tipoEntradaMostrar(@Query() query: IdInstitucionDto) { return this.tipoEntradaService.findAllByIdInstitucionMostrar( parseInt(query.id_institucion), ); } + + @Put() + @ApiOperation({ + description: + 'Endpoint que actualiza la información de el tipo de entrada de una institución', + }) + @ApiBody({ + description: 'Ambas variables son obligatorias.', + examples: { + ejemplo: { value: { id_institucion_tipo_entrada: 130, mostrar: true } }, + }, + }) + update(@Body() body: InstitucionTipoEntradaUpdateDto) { + return this.tipoEntradaService.update(body); + } } diff --git a/src/institucion-tipo-entrada/institucion-tipo-entrada.service.ts b/src/institucion-tipo-entrada/institucion-tipo-entrada.service.ts index 7d62ddf..f320bb7 100644 --- a/src/institucion-tipo-entrada/institucion-tipo-entrada.service.ts +++ b/src/institucion-tipo-entrada/institucion-tipo-entrada.service.ts @@ -1,4 +1,8 @@ -import { ConflictException, Injectable } from '@nestjs/common'; +import { + ConflictException, + Injectable, + NotFoundException, +} from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { InstitucionTipoEntrada } from './entity/institucion-tipo-entrada.entity'; @@ -51,4 +55,32 @@ export class InstitucionTipoEntradaService { findAllByIdInstitucionMostrar(id_institucion: number) { return this.findAllByIdInstitucion(id_institucion, true); } + + findById(id_institucion_tipo_entrada: number) { + return this.repositoryInstitucionTipoEntrada + .findOne({ + id_institucion_tipo_entrada, + }) + .then((institucionTipoEntrada) => { + if (!institucionTipoEntrada) + throw new NotFoundException( + 'No existe esta institucion tipo entrada.', + ); + return institucionTipoEntrada; + }); + } + + update(attrs: Partial) { + return this.findById(attrs.id_institucion_tipo_entrada) + .then((institucionTipoEntrada) => { + Object.assign(institucionTipoEntrada, attrs); + return this.repositoryInstitucionTipoEntrada.save( + institucionTipoEntrada, + ); + }) + .then((_) => ({ + message: + 'Se actualizó correctamente la información de la institución tipo entrada.', + })); + } }