From 0c6984d49343067af0f49e38a26132fb33a28b4f Mon Sep 17 00:00:00 2001 From: IO <320154041@pcpuma.acatlan.unam.mx> Date: Tue, 10 Feb 2026 18:43:25 -0600 Subject: [PATCH] added new ep called busy in equipo --- src/equipo/equipo.controller.ts | 7 ++++++- src/equipo/equipo.service.ts | 37 ++++++++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/equipo/equipo.controller.ts b/src/equipo/equipo.controller.ts index 1524e6f..6fd3d0c 100644 --- a/src/equipo/equipo.controller.ts +++ b/src/equipo/equipo.controller.ts @@ -5,7 +5,7 @@ import { CreateEquipoDto } from './dto/create-equipo.dto'; @Controller('equipo') export class EquipoController { - constructor(private readonly equipoService: EquipoService) {} + constructor(private readonly equipoService: EquipoService) { } @Get() findAll(): Promise { @@ -27,6 +27,11 @@ export class EquipoController { return this.equipoService.findOnlyUsable(+id); } + @Get('/busy') + findOnlyBusy(): Promise { + return this.equipoService.findOnlyBusy(); + } + @Get(':id') findOne(@Param('id') id: string): Promise { return this.equipoService.findOne(id); diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index d5d8f8c..364651b 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -14,7 +14,7 @@ export class EquipoService { @InjectRepository(Equipo) private readonly equipoRepository: Repository, // private readonly alumnoInscritoService: AlumnoInscritoService, - ) {} + ) { } findAll() { return this.equipoRepository @@ -119,6 +119,41 @@ export class EquipoService { return equipos; } + async findOnlyBusy(): Promise { + const equipos = await this.equipoRepository + .createQueryBuilder('equipo') + .innerJoinAndSelect('equipo.plataforma', 'plataforma') + .innerJoinAndSelect('equipo.areaUbicacion', 'area') + .andWhere('equipo.activo = true') + + .andWhere((qb) => { + const subQuery = qb + .subQuery() + .select('bitacora.id_equipo') + .from('bitacora', 'bitacora') + .where( + `TIMESTAMPDIFF( + SECOND, + NOW(), + DATE_ADD(bitacora.tiempo_entrada, INTERVAL bitacora.tiempo_asignado MINUTE) + ) > 0`, + ) + .getQuery(); + + return `equipo.id_equipo IN ${subQuery}`; + }) + + .orderBy('equipo.ubicacion', 'ASC') + + .getMany(); + + if (!equipos.length) { + throw new NotFoundException('No existen equipos en uso'); + } + + return equipos; + } + async create(equipo: CreateEquipoDto) { const find = await this.equipoRepository.findOne({ where: { ubicacion: equipo.ubicacion },