Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 63 - Gerenciamento de Reservas #63

Merged
merged 10 commits into from
Aug 2, 2023
Merged

Conversation

tiagospeckart
Copy link
Member

Sistema de Reservas implementado

Implementado

Nota

Acabei esquecendo de trocar de branch, então por isso to repetindo o issue.

@tiagospeckart tiagospeckart added the melhoria Nova feature ou solicitação label Jul 30, 2023
@tiagospeckart tiagospeckart self-assigned this Jul 30, 2023
@tiagospeckart tiagospeckart linked an issue Jul 30, 2023 that may be closed by this pull request
6 tasks
@tiagospeckart tiagospeckart changed the title Gerenciamento de Reservas Issue 63 - Gerenciamento de Reservas Jul 30, 2023
@tiagospeckart tiagospeckart linked an issue Jul 30, 2023 that may be closed by this pull request
4 tasks
@tiagospeckart tiagospeckart changed the base branch from main to dev July 30, 2023 22:03
Copy link
Member

@regis-amaral regis-amaral left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

observação 1

Ao tentar rodar o programa recebi um erro:
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.ravin.App.mainMenu(App.java:34)
at org.ravin.App.main(App.java:21)
Caused by: java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:209)
at org.ravin.views.View.(View.java:8)

Acredito que seja pela modificação do local da logo do ravin: View.java:8, como a imagem não está no mesmo nível de diretório da View.java, é preciso ir voltando o diretório através da adição de ''../' até que que ele encontre a imagem. Usar "../../../images/logo.png" funcionou pra mim.


Observação 2

Percebi que a estrutura de pastas foi modificada em algum momento em commits anteriores, talvez até em branchs anteriores, pois já esta assim na dev:
image


observação 3

App.java:
exceptions devem ser tratadas dentro do método que chamar outros métodos que podem as gerar, nunca na main, pois nesse caso, se ocorrerem irão parar a execução do programa.
Sei que há casos de exemplificação que aparerecem dessa forma, mas acredito que sejam apenas para ser mais didático e poupar mais linhas de código para o leitor.


observação 4

Ao tentar cadastrar uma mesa recebi o segfuinte erro:
java.lang.NullPointerException: Cannot invoke "org.ravin.models.Funcionario.getNome()" because the return value of "org.ravin.models.Mesa.getFuncionario()" is null
at org.ravin.views.mesa.SubmenuMesa.imprimeMesa(SubmenuMesa.java:56)
at org.ravin.views.mesa.CadastrarMesaView.cadastrarMesa(CadastrarMesaView.java:31)
at org.ravin.views.mesa.SubmenuMesa.menuMesa(SubmenuMesa.java:27)
at org.ravin.App.processaOpcaoMenu(App.java:60)
at org.ravin.App.mainMenu(App.java:39)
at org.ravin.App.main(App.java:21)

Acho que colocando um teste na linha SubmenuMesa.java:56 pra checar se há um funcionário e em caso contrário omitir a informação, já resolve;


observação 5

Um problema semelhante a observação 4 ocorre ao selecionar a opção listar mesas e entre a lista de mesas existir uma sem funcionário:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "org.ravin.models.Funcionario.getNome()" because the return value of "org.ravin.models.Mesa.getFuncionario()" is null
at org.ravin.views.mesa.RecuperarMesaView.listarMesas(RecuperarMesaView.java:31)
at org.ravin.views.mesa.SubmenuMesa.menuMesa(SubmenuMesa.java:30)
at org.ravin.App.processaOpcaoMenu(App.java:60)
at org.ravin.App.mainMenu(App.java:39)
at org.ravin.App.main(App.java:21)


observação 6

Em que momento se insere um funcionário a uma mesa?

Existe a possibilidade de trocar o funcionário de uma mesa?


observação 7

Pouco relevante, mas na CadastrarReservaView linha 52, no caso de um cliente não ser encontrado o ideal é exibir a mensagem retornada pela controller.


observação 8

Ao tentar inserir uma reserva obtive um erro que encerrou a aplicação:
image

src/main/java/org/ravin/App.java Outdated Show resolved Hide resolved
@tiagospeckart
Copy link
Member Author

observação 1

Ao tentar rodar o programa recebi um erro: Exception in thread "main" java.lang.ExceptionInInitializerError at org.ravin.App.mainMenu(App.java:34) at org.ravin.App.main(App.java:21) Caused by: java.lang.NullPointerException at java.base/java.util.Objects.requireNonNull(Objects.java:209) at org.ravin.views.View.(View.java:8)

