import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/* ========= MODEL ========= */
class Produto {
Long id;
String nome;
int quantidade;
Produto(Long id, String nome) {
this.id = id;
this.nome = nome;
this.quantidade = 0;
}
}
class MovimentacaoEstoque {
String tipo; // ENTRADA ou SAIDA
int quantidade;
LocalDateTime data;
MovimentacaoEstoque(String tipo, int quantidade) {
this.tipo = tipo;
this.quantidade = quantidade;
this.data = LocalDateTime.now();
}
}
/* ========= REPOSITORY (simulado) ========= */
class ProdutoRepository {
List<Produto> produtos = new ArrayList<>();
void save(Produto produto) {
produtos.add(produto);
}
Produto findById(Long id) {
return produtos.stream()
.filter(p -> p.id.equals(id))
.findFirst()
.orElse(null);
}
List<Produto> findAll() {
return produtos;
}
}
/* ========= SERVICE ========= */
class EstoqueService {
ProdutoRepository repository;
List<MovimentacaoEstoque> historico = new ArrayList<>();
EstoqueService(ProdutoRepository repository) {
this.repository = repository;
}
void cadastrarProduto(Long id, String nome) {
repository.save(new Produto(id, nome));
System.out.println("✔ Produto cadastrado: " + nome);
}
void entradaEstoque(Long produtoId, int qtd) {
Produto p = repository.findById(produtoId);
p.quantidade += qtd;
historico.add(new MovimentacaoEstoque("ENTRADA", qtd));
}
void saidaEstoque(Long produtoId, int qtd) {
Produto p = repository.findById(produtoId);
p.quantidade -= qtd;
historico.add(new MovimentacaoEstoque("SAIDA", qtd));
}
void listarProdutos() {
repository.findAll().forEach(p ->
System.out.println(p.id + " - " + p.nome + " | Estoque: " + p.quantidade)
);
}
void historicoMovimentacoes() {
historico.forEach(h ->
System.out.println(h.tipo + " - " + h.quantidade + " - " + h.data)
);
}
}
/* ========= CONTROLLER (simulado) ========= */
public class Main {
public static void main(String[] args) {
ProdutoRepository repository = new ProdutoRepository();
EstoqueService service = new EstoqueService(repository);
// Simulando chamadas REST
service.cadastrarProduto(1L, "Açúcar");
service.cadastrarProduto(2L, "Etanol");
service.entradaEstoque(1L, 100);
service.saidaEstoque(1L, 30);
service.entradaEstoque(2L, 200);
System.out.println("\n📦 PRODUTOS:");
service.listarProdutos();
System.out.println("\n📊 HISTÓRICO:");
service.historicoMovimentacoes();
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: