From f2d84105bfa2e14b1cd9ebb15f48baf005d68b4a Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Thu, 5 Feb 2026 18:53:14 -0600 Subject: [PATCH] asignacion de mesas asigna una por usuario --- src/bitacora_mesa/bitacora_mesa.service.ts | 41 +++++++++++++++++----- src/mesa/mesa.service.ts | 32 +++++++++++++++++ 2 files changed, 65 insertions(+), 8 deletions(-) diff --git a/src/bitacora_mesa/bitacora_mesa.service.ts b/src/bitacora_mesa/bitacora_mesa.service.ts index 3b0c3f1..5544330 100644 --- a/src/bitacora_mesa/bitacora_mesa.service.ts +++ b/src/bitacora_mesa/bitacora_mesa.service.ts @@ -3,6 +3,8 @@ import { CreateBitacoraMesaDto } from './dto/create-bitacora_mesa.dto'; import { InjectRepository } from '@nestjs/typeorm'; import { BitacoraMesa } from './entities/bitacora_mesa.entity'; import { Repository } from 'typeorm'; +import { BadRequestException } from '@nestjs/common'; + @Injectable() export class BitacoraMesaService { @@ -11,17 +13,40 @@ export class BitacoraMesaService { private readonly bitacoraMesaRepository: Repository, ) {} - async assignment(dto: CreateBitacoraMesaDto) { - const bitacora = this.bitacoraMesaRepository.create({ - tiempo_entrada: new Date(), - tiempo_asignado: dto.tiempo_asignado, - mesa: { id_mesa: dto.id_mesa }, - alumno_inscrito: { id_alumno_inscrito: dto.id_alumno_inscrito }, - }); + async assignment(dto: CreateBitacoraMesaDto) { - return this.bitacoraMesaRepository.save(bitacora); + // VALIDAR: el alumno ya tiene una mesa activa + const alumnoConMesa = await this.bitacoraMesaRepository + .createQueryBuilder('bitacora') + .where('bitacora.id_alumno_inscrito = :id_alumno_inscrito', { + id_alumno_inscrito: dto.id_alumno_inscrito, + }) + .andWhere( + `TIMESTAMPDIFF( + SECOND, + NOW(), + DATE_ADD(bitacora.tiempo_entrada, INTERVAL bitacora.tiempo_asignado MINUTE) + ) > 0`, + ) + .getOne(); + + if (alumnoConMesa) { + throw new BadRequestException( + 'El alumno ya tiene una mesa asignada', + ); } + + const bitacora = this.bitacoraMesaRepository.create({ + tiempo_entrada: new Date(), + tiempo_asignado: dto.tiempo_asignado, + mesa: { id_mesa: dto.id_mesa }, + alumno_inscrito: { id_alumno_inscrito: dto.id_alumno_inscrito }, + }); + + return this.bitacoraMesaRepository.save(bitacora); +} + findAll() { return this.bitacoraMesaRepository.find({ relations: ['mesa', 'alumno_inscrito'], diff --git a/src/mesa/mesa.service.ts b/src/mesa/mesa.service.ts index 651bf72..56ca3f8 100644 --- a/src/mesa/mesa.service.ts +++ b/src/mesa/mesa.service.ts @@ -10,10 +10,42 @@ export class MesaService { @InjectRepository(Mesa) private readonly mesaRepository: Repository, ) { } + async asignarMesa(idUsuario: number, idMesa: number) { + + const yaTieneMesa = await this.mesaRepository.findOne({ + where: { id_mesa: idMesa } + }); + + if (yaTieneMesa) { + throw new BadRequestException('El usuario ya tiene una mesa asignada'); + } + + // 🔴 NUEVO: buscar mesa + const mesa = await this.mesaRepository.findOne({ + where: { id_mesa: idMesa } + }); + + if (!mesa) { + throw new NotFoundException('Mesa no existe'); + } + + // 🔴 NUEVO: marcar inactiva + mesa.activo = false; + await this.mesaRepository.save(mesa); + + // guardar asignación + return await this.mesaRepository.save({ + id_usuario: idUsuario, + id_mesa: idMesa, + }); +} + + async findAll(): Promise { return await this.mesaRepository.find(); } + async findAllActivo(): Promise { return await this.mesaRepository.find({ where: { activo: true } });