API REST para gerenciamento de estoque com suporte a produtos, depósitos, movimentações e reservas.
├── cmd/
│ └── migrate/ # Comando para rodar migrations
├── config/ # Configurações e variáveis de ambiente
├── db/
│ ├── connect.go # Conexão com PostgreSQL
│ ├── migrator.go # Sistema de migrations
│ └── migrations/ # Arquivos SQL de migrations
├── handlers/ # Handlers HTTP
├── middleware/ # Middlewares (Logger, CORS)
├── models/ # Modelos de dados
├── repository/ # Camada de acesso a dados
├── routes/ # Configuração de rotas
└── main.go # Ponto de entrada
Crie um arquivo .env na raiz do projeto:
DATABASE_URL=postgresql://postgres:senha@localhost:5432/apistock?sslmode=disable
PORT=:8080Execute as migrations:
# Compilar o comando de migrations
go build -o bin/migrate ./cmd/migrate
# Executar migrations
./bin/migrate -dir=./db/migrations# Compilar
go build -o bin/apistock .
# Executar
./bin/apistockGET /health- Verifica status da API
GET /api/products- Lista produtos (query:?active=true)GET /api/products/{id}- Busca produto por IDPOST /api/products- Cria produtoPUT /api/products/{id}- Atualiza produtoDELETE /api/products/{id}- Remove produto
GET /api/warehouses- Lista depósitosGET /api/warehouses/{id}- Busca depósito por IDPOST /api/warehouses- Cria depósitoPUT /api/warehouses/{id}- Atualiza depósitoDELETE /api/warehouses/{id}- Remove depósito
GET /api/stock/balances- Lista todos os saldos (query:?warehouse_id=uuidou?product_id=uuid)GET /api/stock/balances/{warehouse_id}/{product_id}- Saldo específico
GET /api/stock/movements- Lista movimentações (query:?type=IN|OUT|TRANSFER|ADJUSTe?status=DRAFT|POSTED|CANCELED)GET /api/stock/movements/{id}- Busca movimentação com linhasPOST /api/stock/movements- Cria movimentaçãoPOST /api/stock/movements/{id}/post- Efetiva movimentação (atualiza saldos)POST /api/stock/movements/{id}/cancel- Cancela movimentação em rascunho
GET /api/stock/reservations- Lista reservas (query:?status=ACTIVE|RELEASED|CONSUMED|CANCELED)GET /api/stock/reservations/{id}- Busca reserva por IDPOST /api/stock/reservations- Cria reservaPUT /api/stock/reservations/{id}/status- Atualiza status da reserva
curl -X POST http://localhost:8080/api/products \
-H "Content-Type: application/json" \
-d '{"sku": "PROD001", "name": "Produto Teste", "unit": "UN"}'curl -X POST http://localhost:8080/api/warehouses \
-H "Content-Type: application/json" \
-d '{"code": "WH01", "name": "Depósito Principal"}'curl -X POST http://localhost:8080/api/stock/movements \
-H "Content-Type: application/json" \
-d '{
"type": "IN",
"notes": "Entrada de mercadoria",
"lines": [
{
"product_id": "uuid-do-produto",
"to_warehouse_id": "uuid-do-deposito",
"qty": 100,
"unit_cost": 10.50
}
]
}'curl -X POST http://localhost:8080/api/stock/movements/{id}/post- IN: Entrada de mercadoria (requer
to_warehouse_id) - OUT: Saída de mercadoria (requer
from_warehouse_id) - TRANSFER: Transferência entre depósitos (requer ambos)
- ADJUST: Ajuste de estoque (usa
to_warehouse_idpara +,from_warehouse_idpara -)
- DRAFT: Rascunho (pode ser editado ou cancelado)
- POSTED: Efetivado (saldos atualizados)
- CANCELED: Cancelado
- ACTIVE: Reserva ativa (quantidade bloqueada)
- RELEASED: Liberada (quantidade disponível novamente)
- CONSUMED: Consumida (dá baixa no estoque)
- CANCELED: Cancelada (quantidade disponível novamente)