Commit 74ba07e5 authored by Kelve Oliveira's avatar Kelve Oliveira

Merge branch '124-bud-fix' into 'develop'

Resolve "bug fix"

See merge request !99
parents 909cc929 bd6454a0
import ReservaSchema from '../schema/reservaSchema.js';
import ReservaRepository from '../repository/reservaRepository.js';
import SalaRepository from '../repository/salaRepository.js';
import UsuarioRepository from '../repository/usuarioRepository.js';
class ReservaServices {
static async listar(filtro, page = 1, limit = 10) {
const filtroValidado = ReservaSchema.CamposReservaOptional.parse(filtro)
//para pegar apenas um dia especifico
if (filtroValidado.dia) {
const [dia, mes, ano] = filtroValidado.dia.split('-').map(Number); // Divide a data e converte para números
const dataInicio = new Date(ano, mes - 1, dia, 0, 0, 0); // Início do dia
const dataFim = new Date(ano, mes - 1, dia, 23, 59, 59, 999); // Fim do dia
// Ajustar o filtro para incluir as reservas daquele dia
filtroValidado.hora_inicio = { gte: dataInicio }; // Reservas a partir do início do dia
filtroValidado.hora_fim = { lte: dataFim }; // Reservas até o fim do dia
delete filtroValidado.dia
}
const response = await ReservaRepository.lista(filtroValidado, page, limit)
return response
}
static async inserir(data) {
const dataValidada = ReservaSchema.CamposReserva.parse(data)
//verificar se ids de referencia existe
const sala = await SalaRepository.findById(dataValidada.id_sala)
if (!sala) {
throw {
error: true,
message: `Não existe sala com este id: ${dataValidada.id_sala}`,
code: 400
}
}
const usuario = await UsuarioRepository.findById(dataValidada.id_usuario)
if (!usuario) {
throw {
error: true,
message: `Não existe um usuário com este id: ${dataValidada.id_usuario} em (id_usuario)`,
code: 400
}
}
const idReservante = await UsuarioRepository.findById(dataValidada.id_reservante)
if (!idReservante) {
throw {
error: true,
message: `Não existe um usuário com este id: ${dataValidada.id_reservante} em (id_reservante)`,
code: 400
}
}
// Buscar reservas onde o horário de início ou fim está dentro do intervalo de outra reserva
const reservasConflitantes = await ReservaRepository.lista({
OR: [
{
hora_inicio: {
lte: dataValidada.hora_fim
},
hora_fim: {
gte: dataValidada.hora_inicio
}
},
{
hora_inicio: {
gte: dataValidada.hora_inicio,
lte: dataValidada.hora_fim
}
}
]
});
// Verifica se existe algum conflito
if (reservasConflitantes.data.length > 0) {
throw {
error: true,
message: `Conflito de horário: já existe uma reserva no período fornecido`,
code: 400
};
}
const response = await ReservaRepository.create(dataValidada)
return response
}
static async atualizar(id, data) {
const idValidado = ReservaSchema.IdReserva.parse(id)
const dataValidada = ReservaSchema.CamposReservaOptional.parse(data)
const reserva = await ReservaRepository.findById(idValidado.id)
if (!reserva) {
throw {
error: true,
message: `Não existe nenhuma reserva com este id: ${idValidado.id}`,
code: 400
}
}
//verificar se ids de referencia existe
if (dataValidada.id_sala) {
const sala = await SalaRepository.findById(dataValidada.id_sala)
if (!sala) {
throw {
error: true,
message: `Não existe sala com este id: ${dataValidada.id_sala}`,
code: 400
}
}
}
if (dataValidada.id_usuario) {
const usuario = await UsuarioRepository.findById(dataValidada.id_usuario)
if (!usuario) {
throw {
error: true,
message: `Não existe um usuário com este id: ${dataValidada.id_usuario} em (id_usuario)`,
code: 400
}
}
}
if (dataValidada.id_reservante) {
const idReservante = await UsuarioRepository.findById(dataValidada.id_reservante)
if (!idReservante) {
throw {
error: true,
message: `Não existe um usuário com este id: ${dataValidada.id_reservante} em (id_reservante)`,
code: 400
}
}
}
// Buscar reservas onde o horário de início ou fim está dentro do intervalo de outra reserva
const reservasConflitantes = await ReservaRepository.lista({
OR: [
{
hora_inicio: {
lte: dataValidada.hora_fim
},
hora_fim: {
gte: dataValidada.hora_inicio
}
},
{
hora_inicio: {
gte: dataValidada.hora_inicio,
lte: dataValidada.hora_fim
}
}
]
});
// Verifica se existe algum conflito
if (reservasConflitantes.length > 0) {
if (reservasConflitantes[0].id != idValidado.id) {
throw {
error: true,
message: `Conflito de horário: já existe uma reserva no período fornecido`,
code: 400
}
}
}
const response = await ReservaRepository.update(idValidado.id, dataValidada)
return response
}
static async excluir(id) {
const idValidado = ReservaSchema.IdReserva.parse(id)
const reserva = await ReservaRepository.findById(idValidado.id)
if (!reserva) {
throw {
error: true,
message: `Não existe nenhuma reserva com este id: ${idValidado.id}`,
code: 400
}
}
const response = await ReservaRepository.delete(idValidado.id)
return response
}
}
import ReservaSchema from '../schema/reservaSchema.js';
import ReservaRepository from '../repository/reservaRepository.js';
import SalaRepository from '../repository/salaRepository.js';
import UsuarioRepository from '../repository/usuarioRepository.js';
class ReservaServices {
static async listar(filtro, page = 1, limit = 10) {
const filtroValidado = ReservaSchema.CamposReservaOptional.parse(filtro)
//para pegar apenas um dia especifico
if (filtroValidado.dia) {
const [dia, mes, ano] = filtroValidado.dia.split('-').map(Number); // Divide a data e converte para números
const dataInicio = new Date(ano, mes - 1, dia, 0, 0, 0); // Início do dia
const dataFim = new Date(ano, mes - 1, dia, 23, 59, 59, 999); // Fim do dia
// Ajustar o filtro para incluir as reservas daquele dia
filtroValidado.hora_inicio = { gte: dataInicio }; // Reservas a partir do início do dia
filtroValidado.hora_fim = { lte: dataFim }; // Reservas até o fim do dia
delete filtroValidado.dia
}
const response = await ReservaRepository.lista(filtroValidado, page, limit)
return response
}
static async inserir(data) {
const dataValidada = ReservaSchema.CamposReserva.parse(data)
//verificar se ids de referencia existe
const sala = await SalaRepository.findById(dataValidada.id_sala)
if (!sala) {
throw {
error: true,
message: `Não existe sala com este id: ${dataValidada.id_sala}`,
code: 400
}
}
const usuario = await UsuarioRepository.findById(dataValidada.id_usuario)
if (!usuario) {
throw {
error: true,
message: `Não existe um usuário com este id: ${dataValidada.id_usuario} em (id_usuario)`,
code: 400
}
}
const idReservante = await UsuarioRepository.findById(dataValidada.id_reservante)
if (!idReservante) {
throw {
error: true,
message: `Não existe um usuário com este id: ${dataValidada.id_reservante} em (id_reservante)`,
code: 400
}
}
// Buscar reservas onde o horário de início ou fim está dentro do intervalo de outra reserva
const reservasConflitantes = await ReservaRepository.lista({
OR: [
{
hora_inicio: {
lte: dataValidada.hora_fim
},
hora_fim: {
gte: dataValidada.hora_inicio
}
},
{
hora_inicio: {
gte: dataValidada.hora_inicio,
lte: dataValidada.hora_fim
}
}
]
});
// Verifica se existe algum conflito
if (reservasConflitantes.data.length > 0) {
throw {
error: true,
message: `Conflito de horário: já existe uma reserva no período fornecido`,
code: 400
};
}
const response = await ReservaRepository.create(dataValidada)
return response
}
static async atualizar(id, data) {
const idValidado = ReservaSchema.IdReserva.parse(id)
const dataValidada = ReservaSchema.CamposReservaOptional.parse(data)
const reserva = await ReservaRepository.findById(idValidado.id)
if (!reserva) {
throw {
error: true,
message: `Não existe nenhuma reserva com este id: ${idValidado.id}`,
code: 400
}
}
//verificar se ids de referencia existe
if (dataValidada.id_sala) {
const sala = await SalaRepository.findById(dataValidada.id_sala)
if (!sala) {
throw {
error: true,
message: `Não existe sala com este id: ${dataValidada.id_sala}`,
code: 400
}
}
}
if (dataValidada.id_usuario) {
const usuario = await UsuarioRepository.findById(dataValidada.id_usuario)
if (!usuario) {
throw {
error: true,
message: `Não existe um usuário com este id: ${dataValidada.id_usuario} em (id_usuario)`,
code: 400
}
}
}
if (dataValidada.id_reservante) {
const idReservante = await UsuarioRepository.findById(dataValidada.id_reservante)
if (!idReservante) {
throw {
error: true,
message: `Não existe um usuário com este id: ${dataValidada.id_reservante} em (id_reservante)`,
code: 400
}
}
}
// Buscar reservas onde o horário de início ou fim está dentro do intervalo de outra reserva
const reservasConflitantes = await ReservaRepository.lista({
OR: [
{
hora_inicio: {
lte: dataValidada.hora_fim
},
hora_fim: {
gte: dataValidada.hora_inicio
}
},
{
hora_inicio: {
gte: dataValidada.hora_inicio,
lte: dataValidada.hora_fim
}
}
]
});
// Verifica se existe algum conflito
if (reservasConflitantes.data.length > 0) {
if (reservasConflitantes.data[0].id != idValidado.id) {
throw {
error: true,
message: `Conflito de horário: já existe uma reserva no período fornecido`,
code: 400
}
}
}
const response = await ReservaRepository.update(idValidado.id, dataValidada)
return response
}
static async excluir(id) {
const idValidado = ReservaSchema.IdReserva.parse(id)
const reserva = await ReservaRepository.findById(idValidado.id)
if (!reserva) {
throw {
error: true,
message: `Não existe nenhuma reserva com este id: ${idValidado.id}`,
code: 400
}
}
const response = await ReservaRepository.delete(idValidado.id)
return response
}
}
export default ReservaServices;
\ No newline at end of file
import request from 'supertest';
import app from '../../app';
describe('Teste de Integração Reserva', () => {
const reservas = [
{
"id_sala": 1,
"id_usuario": 1,
"turma": "2ºB Eletrônica",
"hora_inicio": "2024-05-02T09:00:00.000Z",
"hora_fim": "2024-05-02T11:50:00.000Z",
"descricao": "Prática de laboratório",
"id_reservante": 1
},
{
"id_sala": 1,
"id_usuario": 1,
"turma": "3ºC Mecatrônica",
"hora_inicio": "2024-05-03T14:00:00.000Z",
"hora_fim": "2024-05-03T16:50:00.000Z",
"descricao": "Aula teórica",
"id_reservante": 8
},
{
"id_sala": 1,
"id_usuario": 1,
"turma": "1ºD Informática",
"hora_inicio": "2024-05-04T10:00:00.000Z",
"hora_fim": "2024-05-04T12:50:00.000Z",
"descricao": "Exercícios práticos",
"id_reservante": 6
}
];
let token;
beforeAll(async () => {
const loginResponse = await request(app)
.post('/login')
.send({ siape: '248613', senha: 'Senha123@' });
token = loginResponse.body.data.token;
});
describe('POST /ensalamento', () => {
it('Deve criar múltiplas reservas com sucesso', async () => {
const body = {
ensalamento: reservas,
sala: 4,
dataInicio: "2025-02-07T13:00:00.000Z",
dataFim: "2025-05-03T08:50:00.000Z"
};
const response = await request(app)
.post('/ensalamento')
.set('Authorization', `Bearer ${token}`)
.send(body);
expect(response.statusCode).toBe(201);
expect(response.body).toHaveProperty('message', 'Ensalamento criado com sucesso!');
expect(response.body).toMatchObject({
code: 201,
error: false,
message: 'Ensalamento criado com sucesso!',
data: { count: 39 }
});
});
it('Deve retornar erro 400 se faltar campo obrigatório', async () => {
const bodyIncompleto = {
ensalamento: {tipo_invalido: 'deve ser um array'},
dataInicio: "2025-02-07T13:00:00.000Z",
dataFim: "2025-05-03T08:50:00.000Z"
};
const response = await request(app)
.post('/ensalamento')
.set('Authorization', `Bearer ${token}`)
.send(bodyIncompleto);
expect(response.statusCode).toBe(400);
expect(response.body).toHaveProperty('message', 'O campo Ensalamento deve ser do typo array e não pode esta vasio');
});
});
});
import request from 'supertest';
import app from '../../app';
describe('Teste de Integração Reserva', () => {
const reservas = [
{
"id_sala": 1,
"id_usuario": 9,
"turma": "2ºB Eletrônica",
"hora_inicio": "2024-05-02T09:00:00.000Z",
"hora_fim": "2024-05-02T11:50:00.000Z",
"descricao": "Prática de laboratório",
"id_reservante": 8
},
{
"id_sala": 1,
"id_usuario": 9,
"turma": "3ºC Mecatrônica",
"hora_inicio": "2024-05-03T14:00:00.000Z",
"hora_fim": "2024-05-03T16:50:00.000Z",
"descricao": "Aula teórica",
"id_reservante": 8
},
{
"id_sala": 1,
"id_usuario": 9,
"turma": "1ºD Informática",
"hora_inicio": "2024-05-04T10:00:00.000Z",
"hora_fim": "2024-05-04T12:50:00.000Z",
"descricao": "Exercícios práticos",
"id_reservante": 8
}
];
let token;
beforeAll(async () => {
const loginResponse = await request(app)
.post('/login')
.send({ siape: '248613', senha: 'Senha123@' });
token = loginResponse.body.data.token;
});
describe('POST /ensalamento', () => {
it('Deve criar múltiplas reservas com sucesso', async () => {
const body = {
ensalamento: reservas,
sala: 4,
dataInicio: "2025-02-07T13:00:00.000Z",
dataFim: "2025-05-03T08:50:00.000Z"
};
const response = await request(app)
.post('/ensalamento')
.set('Authorization', `Bearer ${token}`)
.send(body);
console.log(response);
// expect(response.statusCode).toBe(201);
expect(response.body).toHaveProperty('message', 'Ensalamento criado com sucesso!');
expect(response.body).toMatchObject({
code: 201,
error: false,
message: 'Ensalamento criado com sucesso!',
data: { count: 39 }
});
});
it('Deve retornar erro 400 se faltar campo obrigatório', async () => {
const bodyIncompleto = {
ensalamento: {tipo_invalido: 'deve ser um array'},
dataInicio: "2025-02-07T13:00:00.000Z",
dataFim: "2025-05-03T08:50:00.000Z"
};
const response = await request(app)
.post('/ensalamento')
.set('Authorization', `Bearer ${token}`)
.send(bodyIncompleto);
expect(response.statusCode).toBe(400);
expect(response.body).toHaveProperty('message', 'O campo Ensalamento deve ser do typo array e não pode esta vasio');
});
});
});
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment