Skip to content

⚙️ API RESTful para um marketplace de autopeças desenvolvida em Django, DRF e Celery. Projeto submetido para processo seletivo.

License

Notifications You must be signed in to change notification settings

kakanetwork/Desafio-Backend-Hubbi

Repository files navigation

📌 Desafio Hubbi - Marketplace de Autopeças


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.


🧭 Sumário


🚀 Características

  • 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.

🧰 Tecnologias

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

🧱 Pré-requisitos

Antes de iniciar, instale em seu sistema:


🐳 Instalação com Docker (recomendado)

1️⃣ Clonar o repositório

git clone https://github.com/kakanetwork/desafio-backend-hubbi.git
cd desafio-backend-hubbi

2️⃣ Criar o arquivo .env

cp .env.example .env

3️⃣ Subir os containers

docker compose up -d --build

Isso iniciará:

  • web → servidor Django
  • db → PostgreSQL
  • redis → broker/cache
  • celery_worker → worker de tarefas
  • celery_beat → agendador de tarefas

4️⃣ Aplicar as migrations

docker compose exec web python manage.py migrate

5️⃣ Criar um superusuário

docker compose exec web python manage.py createsuperuser

⚙️ Configuração do Ambiente (.env)

Crie 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, use db e redis como hosts e não localhost, ou a rede de containers não será reconhecida.


▶️ Execução e Migrations

Após subir os containers e aplicar as migrations, o sistema estará pronto.

Para verificar os logs:

docker compose logs -f web

Para acessar o shell do Django:

docker compose exec web python manage.py shell

🌐 Acessando a Aplicação

Após subir todos os containers e aplicar as migrations, o sistema estará disponível em:

🔐 Autenticação via API (JWT)

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>

🔄 Atualizar Token de Acesso

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>"
}

📦 Endpoints Principais

🧰 Peças (/api/estoque/pecas/)
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.
👤 Usuários (/api/usuarios/)
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).

💡 Dica

http GET http://localhost:8000/api/estoque/pecas/ "Authorization:Bearer <seu_token>"

⏳ Executando Tarefas Assíncronas

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 info

Tasks 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.

🧪 Rodando Testes

Execute dentro do container principal (web):

docker compose exec web pytest -q --disable-warnings

🧩 Arquitetura do Projeto

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

📜 Licença

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.


👨‍💻 Autor


About

⚙️ API RESTful para um marketplace de autopeças desenvolvida em Django, DRF e Celery. Projeto submetido para processo seletivo.

Topics

Resources

License

Stars

Watchers

Forks