asignacion de mesas asigna una por usuario

This commit is contained in:
2026-02-05 18:53:14 -06:00
parent adb22b3248
commit f2d84105bf
2 changed files with 65 additions and 8 deletions
+33 -8
View File
@@ -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<BitacoraMesa>,
) {}
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'],
+32
View File
@@ -10,10 +10,42 @@ export class MesaService {
@InjectRepository(Mesa)
private readonly mesaRepository: Repository<Mesa>,
) { }
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<Mesa[]> {
return await this.mesaRepository.find();
}
async findAllActivo(): Promise<Mesa[]> {
return await this.mesaRepository.find({ where: { activo: true } });