diff --git a/src/ExercicioFinal6/envio/GerenciadorEnvio.java b/src/ExercicioFinal6/envio/GerenciadorEnvio.java new file mode 100644 index 0000000..60bf4e3 --- /dev/null +++ b/src/ExercicioFinal6/envio/GerenciadorEnvio.java @@ -0,0 +1,7 @@ +package ExercicioFinal6.envio; + +public class GerenciadorEnvio { + public void enviarPedido(String endereco){ + System.out.println("Enviando pedido para: " + endereco); + } +} diff --git a/src/ExercicioFinal6/model/Pedido.java b/src/ExercicioFinal6/model/Pedido.java new file mode 100644 index 0000000..396eb00 --- /dev/null +++ b/src/ExercicioFinal6/model/Pedido.java @@ -0,0 +1,44 @@ +package ExercicioFinal6.model; + +import java.util.List; + +public class Pedido { + List itens; + String status; + String enderecoEntrega; + + public Pedido(List itens, String enderecoEntrega ) { + this.itens = itens; + this.status = "PENDENTE"; + this.enderecoEntrega = enderecoEntrega; + } + + public List getItens() { + return itens; + } + + public double calcularTotal() { + return itens.stream() + .mapToDouble(Produto::getPreco) + .sum(); + } + + public void addItem(Produto produto) { + itens.add(produto); + } + + public void removerItem(Produto produto) { + itens.remove(produto); + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getEnderecoEntrega() { + return enderecoEntrega; + }} diff --git a/src/ExercicioFinal6/model/Produto.java b/src/ExercicioFinal6/model/Produto.java new file mode 100644 index 0000000..ff3e1fe --- /dev/null +++ b/src/ExercicioFinal6/model/Produto.java @@ -0,0 +1,23 @@ +package ExercicioFinal6.model; + +public class Produto { + + private String nome; + private double preco; + + public Produto(String nome, double preco) { + this.nome = nome; + this.preco = preco; + } + + public String getNome() { + return nome; + } + + public double getPreco() { + return preco; + } + + + +} diff --git a/src/ExercicioFinal6/notificacao/Notificacao.java b/src/ExercicioFinal6/notificacao/Notificacao.java new file mode 100644 index 0000000..ae8b50b --- /dev/null +++ b/src/ExercicioFinal6/notificacao/Notificacao.java @@ -0,0 +1,5 @@ +package ExercicioFinal6.notificacao; + +public interface Notificacao { + void notificar(String mensagem); +} diff --git a/src/ExercicioFinal6/notificacao/NotificadorEmail.java b/src/ExercicioFinal6/notificacao/NotificadorEmail.java new file mode 100644 index 0000000..6e30c1a --- /dev/null +++ b/src/ExercicioFinal6/notificacao/NotificadorEmail.java @@ -0,0 +1,9 @@ +package ExercicioFinal6.notificacao; + +public class NotificadorEmail implements Notificacao { + @Override + public void notificar(String mensagem) { + System.out.println("Enviando notificação por Email: " + mensagem); + + } +} diff --git a/src/ExercicioFinal6/notificacao/NotificadorSMS.java b/src/ExercicioFinal6/notificacao/NotificadorSMS.java new file mode 100644 index 0000000..da5d216 --- /dev/null +++ b/src/ExercicioFinal6/notificacao/NotificadorSMS.java @@ -0,0 +1,9 @@ +package ExercicioFinal6.notificacao; + +public class NotificadorSMS implements Notificacao { + @Override + public void notificar(String mensagem) { + System.out.println("Enviando notificação por SMS: " + mensagem); + + } +} diff --git a/src/ExercicioFinal6/pagamento/Boleto.java b/src/ExercicioFinal6/pagamento/Boleto.java new file mode 100644 index 0000000..d36bc3f --- /dev/null +++ b/src/ExercicioFinal6/pagamento/Boleto.java @@ -0,0 +1,10 @@ +package ExercicioFinal6.pagamento; + +public class Boleto implements MetodoPagamento { + + @Override + public void processarPagamento(double valor) { + System.out.println("Processando pagamento via Boleto no valor de: R$" + valor); + + } +} diff --git a/src/ExercicioFinal6/pagamento/CartaoCredito.java b/src/ExercicioFinal6/pagamento/CartaoCredito.java new file mode 100644 index 0000000..e4a3210 --- /dev/null +++ b/src/ExercicioFinal6/pagamento/CartaoCredito.java @@ -0,0 +1,10 @@ +package ExercicioFinal6.pagamento; + +public class CartaoCredito implements MetodoPagamento { + + @Override + public void processarPagamento(double valor) { + System.out.println("Processando pagamento via Cartão de Crédito no valor de: R$" + valor); + + } +} diff --git a/src/ExercicioFinal6/pagamento/MetodoPagamento.java b/src/ExercicioFinal6/pagamento/MetodoPagamento.java new file mode 100644 index 0000000..ed863cd --- /dev/null +++ b/src/ExercicioFinal6/pagamento/MetodoPagamento.java @@ -0,0 +1,6 @@ +package ExercicioFinal6.pagamento; + +public interface MetodoPagamento { + void processarPagamento(double valor); + +} diff --git a/src/ExercicioFinal6/pagamento/Pix.java b/src/ExercicioFinal6/pagamento/Pix.java new file mode 100644 index 0000000..c73fbd8 --- /dev/null +++ b/src/ExercicioFinal6/pagamento/Pix.java @@ -0,0 +1,9 @@ +package ExercicioFinal6.pagamento; + +public class Pix implements MetodoPagamento{ + + @Override + public void processarPagamento(double valor) { + System.out.println("Processando pagamento via Pix no valor de: R$" + valor); + } +} diff --git a/src/ExercicioFinal6/pagamento/ProcessarPagamento.java b/src/ExercicioFinal6/pagamento/ProcessarPagamento.java new file mode 100644 index 0000000..a01957b --- /dev/null +++ b/src/ExercicioFinal6/pagamento/ProcessarPagamento.java @@ -0,0 +1,14 @@ +package ExercicioFinal6.pagamento; + +public class ProcessarPagamento { + T metodoPagamento; + + public ProcessarPagamento(T metodoPagamento) { + this.metodoPagamento = metodoPagamento; + } + + + public void processar(double valor) { + metodoPagamento.processarPagamento(valor); + } +} diff --git a/src/ExercicioFinal6/repository/JpaPedidoRepositorio.java b/src/ExercicioFinal6/repository/JpaPedidoRepositorio.java new file mode 100644 index 0000000..cd0dbe1 --- /dev/null +++ b/src/ExercicioFinal6/repository/JpaPedidoRepositorio.java @@ -0,0 +1,34 @@ +package ExercicioFinal6.repository; + +import ExercicioFinal6.model.Pedido; +import java.util.List; + +public class JpaPedidoRepositorio implements PedidoRepositorio { + + @Override + public void salvar(Pedido pedido) { + } + + @Override + public void atualizar(Pedido pedido) { + } + + @Override + public void deletar(Pedido pedido) { + } + + @Override + public Pedido buscarPorId(Long id) { + return null; + } + + @Override + public List buscarTodos() { + return null; + } + + @Override + public List buscarPorStatus(String status) { + return null; + } +} diff --git a/src/ExercicioFinal6/repository/PedidoRepositorio.java b/src/ExercicioFinal6/repository/PedidoRepositorio.java new file mode 100644 index 0000000..b151394 --- /dev/null +++ b/src/ExercicioFinal6/repository/PedidoRepositorio.java @@ -0,0 +1,9 @@ +package ExercicioFinal6.repository; + +import ExercicioFinal6.model.Pedido; + +import java.util.List; + +public interface PedidoRepositorio extends Repositorio { + List buscarPorStatus(String status); +} diff --git a/src/ExercicioFinal6/repository/Repositorio.java b/src/ExercicioFinal6/repository/Repositorio.java new file mode 100644 index 0000000..7fb4709 --- /dev/null +++ b/src/ExercicioFinal6/repository/Repositorio.java @@ -0,0 +1,11 @@ +package ExercicioFinal6.repository; + +import java.util.List; + +public interface Repositorio { + void salvar(T entity); + void atualizar(T entity); + void deletar(T entity); + T buscarPorId(ID id); + List buscarTodos(); +} diff --git a/src/ExercicioFinal6/service/PedidoService.java b/src/ExercicioFinal6/service/PedidoService.java new file mode 100644 index 0000000..31ec1ff --- /dev/null +++ b/src/ExercicioFinal6/service/PedidoService.java @@ -0,0 +1,63 @@ +package ExercicioFinal6.service; + +import ExercicioFinal6.envio.GerenciadorEnvio; +import ExercicioFinal6.model.Pedido; +import ExercicioFinal6.pagamento.ProcessarPagamento; +import ExercicioFinal6.repository.PedidoRepositorio; + +public class PedidoService { + private final PedidoRepositorio pedidoRepositorio; + private final ProcessarPagamento processadorPagamento; + private final GerenciadorEnvio gerenciadorEnvio; + + public PedidoService(PedidoRepositorio pedidoRepositorio, + ProcessarPagamento processadorPagamento, + GerenciadorEnvio gerenciadorEnvio) { + this.pedidoRepositorio = pedidoRepositorio; + this.processadorPagamento = processadorPagamento; + this.gerenciadorEnvio = gerenciadorEnvio; + } + + public void criarNovoPedido(Pedido pedido) { + pedidoRepositorio.salvar(pedido); + System.out.println("Novo pedido criado com sucesso! ID "); + } + + public void processarPagamento(long pedidoId) { + Pedido pedido = pedidoRepositorio.buscarPorId(pedidoId); + + if (pedido == null) { + System.err.println("Pedido não encontrado! ID: " + pedidoId); + return; + } + + if (!"PENDENTE".equalsIgnoreCase(pedido.getStatus())) { + System.out.println("Pedido #" + pedidoId + " já foi processado. Status atual: " + pedido.getStatus()); + return; + } + + processadorPagamento.processar(pedido.calcularTotal()); + pedido.setStatus("PAGO"); + pedidoRepositorio.atualizar(pedido); + System.out.println("💳 Pedido #" + pedidoId + " pago com sucesso!"); + } + + public void despacharPedido(long pedidoId) { + Pedido pedido = pedidoRepositorio.buscarPorId(pedidoId); + + if (pedido == null) { + System.err.println("Pedido não encontrado! ID: " + pedidoId); + return; + } + + if (!"PAGO".equalsIgnoreCase(pedido.getStatus())) { + System.out.println("Pedido #" + pedidoId + " não pode ser despachado. Status atual: " + pedido.getStatus()); + return; + } + + gerenciadorEnvio.enviarPedido(pedido.getEnderecoEntrega()); + pedido.setStatus("ENVIADO"); + pedidoRepositorio.atualizar(pedido); + System.out.println("Pedido #" + pedidoId + " enviado com sucesso!"); + } +} diff --git a/src/Main.java b/src/Main.java index fb31f50..72f3a61 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,16 +1,40 @@ -import exemplo.ecommerce.Produto; -import exemplo.imposto.ICMS; -import exemplo.imposto.IOF; -import exemplo.imposto.Imposto; -import exemplo.imposto.ImpostoRecord; +import ExercicioFinal6.envio.GerenciadorEnvio; +import ExercicioFinal6.model.Pedido; +import ExercicioFinal6.model.Produto; +import ExercicioFinal6.pagamento.CartaoCredito; +import ExercicioFinal6.pagamento.MetodoPagamento; +import ExercicioFinal6.pagamento.ProcessarPagamento; +import ExercicioFinal6.repository.JpaPedidoRepositorio; +import ExercicioFinal6.repository.PedidoRepositorio; +import ExercicioFinal6.service.PedidoService; -import java.math.BigDecimal; import java.util.*; public class Main { public static void main(String[] args) { + PedidoRepositorio pedidoRepositorio = new JpaPedidoRepositorio(); - //Perecivel produto = new Produto(); + MetodoPagamento pagamentoCartao = new CartaoCredito(); + ProcessarPagamento processadorPagamento = new ProcessarPagamento(pagamentoCartao); + + GerenciadorEnvio gerenciadorEnvio = new GerenciadorEnvio(); + + PedidoService pedidoService = new PedidoService(pedidoRepositorio, processadorPagamento, gerenciadorEnvio); + + Produto motoserra = new Produto("Motosserra Husqvarna", 1500.00); + Produto capacete = new Produto("Capacete de Segurança", 300.00); + Produto luvas = new Produto("Luvas Anticorte", 50.00); + + List itensPedido = List.of(motoserra, capacete, luvas); + + Pedido pedido = new Pedido(itensPedido, "Rua das Flores, 123 - São Paulo/SP"); + + // fluxo do caso de uso + pedidoService.criarNovoPedido(pedido); + pedidoService.processarPagamento(1L); + pedidoService.despacharPedido(1L); + + /* //Perecivel produto = new Produto(); //processar(produto); //ICMS, IOF @@ -49,6 +73,6 @@ public static void main(String[] args) { } public static void calcular(Imposto imposto) { - imposto.imprimir(); + imposto.imprimir();*/ } } \ No newline at end of file diff --git a/src/exemplo/ecommerce/Produto.java b/src/exemplo/ecommerce/Produto.java index 41b3610..338ca0d 100644 --- a/src/exemplo/ecommerce/Produto.java +++ b/src/exemplo/ecommerce/Produto.java @@ -5,7 +5,6 @@ public class Produto implements Comparable { - private Integer id; private String descricao; private BigDecimal valor;