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();