API de gerenciamento para loja de roupas Lu Estilo, desenvolvida com FastAPI, PostgreSQL, SQLAlchemy e JWT.
- Autenticação e Autorização: Sistema completo com JWT, registro e login de usuários
- Gerenciamento de Clientes: CRUD completo com validações de dados
- Gerenciamento de Produtos: CRUD completo com controle de estoque
- Gerenciamento de Pedidos: Sistema completo com itens, status e validação de estoque
- Integração com WhatsApp: Notificações automáticas para clientes
- Python
- PostgreSQL
- Docker e Docker Compose
- Clone o repositório
- Configure as variáveis de ambiente no arquivo
.env(use.env.examplecomo base) - Execute com Docker Compose:
docker-compose up -dA API estará disponível em http://localhost:8000, documentação em http://localhost:8000/api/docs e documentação de ReDoc em http://localhost:8000/api/redoc.
- Clone o repositório
- Crie um ambiente virtual e ative-o:
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows- Instale as dependências:
pip install -r requirements.txt- Configure as variáveis de ambiente no arquivo
.env - Execute as migrações do banco de dados:
alembic upgrade head- Inicie o servidor:
uvicorn src.main:app --reloadlu_estilo_api/
├── alembic/ # Migrações de banco de dados
├── src/ # Código fonte principal
│ ├── auth/ # Autenticação e autorização
│ ├── clients/ # Endpoints de clientes
│ ├── core/ # Configurações e utilitários
│ ├── models/ # Modelos SQLAlchemy
│ ├── orders/ # Endpoints de pedidos
│ ├── products/ # Endpoints de produtos
│ ├── schemas/ # Schemas Pydantic
│ ├── services/ # Lógica de negócio
│ └── main.py # Ponto de entrada da aplicação
├── static/ # Arquivos estáticos (imagens)
├── tests/ # Testes automatizados
├── .env # Variáveis de ambiente
├── docker-compose.yml # Configuração Docker Compose
├── Dockerfile # Configuração Docker
└── requirements.txt # Dependências Python
POST /auth/register- Registrar novo usuárioPOST /auth/login- Login e obtenção de token JWT
GET /clients- Listar clientes (com paginação e filtros)POST /clients- Criar clienteGET /clients/{id}- Obter cliente específicoPUT /clients/{id}- Atualizar clienteDELETE /clients/{id}- Excluir cliente
GET /products- Listar produtos (com paginação e filtros)POST /products- Criar produtoGET /products/{id}- Obter produto específicoPUT /products/{id}- Atualizar produtoDELETE /products/{id}- Excluir produto
GET /orders- Listar pedidos (com filtros)POST /orders- Criar pedidoGET /orders/{id}- Obter pedido específicoPUT /orders/{id}- Atualizar pedido (status)DELETE /orders/{id}- Excluir pedido
- Registro de novo usuário
- Tentativa de registro com e-mail existente
- Login bem-sucedido
- Login com senha incorreta
- Login com usuário inexistente
- Atualização de token (não implementado)
- Criação de cliente
- Tentativa de criar cliente com e-mail duplicado
- Tentativa de criar cliente com CPF duplicado
- Validação de formato de CPF inválido
- Listagem de clientes
- Filtragem de clientes
- Busca de cliente específico
- Busca de cliente inexistente
- Atualização de dados do cliente
- Conflito de e-mail ao atualizar
- Atualização de cliente inexistente
- Exclusão de cliente
- Tentativa de excluir cliente inexistente
- Criação de pedido
- Tentativa de criar pedido com estoque insuficiente
- Tentativa de criar pedido com produto inexistente
- Tentativa de criar pedido com cliente inexistente
- Listagem de pedidos
- Filtragem de pedidos
- Busca de pedido específico
- Busca de pedido inexistente
- Atualização de status do pedido
- Tentativa de atualizar status sem ser admin
- Atualização de pedido inexistente
- Exclusão de pedido
- Tentativa de exclusão sem ser admin
- Tentativa de excluir pedido inexistente
- Criação de produto
- Tentativa de criar produto sem ser admin
- Validação de dados inválidos
- Listagem de produtos
- Filtragem de produtos
- Busca de produto específico
- Busca de produto inexistente
- Atualização de produto
- Tentativa de atualizar sem ser admin
- Atualização de produto inexistente
- Exclusão de produto
- Tentativa de exclusão sem ser admin
- Tentativa de excluir produto inexistente
Execute os testes automatizados com:
Testes Unitários via Docker:
docker-compose exec api pytestTestes Unitários via Docker com Coverage:
docker-compose exec api pytest --cov=src --cov-report=term-missingTestes Unitários via Docker com Logging:
docker-compose exec api pytest -v --log-cli-level=INFOou
Testes Unitários via Python (Deve ser usado quando instalado manualmente):
pytestA API inclui integração com WhatsApp via Twilio para notificações automáticas:
- Confirmação de pedidos
- Atualizações de status
- Promoções e novidades
A API está configurada para enviar notificações via WhatsApp utilizando a API da Twilio, conforme implementado em src/services/whatsapp_service.py. As notificações podem incluir confirmações de pedido e atualizações de status.
Para testar o envio de mensagens do WhatsApp:
-
Configure o Twilio Sandbox:
- Crie ou acesse sua conta na Twilio.
- No console da Twilio, navegue até "Messaging" > "Try it out" > "Send a WhatsApp message" para configurar e ativar o sandbox. Isso geralmente envolve enviar uma mensagem do seu número de WhatsApp pessoal (que será seu número de teste) para o número do sandbox fornecido pela Twilio.
- Anote seu
Account SID,Auth Tokene o número de telefone do WhatsApp do Sandbox da Twilio (ex:+14155238886).
-
Atualize as Variáveis de Ambiente (
.env):- Adicione/modifique as seguintes variáveis no seu arquivo
.envcom suas credenciais e informações da Twilio
- Adicione/modifique as seguintes variáveis no seu arquivo
- Relatórios Automatizados (Airflow): Pipeline ETL para extrair dados do PostgreSQL, transformar com Pandas e enviar relatórios de vendas.
- Chatbot Inteligente (GroqCloud): Endpoint FastAPI para receber perguntas, contextualizar com dados da API (produtos/pedidos do PostgreSQL) e obter respostas rápidas de um LLM via GroqCloud para atendimento ao cliente.
A documentação interativa está disponível em:
- Swagger UI:
/api/docs - ReDoc:
/api/redoc