Este projeto é uma implementação de uma API RESTful para gerenciamento de produtos, desenvolvida utilizando Test-Driven Development (TDD) com FastAPI.
Demonstrar na prática os conceitos de TDD, desenvolvendo uma API robusta e bem testada para operações CRUD de produtos.
- FastAPI: Framework web moderno e rápido para construção de APIs
- MongoDB: Banco de dados NoSQL para persistência
- Motor: Driver assíncrono para MongoDB
- Pydantic: Validação de dados e serialização
- Pytest: Framework de testes
- Uvicorn: Servidor ASGI para desenvolvimento
store_api_project/
├── store/
│ ├── __init__.py
│ ├── schemas/ # Modelos Pydantic para validação
│ ├── usecases/ # Lógica de negócio
│ └── controllers/ # Endpoints da API
├── tests/
│ ├── schemas/ # Testes dos schemas
│ ├── usecases/ # Testes dos casos de uso
│ └── controllers/ # Testes de integração
├── docs/ # Documentação adicional
├── main.py # Ponto de entrada da aplicação
└── requirements.txt # Dependências do projeto
- ✅ Criação de produtos
- ✅ Listagem de produtos
- ✅ Busca de produto por ID
- ✅ Atualização de produtos
- ✅ Exclusão de produtos
- ✅ Filtros por preço
- ✅ Tratamento de exceções
- ✅ Validação de dados
Este projeto segue rigorosamente a metodologia TDD:
- Red: Escrever um teste que falha
- Green: Implementar o código mínimo para o teste passar
- Refactor: Melhorar o código mantendo os testes passando
- Python 3.11+
- MongoDB (local ou Docker)
# Clone o repositório
git clone <seu-repositorio>
cd store_api_project
# Crie e ative o ambiente virtual
python -m venv venv
source venv/bin/activate # Linux/Mac
# ou
venv\Scripts\activate # Windows
# Instale as dependências
pip install -r requirements.txtuvicorn main:app --reloadpytest -vApós executar a aplicação, acesse:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- ✅ Tratamento de exceções personalizadas
- ✅ Validação robusta com Pydantic
- ✅ Filtros avançados por preço
- ✅ Timestamps automáticos (created_at, updated_at)
- ✅ Documentação automática da API
- ✅ Testes de integração completos
Este projeto é desenvolvido para fins educacionais.
Desenvolvido com ❤️ utilizando TDD