Files
api-AT/src/programa_equipo/programa_equipo.service.ts
T

137 lines
3.6 KiB
TypeScript

import { Injectable, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { ProgramaEquipo } from './entities/programa_equipo.entity';
import { In, Repository } from 'typeorm';
import { DataSource } from 'typeorm';
import { Equipo } from 'src/equipo/entities/equipo.entity';
@Injectable()
export class ProgramaEquipoService {
constructor(
@InjectRepository(ProgramaEquipo)
private readonly programaEquipoRepository: Repository<ProgramaEquipo>,
private readonly dataSource: DataSource,
) {}
findAllProgramByNumber(id_equipo: number) {
return this.programaEquipoRepository.find({ where: { id_equipo } });
}
findAllProgramByUbication(ubicacion: string) {
return this.programaEquipoRepository.find();
}
async findOne(id_equipo: number) {
const equipo = await this.programaEquipoRepository.find({
where: { equipo: { id_equipo } },
});
if (equipo.length === 0) {
throw new NotFoundException(`machine without programs`);
}
return equipo;
}
async updateMachine(id_equipo: number, programasSeleccionados: number[]) {
const actuales = await this.programaEquipoRepository.find({
where: { id_equipo },
});
const actualesIds = actuales.map((p) => p.id_programa);
const aCrear = programasSeleccionados.filter(
(id) => !actualesIds.includes(id),
);
const aEliminar = actualesIds.filter(
(id) => !programasSeleccionados.includes(id),
);
if (aCrear.length > 0) {
const nuevos = aCrear.map((id_programa) =>
this.programaEquipoRepository.create({
id_equipo,
id_programa,
}),
);
await this.programaEquipoRepository.save(nuevos);
}
if (aEliminar.length > 0) {
await this.programaEquipoRepository.delete({
id_equipo,
id_programa: In(aEliminar),
});
}
return {
message: 'Programas del equipo actualizados correctamente',
};
}
async updateBySala(
id_area_ubicacion: number,
programasSeleccionados: number[],
) {
const queryRunner = this.dataSource.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
try {
const equipos = await queryRunner.manager.find(Equipo, {
where: { id_area_ubicacion },
});
if (equipos.length === 0) {
throw new Error('No hay equipos en la sala');
}
for (const equipo of equipos) {
const actuales = await queryRunner.manager.find(ProgramaEquipo, {
where: { id_equipo: equipo.id_equipo },
});
const actualesIds = actuales.map(p => p.id_programa);
const aCrear = programasSeleccionados.filter(
id => !actualesIds.includes(id),
);
const aEliminar = actualesIds.filter(
id => !programasSeleccionados.includes(id),
);
if (aCrear.length > 0) {
const nuevos = aCrear.map(id_programa =>
queryRunner.manager.create(ProgramaEquipo, {
id_equipo: equipo.id_equipo,
id_programa,
}),
);
await queryRunner.manager.save(nuevos);
}
if (aEliminar.length > 0) {
await queryRunner.manager.delete(ProgramaEquipo, {
id_equipo: equipo.id_equipo,
id_programa: In(aEliminar),
});
}
}
await queryRunner.commitTransaction();
return {
message: 'Programas actualizados correctamente en la sala',
equiposActualizados: equipos.length,
};
} catch (error) {
await queryRunner.rollbackTransaction();
throw error;
} finally {
await queryRunner.release();
}
}
}