Sistema de marketplace para compra e venda de autopeças, com tarefas assíncronas via Celery, PostgreSQL como banco de dados e Redis como broker/cache.
Containerizado com Docker Compose, para rodar em ambiente local ou de produção.
- Características
- Tecnologias
- Pré-requisitos
- Instalação com Docker (recomendado)
- Configuração do Ambiente (.env)
- Execução e Migrations
- Acessando a Aplicação
- Executando Tarefas Assíncronas
- Rodando Testes
- Arquitetura do Projeto
- Licença
- Autor
- CRUD de peças (criação, listagem, edição, exclusão).
- Upload de arquivos CSV para cadastro em massa de produtos.
- Tarefas assíncronas com Celery:
- Processamento de CSV.
- Reposição automática de estoque.
- Autenticação com JWT.
| Componente | Versão | Uso |
|---|---|---|
| Python | 3.13 | Linguagem principal |
| Django | 5.2 | Framework backend |
| Django REST Framework | 3.x | Criação da API REST |
| PostgreSQL | 15 | Banco de dados relacional |
| Redis | 7 | Cache e broker Celery |
| Celery | 5 | Execução de tarefas assíncronas |
| Docker Compose | 3+ | Orquestração dos serviços |
Antes de iniciar, instale em seu sistema:
- Docker
- Docker Compose
- (Opcional) Git para clonar o repositório.
git clone https://github.com/kakanetwork/desafio-backend-hubbi.git
cd desafio-backend-hubbicp .env.example .envdocker compose up -d --buildIsso iniciará:
web→ servidor Djangodb→ PostgreSQLredis→ broker/cachecelery_worker→ worker de tarefascelery_beat→ agendador de tarefas
docker compose exec web python manage.py migratedocker compose exec web python manage.py createsuperuserCrie um arquivo .env na raiz do projeto com:
# Banco de Dados
DB_NAME=marketplace
DB_USER=postgres
DB_PASSWORD=123456
DB_HOST=db
DB_PORT=5432
# Redis
REDIS_HOST=redis
REDIS_PORT=6379
# Django
SECRET_KEY=change-me-in-prod
DJANGO_SETTINGS_MODULE=marketplace.settings
DEBUG=True
⚠️ oBs: Dentro do Docker, usedberediscomo hosts e nãolocalhost, ou a rede de containers não será reconhecida.
Após subir os containers e aplicar as migrations, o sistema estará pronto.
Para verificar os logs:
docker compose logs -f webPara acessar o shell do Django:
docker compose exec web python manage.py shellApós subir todos os containers e aplicar as migrations, o sistema estará disponível em:
- Painel Administrativo (Django Admin):
👉
http://localhost:8000/admin/Use as credenciais criadas com o comandocreatesuperuser.
Para utilizar a API protegida, primeiro obtenha um token JWT:
POST http://localhost:8000/api/token/
{
"username": "admin",
"password": "sua_senha"
}Use as credenciais criadas com o comando createsuperuser.
A resposta conterá um access e um refresh token.
Use o token de acesso nos headers das próximas requisições:
Authorization: Bearer <seu_token>
Quando o token de acesso expirar, você pode gerar um novo usando o token de refresh:
POST http://localhost:8000/api/token/refresh/
Content-Type: application/json
{
"refresh": "<seu_refresh_token>"
}A resposta será:
{
"access": "<novo_access_token>"
}| Método | Endpoint | Descrição |
|---|---|---|
| GET | /api/estoque/pecas/ |
Lista todas as peças disponíveis. |
| GET | /api/estoque/pecas/{id}/ |
Detalha uma peça específica. |
| POST | /api/estoque/pecas/ |
Cria uma nova peça (somente admin). |
| PATCH | /api/estoque/pecas/{id}/ |
Atualiza os dados de uma peça (somente admin). |
| DELETE | /api/estoque/pecas/{id}/ |
Remove uma peça (somente admin). |
| POST | /api/estoque/pecas/upload-csv/ |
Faz upload de um arquivo CSV para cadastro em massa. |
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /api/usuarios/ |
Lista todos os usuários (apenas admin). |
| GET | /api/usuarios/{id}/ |
Retorna os dados de um usuário específico (admin ou o próprio usuário). |
http GET http://localhost:8000/api/estoque/pecas/ "Authorization:Bearer <seu_token>"O projeto usa Celery + Redis.
Os workers e beat são iniciados automaticamente via docker.
Para testar manualmente:
docker compose exec web celery -A marketplace worker -l info
docker compose exec web celery -A marketplace beat -l infoTasks principais:
apps.estoque.tasks.celery_csv(csv_content)— Processa CSV e atualiza peças.apps.estoque.tasks.repor_estoque()— Reforça peças com estoque baixo.
Execute dentro do container principal (web):
docker compose exec web pytest -q --disable-warnings├── apps/
│ ├── estoque/ # Lógica de peças, tasks e CSV
│ └── usuarios/ # Autenticação e controle de usuários
├── marketplace/ # Configurações Django + Celery
├── manage.py
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── README.md
Licenciado sob Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).
Você pode compartilhar e adaptar para fins não comerciais, desde que cite a autoria original.