new ep findAllInscritos and findByDate

This commit is contained in:
2026-02-17 19:21:29 -06:00
parent ece4c9a2f2
commit 296b1d9121
6 changed files with 103 additions and 49 deletions
@@ -8,11 +8,11 @@ import {
Delete,
} from '@nestjs/common';
import { BitacoraMesaService } from './bitacora_mesa.service';
import { CreateBitacoraMesaDto } from './dto/create-bitacora_mesa.dto';
import { CreateBitacoraMesaDto, FindByDate } from './dto/create-bitacora_mesa.dto';
@Controller('bitacora-mesa')
export class BitacoraMesaController {
constructor(private readonly bitacoraMesaService: BitacoraMesaService) {}
constructor(private readonly bitacoraMesaService: BitacoraMesaService) { }
@Post()
assignment(@Body() createBitacoraMesaDto: CreateBitacoraMesaDto) {
@@ -39,6 +39,11 @@ export class BitacoraMesaController {
return this.bitacoraMesaService.findByTable(id_mesa);
}
@Post('/date')
findByDate(@Body() data: FindByDate) {
return this.bitacoraMesaService.findByDate(data.date);
}
@Patch('cancelar/:id')
cancelationByMachine(
@Param('id') id: number,
+54 -42
View File
@@ -2,7 +2,7 @@ import { Injectable, NotFoundException } from '@nestjs/common';
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 { Repository, Between } from 'typeorm';
import { BadRequestException } from '@nestjs/common';
@@ -11,42 +11,42 @@ export class BitacoraMesaService {
constructor(
@InjectRepository(BitacoraMesa)
private readonly bitacoraMesaRepository: Repository<BitacoraMesa>,
) {}
) { }
async assignment(dto: CreateBitacoraMesaDto) {
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(
// 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();
)
.getOne();
if (alumnoConMesa) {
throw new BadRequestException(
'El alumno ya tiene una mesa asignada',
);
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);
}
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'],
@@ -81,7 +81,7 @@ export class BitacoraMesaService {
return student;
}
async findByTable(id_mesa: number) {
async findByTable(id_mesa: number) {
const student = await this.bitacoraMesaRepository
.createQueryBuilder('bitacora')
.leftJoinAndSelect('bitacora.alumno_inscrito', 'alumnoInscrito')
@@ -104,19 +104,31 @@ export class BitacoraMesaService {
return student;
}
async cancelation(id_bitacora_mesa: number, nuevoTiempo: number) {
const bitacora = await this.bitacoraMesaRepository.findOne({
where: { id_bitacora_mesa },
});
async findByDate(date) {
const start = new Date(`${date}T00:00:00`);
const end = new Date(`${date}T23:59:59`);
if (!bitacora) {
throw new NotFoundException('Mesa no encontrada');
}
return this.bitacoraMesaRepository.find({
where: {
tiempo_entrada: Between(start, end),
},
})
bitacora.tiempo_asignado -= nuevoTiempo;
await this.bitacoraMesaRepository.save(bitacora);
return { message: 'Tiempo cancelado' };
}
}
async cancelation(id_bitacora_mesa: number, nuevoTiempo: number) {
const bitacora = await this.bitacoraMesaRepository.findOne({
where: { id_bitacora_mesa },
});
if (!bitacora) {
throw new NotFoundException('Mesa no encontrada');
}
bitacora.tiempo_asignado -= nuevoTiempo;
await this.bitacoraMesaRepository.save(bitacora);
return { message: 'Tiempo cancelado' };
}
}
@@ -1,4 +1,4 @@
import { IsInt, IsPositive } from 'class-validator';
import { IsDateString, IsInt, IsPositive } from 'class-validator';
export class CreateBitacoraMesaDto {
@IsInt()
@@ -12,4 +12,9 @@ export class CreateBitacoraMesaDto {
@IsInt()
@IsPositive()
id_alumno_inscrito: number;
}
export class FindByDate {
@IsDateString()
date: string;
}
@@ -19,7 +19,6 @@ export class BitacoraMesa {
@Column({ name: 'tiempo_entrada', type: 'datetime' })
tiempo_entrada: Date;
@ManyToOne(() => Mesa)
@JoinColumn({ name: 'id_mesa' })
mesa: Mesa;