From a2338613af9d7384acae7e6ce54e31d14de0c676 Mon Sep 17 00:00:00 2001 From: Tiago Martins Speckart <75458110+tiagospeckart@users.noreply.github.com> Date: Mon, 31 Jul 2023 21:16:10 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20arrumado=20=C3=BAltimos=20erros=20da=20P?= =?UTF-8?q?R#63?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/ravin/App.java | 8 ++-- .../ravin/controllers/ReservaController.java | 8 +++- .../services/reserva/ReservaService.java | 40 ++++++++++++++----- .../VerificarComandaEmMesaService.java | 2 +- .../reserva/interfaces/IReservaService.java | 6 ++- .../IVerificarComandaEmMesaService.java | 2 +- .../exceptions/ComandaEmMesaException.java | 11 +++++ .../exceptions/DataIndisponivelException.java | 11 +++++ src/main/java/org/ravin/views/View.java | 2 +- .../views/estoque/RecuperarEstoqueView.java | 12 ++++-- .../ravin/views/mesa/CadastrarMesaView.java | 3 +- .../org/ravin/views/mesa/SubmenuMesa.java | 2 +- .../views/reserva/CadastrarReservaView.java | 25 ++---------- .../views/reserva/RecuperarReservaView.java | 30 ++++++-------- .../ravin/views/reserva/SubmenuReserva.java | 2 +- 15 files changed, 95 insertions(+), 69 deletions(-) create mode 100644 src/main/java/org/ravin/utils/exceptions/ComandaEmMesaException.java create mode 100644 src/main/java/org/ravin/utils/exceptions/DataIndisponivelException.java diff --git a/src/main/java/org/ravin/App.java b/src/main/java/org/ravin/App.java index 5b36eb6..f83a5bf 100644 --- a/src/main/java/org/ravin/App.java +++ b/src/main/java/org/ravin/App.java @@ -1,8 +1,6 @@ package org.ravin; import org.ravin.utils.constants.Constants; -import org.ravin.utils.exceptions.EntidadeNaoEncontradaException; -import org.ravin.utils.exceptions.MesaNaoDisponivelException; import org.ravin.views.cardapio.SubmenuCardapio; import org.ravin.views.cliente.SubmenuCliente; import org.ravin.views.comanda.SubmenuComanda; @@ -15,7 +13,7 @@ public class App { - public static void main(String[] args) throws EntidadeNaoEncontradaException, MesaNaoDisponivelException { + public static void main(String[] args) { printLogotipo(); System.out.println(Constants.BEM_VINDO); mainMenu(); @@ -28,7 +26,7 @@ private static void printLogotipo() { } } - private static void mainMenu() throws EntidadeNaoEncontradaException, MesaNaoDisponivelException { + private static void mainMenu() { boolean exec = true; while (exec) { String opcao = solicitaEntradaDeDado(menuInicial()); @@ -42,7 +40,7 @@ private static void mainMenu() throws EntidadeNaoEncontradaException, MesaNaoDis } // Função para processar a opção do menu selecionada pelo usuário - private static boolean processaOpcaoMenu(String opcao) throws EntidadeNaoEncontradaException, MesaNaoDisponivelException { + private static boolean processaOpcaoMenu(String opcao) { switch (opcao) { case "1" -> { SubmenuCliente.menuCliente(); diff --git a/src/main/java/org/ravin/controllers/ReservaController.java b/src/main/java/org/ravin/controllers/ReservaController.java index 04865c8..12f4cc4 100644 --- a/src/main/java/org/ravin/controllers/ReservaController.java +++ b/src/main/java/org/ravin/controllers/ReservaController.java @@ -22,7 +22,13 @@ public ReservaController(IReservaService reservaService) { @Override public void inserir(Reserva reserva) throws MesaNaoDisponivelException { - reservaService.inserir(reserva); + try { + reservaService.inserir(reserva); + } catch (org.ravin.utils.exceptions.DataIndisponivelException e) { + throw new RuntimeException(e); + } catch (org.ravin.utils.exceptions.ComandaEmMesaException e) { + throw new RuntimeException(e); + } } @Override diff --git a/src/main/java/org/ravin/services/reserva/ReservaService.java b/src/main/java/org/ravin/services/reserva/ReservaService.java index f1adf70..ca60a36 100644 --- a/src/main/java/org/ravin/services/reserva/ReservaService.java +++ b/src/main/java/org/ravin/services/reserva/ReservaService.java @@ -14,6 +14,9 @@ import org.ravin.models.Reserva; import org.ravin.services.reserva.interfaces.IReservaService; import org.ravin.services.reserva.interfaces.IVerificarComandaEmMesaService; +import org.ravin.utils.enums.StatusMesa; +import org.ravin.utils.exceptions.ComandaEmMesaException; +import org.ravin.utils.exceptions.DataIndisponivelException; import org.ravin.utils.exceptions.MesaNaoDisponivelException; import java.util.Date; @@ -32,18 +35,33 @@ public ReservaService (IVerificarComandaEmMesaService verificarComandaService) { /** * Insere uma nova reserva. * - *

Este método tenta inserir uma nova reserva apenas se a data estiver disponível e não houver comanda associada à mesa. + *

Este método tenta inserir uma nova reserva apenas se a data e a mesa estiverem disponíveis e não houver comanda associada à mesa. + * Além disso, verifica se os parâmetros da reserva são válidos (não nulos). * - * @param reserva a reserva a ser inserida. - * @throws MesaNaoDisponivelException se a mesa não estiver disponível para a data selecionada. + * @param reserva a reserva a ser inserida. Não pode ser nula e deve conter uma data e mesa válidas. + * @throws IllegalArgumentException se a reserva, a data ou a mesa forem nulas. + * @throws MesaNaoDisponivelException se a mesa já estiver ocupada. + * @throws DataIndisponivelException se a data selecionada não estiver disponível para a mesa especificada. + * @throws ComandaEmMesaException se existir uma comanda associada à mesa selecionada. */ - @Override - public void inserir(Reserva reserva) throws MesaNaoDisponivelException { - if (estaDisponivel(reserva.getData()) && !verificarComandaService.verificarComandaEmMesa(reserva.getMesa())) { - inserir(reserva); - } else { - throw new MesaNaoDisponivelException("Mesa não disponível para a data selecionada."); + public void inserir(Reserva reserva) throws MesaNaoDisponivelException, DataIndisponivelException, ComandaEmMesaException { + if (reserva == null || reserva.getData() == null || reserva.getMesa() == null) { + throw new IllegalArgumentException("Reserva, data ou mesa não podem ser nulos."); + } + + if (reserva.getMesa().getStatusMesa() != StatusMesa.LIVRE) { + throw new MesaNaoDisponivelException("A mesa já está ocupada."); + } + + if (!estaDisponivel(reserva.getData(), reserva.getMesa())) { + throw new DataIndisponivelException("A data selecionada não está disponível."); + } + + if (verificarComandaService.verificarComandasAbertasEmMesa(reserva.getMesa())) { + throw new ComandaEmMesaException("Existe uma comanda associada à mesa selecionada."); } + + reservaRepository.inserir(reserva); } /** @@ -122,9 +140,9 @@ public boolean remover(Reserva reserva) { * @return {@code true} se a data estiver disponível, {@code false} caso contrário. */ @Override - public boolean estaDisponivel(Date data) { + public boolean estaDisponivel(Date data, Mesa mesa) { for (Reserva reserva : reservaRepository.recuperarTodos()) { - if (reserva.getData().equals(data)) { + if (reserva.getData().equals(data) && reserva.getMesa().equals(mesa)) { return false; } } diff --git a/src/main/java/org/ravin/services/reserva/VerificarComandaEmMesaService.java b/src/main/java/org/ravin/services/reserva/VerificarComandaEmMesaService.java index 7cb086c..dd15ee6 100644 --- a/src/main/java/org/ravin/services/reserva/VerificarComandaEmMesaService.java +++ b/src/main/java/org/ravin/services/reserva/VerificarComandaEmMesaService.java @@ -38,7 +38,7 @@ public class VerificarComandaEmMesaService implements IVerificarComandaEmMesaSer * @return true se houver comandas ativas vinculadas à mesa, false caso contrário. */ @Override - public boolean verificarComandaEmMesa(Mesa mesa) { + public boolean verificarComandasAbertasEmMesa(Mesa mesa) { List comandasAtivas = comandaRepository.recuperarListaPorMesaEStatus(mesa, StatusComanda.ABERTA); return !comandasAtivas.isEmpty(); } diff --git a/src/main/java/org/ravin/services/reserva/interfaces/IReservaService.java b/src/main/java/org/ravin/services/reserva/interfaces/IReservaService.java index 8254e97..64330d0 100644 --- a/src/main/java/org/ravin/services/reserva/interfaces/IReservaService.java +++ b/src/main/java/org/ravin/services/reserva/interfaces/IReservaService.java @@ -3,6 +3,8 @@ import org.ravin.models.Cliente; import org.ravin.models.Mesa; import org.ravin.models.Reserva; +import org.ravin.utils.exceptions.ComandaEmMesaException; +import org.ravin.utils.exceptions.DataIndisponivelException; import org.ravin.utils.exceptions.MesaNaoDisponivelException; import java.util.Date; @@ -11,7 +13,7 @@ public interface IReservaService { - void inserir(Reserva reserva) throws MesaNaoDisponivelException; + void inserir(Reserva reserva) throws MesaNaoDisponivelException, DataIndisponivelException, ComandaEmMesaException; Optional recuperarPorId(int id); @@ -28,5 +30,5 @@ public interface IReservaService { List recuperarReservasPorMesa(Mesa mesa); - boolean estaDisponivel(Date data); + public boolean estaDisponivel(Date data, Mesa mesa) ; } diff --git a/src/main/java/org/ravin/services/reserva/interfaces/IVerificarComandaEmMesaService.java b/src/main/java/org/ravin/services/reserva/interfaces/IVerificarComandaEmMesaService.java index 245b650..4dfd4e5 100644 --- a/src/main/java/org/ravin/services/reserva/interfaces/IVerificarComandaEmMesaService.java +++ b/src/main/java/org/ravin/services/reserva/interfaces/IVerificarComandaEmMesaService.java @@ -3,5 +3,5 @@ import org.ravin.models.Mesa; public interface IVerificarComandaEmMesaService { - boolean verificarComandaEmMesa(Mesa mesa); + boolean verificarComandasAbertasEmMesa(Mesa mesa); } diff --git a/src/main/java/org/ravin/utils/exceptions/ComandaEmMesaException.java b/src/main/java/org/ravin/utils/exceptions/ComandaEmMesaException.java new file mode 100644 index 0000000..22ba331 --- /dev/null +++ b/src/main/java/org/ravin/utils/exceptions/ComandaEmMesaException.java @@ -0,0 +1,11 @@ +package org.ravin.utils.exceptions; + +public class ComandaEmMesaException extends Exception { + public ComandaEmMesaException(String message) { + super(message); + } + + public ComandaEmMesaException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/org/ravin/utils/exceptions/DataIndisponivelException.java b/src/main/java/org/ravin/utils/exceptions/DataIndisponivelException.java new file mode 100644 index 0000000..32e2057 --- /dev/null +++ b/src/main/java/org/ravin/utils/exceptions/DataIndisponivelException.java @@ -0,0 +1,11 @@ +package org.ravin.utils.exceptions; + +public class DataIndisponivelException extends Exception { + public DataIndisponivelException(String message) { + super(message); + } + + public DataIndisponivelException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/org/ravin/views/View.java b/src/main/java/org/ravin/views/View.java index b1ddc19..17306ca 100644 --- a/src/main/java/org/ravin/views/View.java +++ b/src/main/java/org/ravin/views/View.java @@ -5,7 +5,7 @@ public class View { - public final static ImageIcon icon = new ImageIcon(Objects.requireNonNull(View.class.getResource("/images/logo.png"))); + public final static ImageIcon icon = new ImageIcon(Objects.requireNonNull(View.class.getResource("../../../images/logo.png"))); public static void exibeDialogo(String mensagem){ // JOptionPane.showMessageDialog(null, mensagem); diff --git a/src/main/java/org/ravin/views/estoque/RecuperarEstoqueView.java b/src/main/java/org/ravin/views/estoque/RecuperarEstoqueView.java index 2cb29a0..31bb98c 100644 --- a/src/main/java/org/ravin/views/estoque/RecuperarEstoqueView.java +++ b/src/main/java/org/ravin/views/estoque/RecuperarEstoqueView.java @@ -24,15 +24,19 @@ static void pesquisarEstoque(IEstoqueController estoqueController) { } static void listarEstoque(IEstoqueController estoqueController) { - String texto = ""; + StringBuilder texto = new StringBuilder(); List listaEstoque = estoqueController.recuperarTodos(); if(listaEstoque.size() > 0){ for (Estoque estoque : listaEstoque) { - texto += "Código: " + estoque.getProduto().getCodigo() + " Quantidade: " + estoque.getQuantidade() + " Nome: " + estoque.getProduto().getNome()+ (estoque.getProduto().isAtivo() ? " " : " (INATIVO) ") + "\n"; + texto.append("Código: ").append(estoque.getProduto().getCodigo()). + append(" Quantidade: ").append(estoque.getQuantidade()). + append(" Nome: ").append(estoque.getProduto().getNome()). + append(estoque.getProduto().isAtivo() ? " " : " (INATIVO) "). + append("\n"); } }else{ - texto = "Estoque vazio!"; + texto = new StringBuilder("Estoque vazio!"); } - exibeDialogo(texto); + exibeDialogo(texto.toString()); } } diff --git a/src/main/java/org/ravin/views/mesa/CadastrarMesaView.java b/src/main/java/org/ravin/views/mesa/CadastrarMesaView.java index e365389..a72a52c 100644 --- a/src/main/java/org/ravin/views/mesa/CadastrarMesaView.java +++ b/src/main/java/org/ravin/views/mesa/CadastrarMesaView.java @@ -15,7 +15,6 @@ public class CadastrarMesaView { static void cadastrarMesa(IMesaController mesaController) { try { - String nome = solicitaEntradaDeDadoValida("Informe o nome da Mesa: "); String codigo = solicitaEntradaDeDadoValida("Informe o código da Mesa: "); int numero = Integer.parseInt(solicitaEntradaDeDadoValida("Informe o número da Mesa: ")); int quantidadeMaxima = Integer.parseInt(solicitaEntradaDeDadoValida("Informe a quantidade máxima de lugares da Mesa: ")); @@ -28,7 +27,7 @@ static void cadastrarMesa(IMesaController mesaController) { mesaController.inserir(mesa); exibeDialogo("Mesa cadastrada com sucesso!"); - imprimeMesa(mesaController.recuperarPorCodigo(mesa.getCodigo())); + imprimeMesa(mesa); } catch (InputMismatchException e) { exibeDialogo("Por favor, insira os dados corretamente!\nCadastro não finalizado..."); e.printStackTrace(); diff --git a/src/main/java/org/ravin/views/mesa/SubmenuMesa.java b/src/main/java/org/ravin/views/mesa/SubmenuMesa.java index 8d78c65..6cd1c42 100644 --- a/src/main/java/org/ravin/views/mesa/SubmenuMesa.java +++ b/src/main/java/org/ravin/views/mesa/SubmenuMesa.java @@ -53,7 +53,7 @@ static void imprimeMesa(Mesa mesa) { "ID: " + mesa.getId() + "\n Código: " + mesa.getCodigo() + "\n Número: " + mesa.getNumero() + - "\n Funcionário responsável: " + mesa.getFuncionario().getNome() + + "\n Funcionário responsável: " + (mesa.getFuncionario() != null ? mesa.getFuncionario().getNome() : "N/A") + "\n Quantidade Máxima: " + mesa.getQuantidadeMaxima() + "\n Status: " + mesa.getStatusMesa().toString() + "\n Criado Em: " + mesa.getCriadoEm() + diff --git a/src/main/java/org/ravin/views/reserva/CadastrarReservaView.java b/src/main/java/org/ravin/views/reserva/CadastrarReservaView.java index ebba13d..be2f807 100644 --- a/src/main/java/org/ravin/views/reserva/CadastrarReservaView.java +++ b/src/main/java/org/ravin/views/reserva/CadastrarReservaView.java @@ -8,36 +8,22 @@ import org.ravin.models.Reserva; import org.ravin.utils.DateUtils; import org.ravin.utils.exceptions.EntidadeNaoEncontradaException; +import org.ravin.utils.exceptions.MesaNaoDisponivelException; import java.util.Date; -import java.util.InputMismatchException; import static org.ravin.views.View.exibeDialogo; import static org.ravin.views.View.solicitaEntradaDeDado; -import static org.ravin.views.cliente.CadastrarClienteView.cadastrarCliente; import static org.ravin.views.reserva.SubmenuReserva.imprimeReserva; public class CadastrarReservaView { static void cadastrarReserva(IReservaController reservaController, IClienteController clienteController, IMesaController mesaController) { - Cliente cliente = new Cliente(); try { String cpfCliente = solicitaEntradaDeDado("Informe o CPF do cliente:"); - cliente = clienteController.recuperarPorCpf(cpfCliente); - if (cliente == null) { - exibeDialogo("Cliente não encontrado! Vamos cadastrá-lo agora."); - cadastrarCliente(clienteController); - cliente = clienteController.recuperarPorCpf(cpfCliente); - if (cliente == null) { - exibeDialogo("Ocorreu um erro ao tentar cadastrar o cliente. Tente novamente."); - return; - } - } + Cliente cliente = clienteController.recuperarPorCpf(cpfCliente); String codigo = solicitaEntradaDeDado("Informe o Código da mesa:"); Mesa mesa = mesaController.recuperarPorCodigo(codigo); - if (mesa == null) { - exibeDialogo("Mesa não encontrada!"); - } Date data = DateUtils.stringToDate(solicitaEntradaDeDado("Data da reserva: \nFormato: dd/mm/yyyy")); @@ -48,11 +34,8 @@ static void cadastrarReserva(IReservaController reservaController, IClienteContr reservaController.inserir(reserva); exibeDialogo("Reserva inserida com sucesso!"); imprimeReserva(reserva); - } catch(EntidadeNaoEncontradaException e) { - e.printStackTrace(); - } catch(InputMismatchException e){ - System.out.println(e.getMessage()); - e.printStackTrace(); + } catch(EntidadeNaoEncontradaException | MesaNaoDisponivelException e) { + exibeDialogo(e.getMessage()); } catch (Exception e) { exibeDialogo("Um erro ocorreu!\nCadastro não finalizado..."); e.printStackTrace(); diff --git a/src/main/java/org/ravin/views/reserva/RecuperarReservaView.java b/src/main/java/org/ravin/views/reserva/RecuperarReservaView.java index 598a86c..3610975 100644 --- a/src/main/java/org/ravin/views/reserva/RecuperarReservaView.java +++ b/src/main/java/org/ravin/views/reserva/RecuperarReservaView.java @@ -22,36 +22,30 @@ static void listarReservas(IReservaController reservaController) { } static void listarReservasPorCliente(IReservaController reservaController, IClienteController clienteController) { + String cpf = solicitaEntradaDeDado("Informe o CPF do cliente para listar suas reservas:"); try { - String cpf = solicitaEntradaDeDado("Informe o CPF do cliente para listar suas reservas:"); Cliente cliente = clienteController.recuperarPorCpf(cpf); - - if (cliente != null) { - StringBuilder texto = new StringBuilder(); - for (Reserva reserva : reservaController.recuperarReservasPorCliente(cliente)) { - texto.append(reserva.toString()).append("\n"); - } - exibeDialogo(texto.toString()); - } else { - exibeDialogo("Cliente não encontrado com o CPF informado!"); + StringBuilder texto = new StringBuilder(); + for (Reserva reserva : reservaController.recuperarReservasPorCliente(cliente)) { + texto.append(reserva.toString()).append("\n"); } - } catch (EntidadeNaoEncontradaException e) { - exibeDialogo("Cliente não encontrado com o CPF informado!"); + exibeDialogo(texto.toString()); + } catch(EntidadeNaoEncontradaException e){ + exibeDialogo(e.getMessage()); } } - static void listarReservasPorMesa(IReservaController reservaController, IMesaController mesaController) throws EntidadeNaoEncontradaException { + static void listarReservasPorMesa(IReservaController reservaController, IMesaController mesaController) { String codigoMesa = solicitaEntradaDeDado("Informe o Código da mesa para listar suas reservas:"); - Mesa mesa = mesaController.recuperarPorCodigo(codigoMesa); - - if (mesa != null) { + try { + Mesa mesa = mesaController.recuperarPorCodigo(codigoMesa); StringBuilder texto = new StringBuilder(); for (Reserva reserva : reservaController.recuperarReservasPorMesa(mesa)) { texto.append(reserva.toString()).append("\n"); } exibeDialogo(texto.toString()); - } else { - exibeDialogo("Mesa não encontrada com o Código informado!"); + } catch(EntidadeNaoEncontradaException e) { + exibeDialogo(e.getMessage()); } } } diff --git a/src/main/java/org/ravin/views/reserva/SubmenuReserva.java b/src/main/java/org/ravin/views/reserva/SubmenuReserva.java index 88f27be..4df4555 100644 --- a/src/main/java/org/ravin/views/reserva/SubmenuReserva.java +++ b/src/main/java/org/ravin/views/reserva/SubmenuReserva.java @@ -25,7 +25,7 @@ import static org.ravin.views.reserva.RecuperarReservaView.*; public class SubmenuReserva extends View { - public static void menuReserva() throws EntidadeNaoEncontradaException { + public static void menuReserva() { // Injeção de Dependência IVerificarComandaEmMesaService verificarComandaEmMesaService = new VerificarComandaEmMesaService();