From c63f59593c3fbcd10de4550dbfa1a87c1b7766ac Mon Sep 17 00:00:00 2001 From: IO <320154041@pcpuma.acatlan.unam.mx> Date: Tue, 24 Feb 2026 17:37:39 -0600 Subject: [PATCH 1/2] added new logic in findallActivo --- src/bitacora_mesa/bitacora_mesa.service.ts | 3 +- src/mesa/mesa.service.ts | 35 +++++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/bitacora_mesa/bitacora_mesa.service.ts b/src/bitacora_mesa/bitacora_mesa.service.ts index c65ef86..a46d9ae 100644 --- a/src/bitacora_mesa/bitacora_mesa.service.ts +++ b/src/bitacora_mesa/bitacora_mesa.service.ts @@ -14,8 +14,7 @@ export class BitacoraMesaService { ) { } async assignment(dto: CreateBitacoraMesaDto) { - - // VALIDAR: el alumno ya tiene una mesa activa + const alumnoConMesa = await this.bitacoraMesaRepository .createQueryBuilder('bitacora') .where('bitacora.id_alumno_inscrito = :id_alumno_inscrito', { diff --git a/src/mesa/mesa.service.ts b/src/mesa/mesa.service.ts index c089e2b..03b63b7 100644 --- a/src/mesa/mesa.service.ts +++ b/src/mesa/mesa.service.ts @@ -38,15 +38,42 @@ export class MesaService { }); } - - async findAll(): Promise { return await this.mesaRepository.find(); } - async findAllActivo(): Promise { - return await this.mesaRepository.find({ where: { activo: true } }); + const mesas = await this.mesaRepository + .createQueryBuilder('mesa') + + .andWhere('mesa.activo = true') + + .andWhere((qb) => { + const subQuery = qb + .subQuery() + .select('bitacora_mesa.id_mesa') + .from('bitacora_mesa', 'bitacora_mesa') + .where( + `TIMESTAMPDIFF( + SECOND, + NOW(), + DATE_ADD(bitacora_mesa.tiempo_entrada, INTERVAL bitacora_mesa.tiempo_asignado MINUTE) + ) > 0`, + ) + .getQuery(); + + return `mesa.id_mesa NOT IN ${subQuery}`; + }) + + .orderBy('mesa.id_mesa', 'ASC') + + .getMany(); + + if (!mesas.length) { + throw new NotFoundException('No usable table found'); + } + + return mesas; } async updateActivo(id: number, updateMesaDto: UpdateMesaDto) { From eb52f9829fa472ab084901059e661f6992e21593 Mon Sep 17 00:00:00 2001 From: IO <320154041@pcpuma.acatlan.unam.mx> Date: Tue, 24 Feb 2026 18:47:49 -0600 Subject: [PATCH 2/2] added new ep uso in mesa --- src/mesa/mesa.controller.ts | 7 ++++++- src/mesa/mesa.service.ts | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/mesa/mesa.controller.ts b/src/mesa/mesa.controller.ts index e048d98..c655be9 100644 --- a/src/mesa/mesa.controller.ts +++ b/src/mesa/mesa.controller.ts @@ -15,7 +15,12 @@ export class MesaController { async findAllActivo() { return this.mesaService.findAllActivo(); } - + + @Get('uso') + async findActiveMesas() { + return this.mesaService.findActiveMesas(); + } + @Patch(':id') async updateActivo( @Param('id') id: number, diff --git a/src/mesa/mesa.service.ts b/src/mesa/mesa.service.ts index 03b63b7..c6189ec 100644 --- a/src/mesa/mesa.service.ts +++ b/src/mesa/mesa.service.ts @@ -119,4 +119,27 @@ export class MesaService { activo: nuevoActivo, }; } + + findActiveMesas() { + return this.mesaRepository + .createQueryBuilder('mesa') + .select([ + 'mesa.id_mesa AS id_mesa', + ` + EXISTS ( + SELECT 1 + FROM bitacora_mesa bm + WHERE bm.id_mesa = mesa.id_mesa + AND TIMESTAMPDIFF( + SECOND, + NOW(), + DATE_ADD(bm.tiempo_entrada, INTERVAL bm.tiempo_asignado MINUTE) + ) > 0 + ) AS ocupado + `, + ]) + .where('mesa.activo = 1') + .orderBy('mesa.id_mesa', 'ASC') + .getRawMany(); + } }