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

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: