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 repository: Repository, private equipoService: EquipoService, private institucionProgramaService: InstitucionProgramaService, ) {} async create(id_equipo: number | Equipo, id_programa: number | Programa) { const equipo = typeof id_equipo === 'number' ? await this.equipoService.findById(id_equipo) : id_equipo; const programa = typeof id_programa === 'number' ? await this.institucionProgramaService.findProgramaById(id_programa) : id_programa; return this.existeEquipoPrograma(equipo, programa) .then(() => this.repository.save(this.repository.create({ equipo, programa })), ) .then((equipoPrograma) => ({ message: `Se agrego el programa: ${equipoPrograma.programa}, al equipo con nĂºmero de inventario: ${equipo.numero_inventario}}`, equipoPrograma, })); } delete(id_equipo_programa: number) { return this.findById(id_equipo_programa).then((equipoPrograma) => this.repository.remove(equipoPrograma), ); } existeEquipoPrograma( equipo: Equipo, programa: Programa, validarExistencia = true, ) { return this.repository .findOne({ equipo, programa }) .then((equipoPrograma) => { if (validarExistencia && equipoPrograma) throw new ConflictException( 'Ya existe un equipo programa con este equipo y este programa.', ); return equipoPrograma; }); } 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; }); } }