From 35d214f5df0078c1988fb9e855a85e31d433abf0 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Tue, 7 Jun 2022 20:26:07 -0500 Subject: [PATCH] equipo tipo entrada a espera de pruebas --- .../equipo-programa.controller.ts | 2 +- .../dto/equipo-tipo-entrada-create.dto.ts | 9 ++++ .../dto/equipo-tipo-entrada-delete.dto.ts | 6 +++ .../entity/equipo-tipo-entrada.entity.ts | 2 +- .../equipo-tipo-entrada.controller.ts | 34 +++++++++++- .../equipo-tipo-entrada.service.ts | 52 +++++++++++++++++-- 6 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 src/equipo-tipo-entrada/dto/equipo-tipo-entrada-create.dto.ts create mode 100644 src/equipo-tipo-entrada/dto/equipo-tipo-entrada-delete.dto.ts diff --git a/src/equipo-programa/equipo-programa.controller.ts b/src/equipo-programa/equipo-programa.controller.ts index 5229cde..ab67f6b 100644 --- a/src/equipo-programa/equipo-programa.controller.ts +++ b/src/equipo-programa/equipo-programa.controller.ts @@ -1,8 +1,8 @@ import { Body, Controller, Delete, Post } from '@nestjs/common'; +import { ApiBody, ApiOperation } from '@nestjs/swagger'; import { EquipoProgramaService } from './equipo-programa.service'; import { EquipoProgramaCreateDto } from './dto/equipo-programa-create.dto'; import { EquipoProgramaDeleteDto } from './dto/equipo-programa-delete.dto'; -import { ApiBody, ApiOperation } from '@nestjs/swagger'; @Controller('equipo-programa') export class EquipoProgramaController { constructor(private equipoProgramaService: EquipoProgramaService) {} diff --git a/src/equipo-tipo-entrada/dto/equipo-tipo-entrada-create.dto.ts b/src/equipo-tipo-entrada/dto/equipo-tipo-entrada-create.dto.ts new file mode 100644 index 0000000..2b73d95 --- /dev/null +++ b/src/equipo-tipo-entrada/dto/equipo-tipo-entrada-create.dto.ts @@ -0,0 +1,9 @@ +import { IsInt } from 'class-validator'; + +export class EquipoTipoEntradaCreateDto { + @IsInt() + id_equipo: number; + + @IsInt() + id_tipo_entrada: number; +} diff --git a/src/equipo-tipo-entrada/dto/equipo-tipo-entrada-delete.dto.ts b/src/equipo-tipo-entrada/dto/equipo-tipo-entrada-delete.dto.ts new file mode 100644 index 0000000..20d7437 --- /dev/null +++ b/src/equipo-tipo-entrada/dto/equipo-tipo-entrada-delete.dto.ts @@ -0,0 +1,6 @@ +import { IsInt } from 'class-validator'; + +export class EquipoTipoEntradaDeleteDto { + @IsInt() + id_equipo_tipo_entrada: number; +} diff --git a/src/equipo-tipo-entrada/entity/equipo-tipo-entrada.entity.ts b/src/equipo-tipo-entrada/entity/equipo-tipo-entrada.entity.ts index 2a7a049..f600960 100644 --- a/src/equipo-tipo-entrada/entity/equipo-tipo-entrada.entity.ts +++ b/src/equipo-tipo-entrada/entity/equipo-tipo-entrada.entity.ts @@ -5,7 +5,7 @@ import { TipoEntrada } from '../../institucion-tipo-entrada/entity/tipo-entrada. @Entity() export class EquipoTipoEntrada { @PrimaryGeneratedColumn() - id_equipo_entrada: number; + id_equipo_tipo_entrada: number; @ManyToOne(() => Equipo, (equipo) => equipo.tiposEntradas) @JoinColumn({ name: 'id_equipo' }) diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts index a8b21c3..26b278f 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts @@ -1,7 +1,39 @@ -import { Controller } from '@nestjs/common'; +import { Body, Controller, Delete, Post } from '@nestjs/common'; +import { ApiBody, ApiOperation } from '@nestjs/swagger'; import { EquipoTipoEntradaService } from './equipo-tipo-entrada.service'; +import { EquipoTipoEntradaCreateDto } from './dto/equipo-tipo-entrada-create.dto'; +import { EquipoTipoEntradaDeleteDto } from './dto/equipo-tipo-entrada-delete.dto'; @Controller('equipo-tipo-entrada') export class EquipoTipoEntradaController { constructor(private equipoTipoEntradaService: EquipoTipoEntradaService) {} + + @Post() + @ApiOperation({ + description: + 'Endpoint que crea una relación entre un equipo y un tipo de entrada.', + }) + @ApiBody({ + description: 'Ambas variables son obligatorios.', + examples: { ejemplo: { value: { id_equipo: 1, id_tipo_entrada: 1 } } }, + }) + create(@Body() body: EquipoTipoEntradaCreateDto) { + return this.equipoTipoEntradaService.create( + body.id_equipo, + body.id_tipo_entrada, + ); + } + + @Delete() + @ApiOperation({ + description: + 'Endpoint que elimina una relación entre un equipo y un tipo de entrada.', + }) + @ApiBody({ + description: 'La variable id_equipo_tipo_entrada es obligatoria.', + examples: { ejemplo: { value: { id_equipo_tipo_entrada: 1 } } }, + }) + delete(@Body() body: EquipoTipoEntradaDeleteDto) { + return this.equipoTipoEntradaService.delete(body.id_equipo_tipo_entrada); + } } diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts index 2584c9f..bcf0870 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts @@ -1,12 +1,58 @@ -import { Injectable } from '@nestjs/common'; +import { ConflictException, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; -import { EquipoTipoEntrada } from '../equipo-tipo-entrada/entity/equipo-tipo-entrada.entity'; +import { Equipo } from 'src/equipo/entity/equipo.entity'; +import { EquipoTipoEntrada } from './entity/equipo-tipo-entrada.entity'; +import { Programa } from '../institucion-programa/entity/programa.entity'; +import { EquipoService } from '../equipo/equipo.service'; +import { InstitucionTipoEntradaService } from '../institucion-tipo-entrada/institucion-tipo-entrada.service'; +import { TipoEntrada } from 'src/institucion-tipo-entrada/entity/tipo-entrada.entity'; @Injectable() export class EquipoTipoEntradaService { constructor( @InjectRepository(EquipoTipoEntrada) - private equipoTipoEntradaRepository: Repository, + private repository: Repository, + private equipoService: EquipoService, + private institucionTipoEntradaService: InstitucionTipoEntradaService, ) {} + + async create(id_equipo: number, id_tipo_entrada: number) { + const equipo = await this.equipoService.findById(id_equipo); + const tipoEntrada = + await this.institucionTipoEntradaService.findTipoEntradaById( + id_tipo_entrada, + ); + + return this.existeEquipoTipoEntrada(equipo, tipoEntrada).then(() => + this.repository.save(this.repository.create({ equipo, tipoEntrada })), + ); + } + + delete(id_equipo_tipo_entrada: number) { + return this.findById(id_equipo_tipo_entrada).then((equipoTipoEntrada) => + this.repository.remove(equipoTipoEntrada), + ); + } + + existeEquipoTipoEntrada(equipo: Equipo, tipoEntrada: TipoEntrada) { + return this.repository + .findOne({ equipo, tipoEntrada }) + .then((equipoTipoEntrada) => { + if (equipoTipoEntrada) + throw new ConflictException( + 'Ya existe un equipo programa con este equipo y este tipo entrada.', + ); + }); + } + + findById(id_equipo_tipo_entrada: number) { + return this.repository + .findOne({ id_equipo_tipo_entrada }) + .then((equipoTipoEntrada) => { + if (!equipoTipoEntrada) + throw new ConflictException('No existe este equipo tipo entrada.'); + return equipoTipoEntrada; + }); + } }