Acredito que seja pela modificação do local da logo do ravin: View.java:8, como a imagem não está no mesmo nível de diretório da View.java, é preciso ir voltando o diretório através da adição de ''../' até que que ele encontre a imagem. Usar "../../../images/logo.png" funcionou pra mim.

Beleza, nesse basta arrumar o path.

Observação 2

Percebi que a estrutura de pastas foi modificada em algum momento em commits anteriores, talvez até em branchs anteriores, pois já esta assim na dev: image

Essa interface tinha acabado sobrando em algum commit mesmo, mas foi deletado nessa Issue

observação 3

App.java: exceptions devem ser tratadas dentro do método que chamar outros métodos que podem as gerar, nunca na main, pois nesse caso, se ocorrerem irão parar a execução do programa. Sei que há casos de exemplificação que aparerecem dessa forma, mas acredito que sejam apenas para ser mais didático e poupar mais linhas de código para o leitor.

Pois é, nesse caso eu tava me atrapalhando com a IDE, pois declarei uma Exception nova para uma mesa cheia, mas não tinha alocado onde ela seria tradada. Clicando em sugestões da IDE a Exception acabou subindo até a main. Oops!

observação 4

Ao tentar cadastrar uma mesa recebi o segfuinte erro: java.lang.NullPointerException: Cannot invoke "org.ravin.models.Funcionario.getNome()" because the return value of "org.ravin.models.Mesa.getFuncionario()" is null at org.ravin.views.mesa.SubmenuMesa.imprimeMesa(SubmenuMesa.java:56) at org.ravin.views.mesa.CadastrarMesaView.cadastrarMesa(CadastrarMesaView.java:31) at org.ravin.views.mesa.SubmenuMesa.menuMesa(SubmenuMesa.java:27) at org.ravin.App.processaOpcaoMenu(App.java:60) at org.ravin.App.mainMenu(App.java:39) at org.ravin.App.main(App.java:21)

Acho que colocando um teste na linha SubmenuMesa.java:56 pra checar se há um funcionário e em caso contrário omitir a informação, já resolve;

Pois então! Eu tinha deixado a alocação de Funcionário para um momento posterior, separando a criação da mesa de um sistema de alocação de funcionário. O problema é que faltou implementar esses sistema. Vou criar uma Issue pra isso

observação 5

Um problema semelhante a observação 4 ocorre ao selecionar a opção listar mesas e entre a lista de mesas existir uma sem funcionário:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "org.ravin.models.Funcionario.getNome()" because the return value of "org.ravin.models.Mesa.getFuncionario()" is null at org.ravin.views.mesa.RecuperarMesaView.listarMesas(RecuperarMesaView.java:31) at org.ravin.views.mesa.SubmenuMesa.menuMesa(SubmenuMesa.java:30) at org.ravin.App.processaOpcaoMenu(App.java:60) at org.ravin.App.mainMenu(App.java:39) at org.ravin.App.main(App.java:21)

Talvez nesse caso, o retorno poderia ser nulo, já que nem toda mesa precisa ter um funcionário alocado. Isso é tranquilo de corrigir.

observação 6

Em que momento se insere um funcionário a uma mesa?

Existe a possibilidade de trocar o funcionário de uma mesa?

O mesmo que o comentário da observação 4.

observação 7

Pouco relevante, mas na CadastrarReservaView linha 52, no caso de um cliente não ser encontrado o ideal é exibir a mensagem retornada pela controller.

Relevante sim! Já que não temos retornos HTTP, a essência dos controllers é servirem para disparar erros informativos.

observação 8

Ao tentar inserir uma reserva obtive um erro que encerrou a aplicação: image

Esse último bug...meu deus kkkk


Obrigado pelo review detalhado!

Copy link
Member Author

@tiagospeckart tiagospeckart left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Resolvido:

  • Exceções vazando para Main
  • Lidar com erros em src/main/java/org/ravin/views/reserva/CadastrarReservaView.java
  • Posto tratamento de erro em inserir() de ReservaController
  • Reserva Service agora lida com 3 tipos de erros distintos, dependendo do tipo de situação que a mesa se encontra
  • Loop infinito em inserir() de Mesa
  • Exibir mesa caso Funcionário seja nulo (erro de nullpointer)

@tiagospeckart tiagospeckart merged commit 376e851 into dev Aug 2, 2023
@tiagospeckart tiagospeckart deleted the issue-47-gerenciar-mesas branch August 2, 2023 00:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
melhoria Nova feature ou solicitação
Projects
Status: Finalizado
2 participants