Desenvolvimento
Guias para desenvolvedores do Sinapse
Esta seção contém guias e recursos para desenvolvedores que trabalham no Sinapse.
Guias para Desenvolvedores
Setup Local
Configure seu ambiente de desenvolvimento
Contribuindo
Como contribuir com código
Testes
Estratégia e execução de testes
Quick Start para Devs
# Clone e entre no projeto
git clone https://github.com/sinapse/core-api.git
cd core-api
# Crie ambiente virtual
python -m venv venv
source venv/bin/activate # Linux/Mac
# ou
venv\Scripts\activate # Windows
# Instale dependências
pip install -r requirements.txt
pip install -r requirements-dev.txt
# Configure ambiente
cp .env.example .env
# Edite .env
# Rode com Docker
docker-compose up -d
# Ou rode localmente
uvicorn main:app --reloadFerramentas de Desenvolvimento
Essenciais
- Python 3.11+ - Runtime principal
- VS Code - IDE recomendada
- Docker - Ambiente isolado
- Git - Controle de versão
Recomendadas
- Black - Formatação de código
- Ruff - Linting rápido
- mypy - Type checking
- pytest - Framework de testes
Padrões de Código
Python Style
# Bom
async def get_user_by_id(
user_id: int,
db: AsyncSession = Depends(get_db)
) -> UserModel | None:
"""Busca usuário por ID."""
result = await db.execute(
select(UserModel).where(UserModel.id == user_id)
)
return result.scalar_one_or_none()
# Evitar
def getUser(id):
return db.query(User).filter(User.id == id).first()Estrutura de Módulos
modules/
└── novo_modulo/
├── __init__.py
├── endpoints.py # Rotas FastAPI
├── models.py # Modelos SQLAlchemy
├── schemas.py # Schemas Pydantic
├── services.py # Lógica de negócio
└── repository.py # Acesso a dadosDesenvolvimento Orientado a Testes
Pirâmide de Testes
- Unitários (70%) - Lógica isolada
- Integração (20%) - Componentes juntos
- E2E (10%) - Fluxos completos
Exemplo de Teste
@pytest.mark.asyncio
async def test_create_user(client: AsyncClient, db: AsyncSession):
# Arrange
user_data = {
"nome": "Test User",
"email": "[email protected]",
"senha": "Test123!"
}
# Act
response = await client.post("/api/v1/usuarios", json=user_data)
# Assert
assert response.status_code == 201
data = response.json()
assert data["email"] == user_data["email"]Workflow de Desenvolvimento
- Crie branch do tipo:
feature/,fix/,docs/ - Desenvolva seguindo os padrões
- Teste localmente e com CI
- Documente mudanças significativas
- Abra PR com descrição clara
- Code Review por pelo menos 1 dev
- Merge após aprovação
Debugging
VS Code Launch Config
{
"version": "0.2.0",
"configurations": [
{
"name": "FastAPI",
"type": "python",
"request": "launch",
"module": "uvicorn",
"args": ["main:app", "--reload", "--port", "8000"],
"jinja": true,
"justMyCode": false
}
]
}Debug com Docker
# Em main.py
if settings.DEBUG:
import debugpy
debugpy.listen(("0.0.0.0", 5678))
print("Debugger pronto na porta 5678")Recursos Úteis
Documentação
Comunidade
- Slack interno: #sinapse-dev
- GitHub Discussions
- Stack Overflow: [sinapse-api]
Dica: Use o comando make para tarefas comuns como make test, make lint, make format.
Explore os guias detalhados através dos cards acima!