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

123 lines
3.5 KiB
TypeScript
Raw Normal View History

2026-01-23 16:46:55 -06:00
import { Injectable, NotFoundException } from '@nestjs/common';
2026-01-21 15:13:21 -06:00
import { CreateBitacoraMesaDto } from './dto/create-bitacora_mesa.dto';
2026-01-21 17:10:49 -06:00
import { InjectRepository } from '@nestjs/typeorm';
import { BitacoraMesa } from './entities/bitacora_mesa.entity';
import { Repository } from 'typeorm';
2026-02-05 18:53:14 -06:00
import { BadRequestException } from '@nestjs/common';
2026-01-21 15:13:21 -06:00
@Injectable()
export class BitacoraMesaService {
2026-01-21 17:10:49 -06:00
constructor(
@InjectRepository(BitacoraMesa)
private readonly bitacoraMesaRepository: Repository<BitacoraMesa>,
) {}
2026-01-28 12:51:55 -06:00
2026-02-05 18:53:14 -06:00
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', {
id_alumno_inscrito: dto.id_alumno_inscrito,
})
.andWhere(
`TIMESTAMPDIFF(
SECOND,
NOW(),
DATE_ADD(bitacora.tiempo_entrada, INTERVAL bitacora.tiempo_asignado MINUTE)
) > 0`,
)
.getOne();
2026-01-28 12:51:55 -06:00
2026-02-05 18:53:14 -06:00
if (alumnoConMesa) {
throw new BadRequestException(
'El alumno ya tiene una mesa asignada',
);
2026-01-21 15:13:21 -06:00
}
2026-02-05 18:53:14 -06:00
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);
}
2026-01-21 15:13:21 -06:00
findAll() {
2026-01-23 16:46:55 -06:00
return this.bitacoraMesaRepository.find({
relations: ['mesa', 'alumno_inscrito'],
take: 100,
});
2026-01-21 15:13:21 -06:00
}
findOne(id: number) {
return `This action returns a #${id} bitacoraMesa`;
}
2026-01-23 16:46:55 -06:00
async findByCuenta(id_cuenta: number) {
2026-01-27 12:26:22 -06:00
const student = await this.bitacoraMesaRepository
2026-01-23 20:09:52 -06:00
.createQueryBuilder('bitacora')
.leftJoinAndSelect('bitacora.alumno_inscrito', 'alumnoInscrito')
.leftJoinAndSelect('alumnoInscrito.alumno', 'alumno')
.leftJoinAndSelect('alumno.carrera', 'carrera')
.leftJoinAndSelect('bitacora.mesa', 'mesa')
.where('alumno.id_cuenta = :id_cuenta', { id_cuenta })
2026-01-28 12:51:55 -06:00
.andWhere(
`TIMESTAMPDIFF(SECOND,NOW(),DATE_ADD(bitacora.tiempo_entrada, INTERVAL bitacora.tiempo_asignado MINUTE)) > 0`,
)
2026-01-23 20:09:52 -06:00
.orderBy('bitacora.tiempo_entrada', 'DESC')
.getOne();
2026-01-27 12:26:22 -06:00
if (!student) {
2026-01-23 16:46:55 -06:00
throw new NotFoundException('alumno sin mesa');
}
2026-01-27 12:26:22 -06:00
return student;
2026-01-23 16:46:55 -06:00
}
2026-01-28 12:51:55 -06:00
2026-01-29 11:13:00 -06:00
async findByTable(id_mesa: number) {
const student = await this.bitacoraMesaRepository
.createQueryBuilder('bitacora')
.leftJoinAndSelect('bitacora.alumno_inscrito', 'alumnoInscrito')
.leftJoinAndSelect('alumnoInscrito.alumno', 'alumno')
.leftJoinAndSelect('alumno.carrera', 'carrera')
.leftJoinAndSelect('bitacora.mesa', 'mesa')
.where('mesa.id_mesa = :id_mesa', { id_mesa })
.andWhere(
`TIMESTAMPDIFF(SECOND,NOW(),DATE_ADD(bitacora.tiempo_entrada, INTERVAL bitacora.tiempo_asignado MINUTE)) > 0`,
)
.orderBy('bitacora.tiempo_entrada', 'DESC')
.getOne();
if (!student) {
throw new NotFoundException('Mesa no asignada');
}
return student;
}
async cancelation(id_bitacora_mesa: number, nuevoTiempo: number) {
2026-01-28 12:51:55 -06:00
const bitacora = await this.bitacoraMesaRepository.findOne({
2026-01-29 10:45:37 -06:00
where: { id_bitacora_mesa },
2026-01-28 12:51:55 -06:00
});
if (!bitacora) {
2026-01-29 11:13:00 -06:00
throw new NotFoundException('Mesa no encontrada');
2026-01-28 12:51:55 -06:00
}
bitacora.tiempo_asignado -= nuevoTiempo;
await this.bitacoraMesaRepository.save(bitacora);
return { message: 'Tiempo cancelado' };
}
2026-01-21 15:13:21 -06:00
}