Skip to content

andreunix/go-api-stock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API Stock - Sistema de Controle de Estoque

API REST para gerenciamento de estoque com suporte a produtos, depósitos, movimentações e reservas.

Estrutura do Projeto

├── 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

Configuração

Crie um arquivo .env na raiz do projeto:

DATABASE_URL=postgresql://postgres:senha@localhost:5432/apistock?sslmode=disable
PORT=:8080

Banco de Dados

Execute as migrations:

# Compilar o comando de migrations
go build -o bin/migrate ./cmd/migrate

# Executar migrations
./bin/migrate -dir=./db/migrations

Executando a API

# Compilar
go build -o bin/apistock .

# Executar
./bin/apistock

Endpoints

Health Check

  • GET /health - Verifica status da API

Produtos

  • GET /api/products - Lista produtos (query: ?active=true)
  • GET /api/products/{id} - Busca produto por ID
  • POST /api/products - Cria produto
  • PUT /api/products/{id} - Atualiza produto
  • DELETE /api/products/{id} - Remove produto

Depósitos (Warehouses)

  • GET /api/warehouses - Lista depósitos
  • GET /api/warehouses/{id} - Busca depósito por ID
  • POST /api/warehouses - Cria depósito
  • PUT /api/warehouses/{id} - Atualiza depósito
  • DELETE /api/warehouses/{id} - Remove depósito

Saldos de Estoque

  • GET /api/stock/balances - Lista todos os saldos (query: ?warehouse_id=uuid ou ?product_id=uuid)
  • GET /api/stock/balances/{warehouse_id}/{product_id} - Saldo específico

Movimentações

  • GET /api/stock/movements - Lista movimentações (query: ?type=IN|OUT|TRANSFER|ADJUST e ?status=DRAFT|POSTED|CANCELED)
  • GET /api/stock/movements/{id} - Busca movimentação com linhas
  • POST /api/stock/movements - Cria movimentação
  • POST /api/stock/movements/{id}/post - Efetiva movimentação (atualiza saldos)
  • POST /api/stock/movements/{id}/cancel - Cancela movimentação em rascunho

Reservas

  • GET /api/stock/reservations - Lista reservas (query: ?status=ACTIVE|RELEASED|CONSUMED|CANCELED)
  • GET /api/stock/reservations/{id} - Busca reserva por ID
  • POST /api/stock/reservations - Cria reserva
  • PUT /api/stock/reservations/{id}/status - Atualiza status da reserva

Exemplos de Uso

Criar Produto

curl -X POST http://localhost:8080/api/products \
  -H "Content-Type: application/json" \
  -d '{"sku": "PROD001", "name": "Produto Teste", "unit": "UN"}'

Criar Depósito

curl -X POST http://localhost:8080/api/warehouses \
  -H "Content-Type: application/json" \
  -d '{"code": "WH01", "name": "Depósito Principal"}'

Criar Movimentação de Entrada

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
      }
    ]
  }'

Efetivar Movimentação

curl -X POST http://localhost:8080/api/stock/movements/{id}/post

Tipos de Movimentação

  • 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_id para +, from_warehouse_id para -)

Status de Movimentação

  • DRAFT: Rascunho (pode ser editado ou cancelado)
  • POSTED: Efetivado (saldos atualizados)
  • CANCELED: Cancelado

Status de Reserva

  • ACTIVE: Reserva ativa (quantidade bloqueada)
  • RELEASED: Liberada (quantidade disponível novamente)
  • CONSUMED: Consumida (dá baixa no estoque)
  • CANCELED: Cancelada (quantidade disponível novamente)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages