2
respostas

3. Regra de não sobreposição. && 4.Estados e cancelamento.

Acrescentei essas outras parte do código algum professor poderia verificar e me dar algumas dicas caso esteja errado ou faltando algo

https://github.com/FelipeBNascimento/Reservas_Sala_Alura/tree/develop

Desde ja agradeço e só para pontuar gostei bastante desse jeito modulo carreiras e ter um desafio final muito bom para o aporendizado

Att.

Felipe Bazan

2 respostas

Olá, Felipe! É um prazer analisar seu projeto.

Parabéns pelo uso de Spring Boot 3, JPA e PostgreSQL. Seu projeto está bem estruturado, seguindo a arquitetura em camadas.

Abaixo, um feedback técnico conciso com sugestões para aprimoramento:

1. Boas Práticas de Código e Clareza

1.1. Nomenclatura de Pacotes e Classes

Existem erros de digitação na nomenclatura que devem ser corrigidos para manter a profissionalidade e legibilidade do código:

ItemAtualSugestão
Pacoteinfrasctrutureinfrastructure
Pacotebussinesbusiness
ClasseUsuarioRepositoyUsuarioRepository

1.2. Uso do Lombok em Entidades JPA

Melhor Prática: Mantenha @Getter, @Setter e @NoArgsConstructor. Evite a anotação @Data em entidades JPA, pois ela inclui métodos que podem causar problemas de performance e erros de StackOverflowError devido ao lazy loading e relacionamentos bidirecionais.

2. Melhorias na Lógica de Negócios (ServiceReserva.java)

2.1. Regra de Conflito de Horários

Análise: A query JPQL no seu ReservaRepository para findConflitoDeReserva está correta e implementa a lógica canônica para verificar a sobreposição de intervalos de tempo. Parabéns!

SELECT re FROM ReservaEntity re 
WHERE re.sala.id = :salaId
AND re.dataFinal > :dataInicioNovareserva
AND re.dataInicio < :dataFimNovaReserva

2.2. Validação e Busca de Entidades

Correção de Mensagens de Erro: No método reservarSala, as mensagens de erro para IdNaoEncontrado estão trocadas:

LinhaCódigo Atual (Exemplo)Correção Sugerida
36Id não encontrado" + usuario.getId()Id não encontrado: Sala ID " + sala.getId()
41Id não encontrado" + sala.getId()Id não encontrado: Usuário ID " + usuario.getId()

2.3. Lógica de checagemStatus

Sugestão: Remova a chamada a checagemStatus do método reservarSala. A verificação de conflito de horários já garante que a sala está livre. Checar o status da nova reserva (que ainda não foi salva) é redundante e incorreto, pois ela só deve se tornar ATIVA após a persistência.

3. Melhorias de Design Patterns e Arquitetura

3.1. Uso de DTOs (Data Transfer Objects)

Dica Fundamental: Introduza DTOs (Data Transfer Objects) para a comunicação com a camada de Controller.

  • Controller deve receber DTOs (ReservaRequestDTO).
  • Service deve manipular as Entidades.

Isso garante segurança (não expõe a estrutura da Entidade) e Separação de Responsabilidades.

3.2. Tratamento Global de Exceções

Sugestão: Implemente um Controller Advice global (@RestControllerAdvice) para mapear suas exceções customizadas para códigos de status HTTP apropriados:

Exceção CustomizadaStatus HTTP Sugerido
IdNaoEncontrado404 Not Found
SalaReservada409 Conflict

Resumo e Próximos Passos

Seu projeto tem uma base sólida. O próximo passo é focar em:

  1. Refatoração: Corrigir a nomenclatura.
  2. Arquitetura: Introduzir DTOs.
  3. Robustez: Implementar o Controller Advice.

Continue assim! O caminho para a excelência é a melhoria contínua. Estou à disposição.

Bom dia João

Modifiquei as sugestões que o senhor mencionou e adicionei algumas classes (Controller, Service) campos se puder olhar depois e tiver mais algumas sugestões

https://github.com/FelipeBNascimento/Reservas_Sala_Alura/tree/develop

Att.

Felipe Bazan