Um template moderno e robusto para projetos FastAPI seguindo as melhores práticas de desenvolvimento, incluindo Clean Architecture, Repository Pattern e estrutura escalável.
- ✅ FastAPI - Framework web moderno e de alta performance
- ✅ PostgreSQL - Banco de dados relacional
- ✅ JWT Authentication - Sistema de login/autenticação
- ✅ Repository Pattern - Abstração da camada de dados
- ✅ SQLAlchemy - ORM para interação com banco de dados
- ✅ Alembic - Migrations de banco de dados
- ✅ Pydantic - Validação de dados e serialização
- ✅ Multi-tenant Architecture - Suporte para múltiplos inquilinos/organizações
- ☐ UV Package Manager - Migração do Poetry para UV (gerenciador mais rápido)
- ☐ Pytest - Framework de testes completo
- ☐ Docker - Containerização
- ☐ Logging - Sistema de logs estruturado
- Python 3.11+
- Poetry (futuramente será migrado para UV)
- PostgreSQL
- Docker (opcional - será implementado)
- Clone o template:
git clone <seu-repositorio>
cd seu-projeto-fastapi- Instale as dependências:
poetry install- Configure as variáveis de ambiente:
cp .env.example .env
# Edite o arquivo .env com suas configurações- Configure o banco de dados:
# Execute as migrações
poetry run alembic upgrade head- Instale os hooks do pre-commit:
# Será implementado nas próximas versões
# poetry run pre-commit installVersão: 0.1.0 (MVP)
- Sistema de autenticação com JWT
- Integração com PostgreSQL
- Repository Pattern básico
- Estrutura base do projeto
- Modelos de usuário e autenticação
Este template está em desenvolvimento ativo. As próximas versões incluirão as funcionalidades listadas no roadmap acima.
poetry run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000# Docker será implementado nas próximas versões
# docker-compose up --buildA aplicação estará disponível em http://localhost:8000
- Documentação da API:
http://localhost:8000/docs - Documentação alternativa:
http://localhost:8000/redoc
# Testes serão implementados nas próximas versões
# poetry run pytestPara cobertura de código:
# poetry run pytest --cov=app --cov-report=htmlpoetry run alembic revision --autogenerate -m "Descrição da migração"poetry run alembic upgrade headpoetry run alembic downgrade -1Crie um arquivo .env baseado no .env.example:
# Database
DATABASE_URL=postgresql://user:password@localhost/dbname
# Security
SECRET_KEY=your-secret-key-here
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
# Application
PROJECT_NAME="FastAPI Template"
VERSION=0.1.0
DEBUG=True
# Multi-tenant (será implementado)
# TENANT_STRATEGY=subdomain
# DEFAULT_TENANT=mainO template implementa o Repository Pattern para abstrair o acesso a dados:
# repositories/base.py
class BaseRepository:
def __init__(self, db: Session):
self.db = db
def get(self, id: int):
# Implementação base
pass
# repositories/user.py
class UserRepository(BaseRepository):
def get_by_email(self, email: str):
# Implementação específica
passA camada de serviços contém a lógica de negócio:
# services/user.py
class UserService:
def __init__(self, user_repo: UserRepository):
self.user_repo = user_repo
def create_user(self, user_data: UserCreate):
# Lógica de negócio
passUtilizamos o sistema de dependências do FastAPI:
# api/deps.py
def get_user_service(db: Session = Depends(get_db)) -> UserService:
user_repo = UserRepository(db)
return UserService(user_repo)
# endpoints/users.py
@router.post("/users/")
def create_user(
user_service: UserService = Depends(get_user_service)
):
# Usar o serviço
pass-
Personalize o projeto:
- Altere o nome do projeto em
pyproject.toml - Atualize as configurações em
app/config/settings.py - Modifique as variáveis de ambiente conforme necessário
- Altere o nome do projeto em
-
Adicione seus modelos:
- Crie novos modelos em
app/models/ - Defina os schemas em
app/schemas/ - Implemente repositories em
app/repositories/ - Adicione serviços em
app/services/ - Crie as rotas em
app/api/v1/endpoints/
- Crie novos modelos em
-
Configure o banco de dados:
- Ajuste a configuração em
app/config/database.py - Execute as migrações necessárias
- Ajuste a configuração em
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Se você encontrar algum problema ou tiver dúvidas, por favor:
- Verifique a documentação
- Procure em issues existentes
- Crie uma nova issue com detalhes do problema
Desenvolvido com ❤️ usando FastAPI