Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/ExercicioFinal6/envio/GerenciadorEnvio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ExercicioFinal6.envio;

public class GerenciadorEnvio {
public void enviarPedido(String endereco){
System.out.println("Enviando pedido para: " + endereco);
}
}
44 changes: 44 additions & 0 deletions src/ExercicioFinal6/model/Pedido.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package ExercicioFinal6.model;

import java.util.List;

public class Pedido {
List<Produto> itens;
String status;
String enderecoEntrega;

public Pedido(List<Produto> itens, String enderecoEntrega ) {
this.itens = itens;
this.status = "PENDENTE";
this.enderecoEntrega = enderecoEntrega;
}

public List<Produto> 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;
}}
23 changes: 23 additions & 0 deletions src/ExercicioFinal6/model/Produto.java
Original file line number Diff line number Diff line change
@@ -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;
}



}
5 changes: 5 additions & 0 deletions src/ExercicioFinal6/notificacao/Notificacao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package ExercicioFinal6.notificacao;

public interface Notificacao {
void notificar(String mensagem);
}
9 changes: 9 additions & 0 deletions src/ExercicioFinal6/notificacao/NotificadorEmail.java
Original file line number Diff line number Diff line change
@@ -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);

}
}
9 changes: 9 additions & 0 deletions src/ExercicioFinal6/notificacao/NotificadorSMS.java
Original file line number Diff line number Diff line change
@@ -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);

}
}
10 changes: 10 additions & 0 deletions src/ExercicioFinal6/pagamento/Boleto.java
Original file line number Diff line number Diff line change
@@ -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);

}
}
10 changes: 10 additions & 0 deletions src/ExercicioFinal6/pagamento/CartaoCredito.java
Original file line number Diff line number Diff line change
@@ -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);

}
}
6 changes: 6 additions & 0 deletions src/ExercicioFinal6/pagamento/MetodoPagamento.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package ExercicioFinal6.pagamento;

public interface MetodoPagamento {
void processarPagamento(double valor);

}
9 changes: 9 additions & 0 deletions src/ExercicioFinal6/pagamento/Pix.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
14 changes: 14 additions & 0 deletions src/ExercicioFinal6/pagamento/ProcessarPagamento.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ExercicioFinal6.pagamento;

public class ProcessarPagamento<T extends MetodoPagamento> {
T metodoPagamento;

public ProcessarPagamento(T metodoPagamento) {
this.metodoPagamento = metodoPagamento;
}


public void processar(double valor) {
metodoPagamento.processarPagamento(valor);
}
}
34 changes: 34 additions & 0 deletions src/ExercicioFinal6/repository/JpaPedidoRepositorio.java
Original file line number Diff line number Diff line change
@@ -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<Pedido> buscarTodos() {
return null;
}

@Override
public List<Pedido> buscarPorStatus(String status) {
return null;
}
}
9 changes: 9 additions & 0 deletions src/ExercicioFinal6/repository/PedidoRepositorio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package ExercicioFinal6.repository;

import ExercicioFinal6.model.Pedido;

import java.util.List;

public interface PedidoRepositorio extends Repositorio<Pedido, Long> {
List<Pedido> buscarPorStatus(String status);
}
11 changes: 11 additions & 0 deletions src/ExercicioFinal6/repository/Repositorio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ExercicioFinal6.repository;

import java.util.List;

public interface Repositorio<T, ID> {
void salvar(T entity);
void atualizar(T entity);
void deletar(T entity);
T buscarPorId(ID id);
List<T> buscarTodos();
}
63 changes: 63 additions & 0 deletions src/ExercicioFinal6/service/PedidoService.java
Original file line number Diff line number Diff line change
@@ -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!");
}
}
40 changes: 32 additions & 8 deletions src/Main.java
Original file line number Diff line number Diff line change
@@ -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<Produto> 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
Expand Down Expand Up @@ -49,6 +73,6 @@ public static void main(String[] args) {
}

public static void calcular(Imposto imposto) {
imposto.imprimir();
imposto.imprimir();*/
}
}
1 change: 0 additions & 1 deletion src/exemplo/ecommerce/Produto.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

public class Produto implements Comparable<Produto> {


private Integer id;
private String descricao;
private BigDecimal valor;
Expand Down