API REST para gerenciamento de estoque, desenvolvida com Django e Django REST Framework. Permite que empresas cadastrem produtos, registrem vendas, monitorem alertas de estoque e visualizem dados de desempenho em um dashboard analítico.
| Tecnologia | Versão |
|---|---|
| Python | 3.x |
| Django | 4.2.7 |
| Django REST Framework | 3.14.0 |
| SimpleJWT | 5.3.0 |
| PostgreSQL | via psycopg2 |
| Gunicorn | 21.2.0 |
| WhiteNoise | 6.6.0 |
| django-cors-headers | 4.3.1 |
| pytest / pytest-django | 7.4.4 / 4.7.0 |
inventory-management-api/
├── core/ # Configurações principais (settings, urls, wsgi/asgi)
├── apps/
│ ├── user/ # Autenticação e gerenciamento de usuários
│ ├── product/ # Produtos, logs e alertas de estoque
│ ├── purchase/ # Registro de vendas e dashboard
│ └── utils/ # Permissões, queries e utilitários compartilhados
├── manage.py
├── requirements.txt
├── build.sh # Script de build para deploy
└── .env-example # Exemplo de variáveis de ambiente
git clone https://github.com/Michel-Rooney/inventory-management-api.git
cd inventory-management-apipython -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windowspip install -r requirements.txtCopie o arquivo .env-example para .env e preencha os valores:
cp .env-example .envSECRET_KEY=sua-chave-secreta-django
SECRET_KEY_JWT=sua-chave-secreta-jwt
DEBUG=1
ALLOWED_HOSTS=127.0.0.1
CSRF_TRUSTED_ORIGINS=http://127.0.0.1:8000
CORS_ALLOWED_ORIGINS=http://127.0.0.1:3000
# Banco de dados
ALLOWED_DATABASE=postgresql
ENGINE_DB=django.db.backends.postgresql
NAME=nome_do_banco
USER=usuario
PASSWORD=senha
HOST=localhost
PORT=5432python manage.py migratepython manage.py runserverA API utiliza JWT (JSON Web Token) via djangorestframework-simplejwt. Todas as rotas protegidas exigem o token no header Authorization: Bearer <token>.
| Endpoint | Método | Descrição |
|---|---|---|
/api/token/ |
POST | Obter access + refresh token |
/api/token/refresh/ |
POST | Renovar o access token |
/api/token/verify/ |
POST | Verificar validade do token |
| Método | URL | Descrição | Auth |
|---|---|---|---|
| POST | /api/user/ |
Criar novo usuário | ❌ |
| GET | /api/user/ |
Retorna os dados do usuário autenticado | ✅ |
| PATCH | /api/user/{id}/ |
Atualizar dados do usuário | ✅ |
| DELETE | /api/user/{id}/ |
Deletar conta | ✅ |
| Método | URL | Descrição | Auth |
|---|---|---|---|
| GET | /api/products/ |
Listar produtos da empresa | ✅ |
| POST | /api/products/ |
Criar produto | ✅ |
| GET | /api/products/{id}/ |
Detalhar produto | ✅ |
| PATCH | /api/products/{id}/ |
Atualizar produto | ✅ |
| DELETE | /api/products/{id}/ |
Deletar produto | ✅ |
| GET | /api/products/alert_products/ |
Alertas de estoque e validade | ✅ |
Filtros disponíveis:
- Busca por nome, descrição ou marca:
?search=termo
Campos do produto:
| Campo | Tipo | Descrição |
|---|---|---|
name |
string | Nome único do produto |
description |
string | Descrição |
brand |
string | Marca |
quantity |
int | Quantidade em estoque (≥ 0) |
purchase_price |
float | Preço de compra |
sale_price |
float | Preço de venda |
expiration |
date | Data de validade (opcional) |
Retorna produtos categorizados por nível de urgência:
| Status | Critério |
|---|---|
quantity_red |
Quantidade entre 0 e 2 unidades |
quantity_yellow |
Quantidade entre 3 e 5 unidades |
date_red |
Validade vencida ou em menos de 3 dias |
date_yellow |
Validade entre 3 e 10 dias |
| Método | URL | Descrição | Auth |
|---|---|---|---|
| POST | /api/purchase/ |
Registrar nova venda | ✅ |
| GET | /api/purchase/dashboard_data/ |
Dados para dashboard analítico | ✅ |
Dashboard (?type=week|month|year):
Retorna dados de vendas agrupados por período:
{
"labels": ["Segunda", "Terça", "..."],
"values": [150.0, 200.0, "..."],
"total_price": 1500.0,
"gain": 300.0,
"data": [{ "date": "10/03/2024", "total_price": 150.0, "gain": 30.0 }],
"biggest_sale": { "data": "2024-03-15", "value": 500.0 },
"most_sold_product": { "name": "Produto X", "total_sale": 750.0 }
}Histórico de produtos associados às vendas realizadas.
| Método | URL | Descrição | Auth |
|---|---|---|---|
| GET | /api/product-log/ |
Listar logs | ✅ |
| GET | /api/product-log/{id}/ |
Detalhar log | ✅ |
O projeto utiliza pytest com pytest-django e possui cobertura de testes para autenticação, CRUD de produtos, criação de compras e validações.
# Rodar todos os testes
pytest
# Com cobertura de código
coverage run -m pytest
coverage reportO projeto inclui um script build.sh para deploy em plataformas como Render:
./build.shEsse script executa automaticamente:
pip install -r requirements.txtpython manage.py collectstatic --no-inputpython manage.py migrate
Para servir em produção, utilize o Gunicorn:
gunicorn core.wsgi:applicationIsOwner— o usuário só pode acessar e modificar seus próprios dados.IsOwnerProduct— o usuário só pode visualizar e gerenciar produtos vinculados à sua empresa (conta).
Este projeto é de uso pessoal. Sinta-se livre para usar e adaptar conforme sua necessidade.