diff --git a/src/equipo-programa/dto/equipo-programa-create.dto.ts b/src/equipo-programa/dto/equipo-programa-create.dto.ts new file mode 100644 index 0000000..3c49546 --- /dev/null +++ b/src/equipo-programa/dto/equipo-programa-create.dto.ts @@ -0,0 +1,9 @@ +import { IsInt } from 'class-validator'; + +export class EquipoProgramaCreateDto { + @IsInt() + id_equipo: number; + + @IsInt() + id_programa: number; +} diff --git a/src/equipo-programa/dto/equipo-programa-delete.dto.ts b/src/equipo-programa/dto/equipo-programa-delete.dto.ts new file mode 100644 index 0000000..30bfe38 --- /dev/null +++ b/src/equipo-programa/dto/equipo-programa-delete.dto.ts @@ -0,0 +1,6 @@ +import { IsInt } from 'class-validator'; + +export class EquipoProgramaDeleteDto { + @IsInt() + id_equipo_programa: number; +} diff --git a/src/equipo-programa/equipo-programa.controller.ts b/src/equipo-programa/equipo-programa.controller.ts index 292f2aa..0847b93 100644 --- a/src/equipo-programa/equipo-programa.controller.ts +++ b/src/equipo-programa/equipo-programa.controller.ts @@ -1,4 +1,18 @@ -import { Controller } from '@nestjs/common'; - +import { Body, Controller, Delete, Post } from '@nestjs/common'; +import { EquipoProgramaService } from './equipo-programa.service'; +import { EquipoProgramaCreateDto } from './dto/equipo-programa-create.dto'; +import { EquipoProgramaDeleteDto } from './dto/equipo-programa-delete.dto'; @Controller('equipo-programa') -export class EquipoProgramaController {} +export class EquipoProgramaController { + constructor(private equipoProgramaService: EquipoProgramaService) {} + + @Post() + create(@Body() body: EquipoProgramaCreateDto) { + return this.equipoProgramaService.create(body.id_equipo, body.id_programa); + } + + @Delete() + delete(@Body() body: EquipoProgramaDeleteDto) { + return this.equipoProgramaService.delete(body.id_equipo_programa); + } +} diff --git a/src/equipo-programa/equipo-programa.module.ts b/src/equipo-programa/equipo-programa.module.ts index 458dbb3..58aaf42 100644 --- a/src/equipo-programa/equipo-programa.module.ts +++ b/src/equipo-programa/equipo-programa.module.ts @@ -3,9 +3,15 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { EquipoProgramaController } from './equipo-programa.controller'; import { EquipoProgramaService } from './equipo-programa.service'; import { EquipoPrograma } from '../equipo-programa/entity/equipo-programa.entity'; +import { InstitucionProgramaModule } from '../institucion-programa/institucion-programa.module'; +import { EquipoModule } from '../equipo/equipo.module'; @Module({ - imports: [TypeOrmModule.forFeature([EquipoPrograma])], + imports: [ + EquipoModule, + InstitucionProgramaModule, + TypeOrmModule.forFeature([EquipoPrograma]), + ], controllers: [EquipoProgramaController], providers: [EquipoProgramaService], exports: [EquipoProgramaService], diff --git a/src/equipo-programa/equipo-programa.service.ts b/src/equipo-programa/equipo-programa.service.ts index f701900..7dc76b5 100644 --- a/src/equipo-programa/equipo-programa.service.ts +++ b/src/equipo-programa/equipo-programa.service.ts @@ -1,12 +1,56 @@ -import { Injectable } from '@nestjs/common'; +import { ConflictException, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; +import { Equipo } from 'src/equipo/entity/equipo.entity'; import { EquipoPrograma } from './entity/equipo-programa.entity'; +import { Programa } from 'src/institucion-programa/entity/programa.entity'; +import { EquipoService } from '../equipo/equipo.service'; +import { InstitucionProgramaService } from '../institucion-programa/institucion-programa.service'; @Injectable() export class EquipoProgramaService { constructor( @InjectRepository(EquipoPrograma) - private equipoProgramaRepository: Repository, + private repository: Repository, + private equipoService: EquipoService, + private institucionProgramaService: InstitucionProgramaService, ) {} + + async create(id_equipo: number, id_programa: number) { + const equipo = await this.equipoService.findById(id_equipo); + const programa = await this.institucionProgramaService.findProgramaById( + id_programa, + ); + + return this.existeEquipoPrograma(equipo, programa).then(() => + this.repository.save(this.repository.create({ equipo, programa })), + ); + } + + delete(id_equipo_programa: number) { + return this.findById(id_equipo_programa).then((equipoPrograma) => + this.repository.remove(equipoPrograma), + ); + } + + existeEquipoPrograma(equipo: Equipo, programa: Programa) { + return this.repository + .findOne({ equipo, programa }) + .then((equipoPrograma) => { + if (equipoPrograma) + throw new ConflictException( + 'Ya existe un equipo programa con este equipo y este programa.', + ); + }); + } + + findById(id_equipo_programa: number) { + return this.repository + .findOne({ id_equipo_programa }) + .then((equipoPrograma) => { + if (!equipoPrograma) + throw new ConflictException('No existe este equipo programa.'); + return equipoPrograma; + }); + } } diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts index 8f17136..a8b21c3 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts @@ -1,4 +1,7 @@ import { Controller } from '@nestjs/common'; +import { EquipoTipoEntradaService } from './equipo-tipo-entrada.service'; @Controller('equipo-tipo-entrada') -export class EquipoTipoEntradaController {} +export class EquipoTipoEntradaController { + constructor(private equipoTipoEntradaService: EquipoTipoEntradaService) {} +} diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index e21fe99..a027eb0 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -15,7 +15,7 @@ import { StatusService } from '../status/status.service'; @Injectable() export class EquipoService { constructor( - @InjectRepository(Equipo) private equipoRepository: Repository, + @InjectRepository(Equipo) private repository: Repository, private carritoService: CarritoService, private institucionService: InstitucionService, private institucionProgramaService: InstitucionProgramaService, @@ -33,8 +33,8 @@ export class EquipoService { numero_inventario: string, numero_serie: string, ) { - return this.equipoRepository.save( - this.equipoRepository.create({ + return this.repository.save( + this.repository.create({ carrito, equipo, marca, @@ -76,7 +76,7 @@ export class EquipoService { const status = filtros.id_status ? await this.statusService.findById(parseInt(filtros.id_status)) : null; - const query = this.equipoRepository + const query = this.repository .createQueryBuilder('e') .innerJoinAndSelect('e.carrito', 'c') .innerJoinAndSelect('e.status', 's') @@ -122,7 +122,7 @@ export class EquipoService { } findById(id_equipo: number) { - return this.equipoRepository.findOne({ id_equipo }).then((equipo) => { + return this.repository.findOne({ id_equipo }).then((equipo) => { if (!equipo) throw new NotFoundException('No existe este equipo.'); return equipo; }); @@ -138,7 +138,7 @@ export class EquipoService { ? await this.institucionService.findById(id_institucion) : id_institucion; - return this.equipoRepository + return this.repository .findOne({ join: { alias: 'e', @@ -167,7 +167,7 @@ export class EquipoService { ? await this.carritoService.findById(id_carrito) : id_carrito; - return this.equipoRepository.findOne({ carrito, equipo }).then((equipo) => { + return this.repository.findOne({ carrito, equipo }).then((equipo) => { if (validarNoExiste && !equipo) throw new NotFoundException('No existe este equipo.'); return equipo; @@ -178,7 +178,7 @@ export class EquipoService { return this.findById(attrs.id_equipo) .then((equipo) => { Object.assign(equipo, attrs); - return this.equipoRepository.save(equipo); + return this.repository.save(equipo); }) .then((_) => ({ message: 'Se actualizó correctamente la información del equipo.',