💻 Guia de Setup de Desenvolvimento - CSuite
Versão: 1.0
Última Atualização: 2025-01-02
Responsável: Equipe de Desenvolvimento
📋 Índice
- Pré-requisitos
- Setup Inicial
- Configuração do Ambiente
- Executando Serviços Localmente
- Desenvolvimento
- Testes
- Debugging
- Troubleshooting
🎯 Pré-requisitos
Software Necessário
Obrigatório:
- Python 3.11+ - Download
- Docker 20.10+ - Installation Guide
- Docker Compose 2.0+ - Incluído no Docker Desktop
- Git - Download
- Editor de código - VS Code, PyCharm, etc.
Recomendado:
- Make - Para facilitar comandos
- Postman/Insomnia - Para testar APIs
- MySQL Client - Para acessar banco diretamente
Contas e Acessos
Necessário:
- Acesso ao repositório Git
- Acesso ao Docker Hub/Registry (se privado)
- Credenciais de banco de dados (desenvolvimento)
🚀 Setup Inicial
1. Clonar Repositório
# Clonar repositório
git clone <repository-url>
cd c-suite
# Verificar branch
git branch
2. Configurar Ambiente Python
# Criar virtual environment
python3 -m venv venv
# Ativar virtual environment
# Linux/Mac:
source venv/bin/activate
# Windows:
venv\Scripts\activate
# Instalar dependências
pip install -r requirements.txt
3. Configurar Variáveis de Ambiente
Criar arquivo .env na raiz:
# .env
# Database
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=dev_password
DB_NAME=csuite_dev
# API
API_HOST=0.0.0.0
API_PORT=8000
DEBUG=True
# Secrets (desenvolvimento)
JWT_SECRET_KEY=dev_secret_key_change_in_production
ENCRYPTION_KEY=dev_encryption_key
# Services
CONTEXT_API_URL=http://localhost:8001
EXECUTIVE_API_URL=http://localhost:8002
⚠️ Importante: Não commitar arquivo .env com credenciais reais.
⚙️ Configuração do Ambiente
1. Setup do Banco de Dados
Opção 1: Docker Compose (Recomendado)
# Iniciar MySQL via Docker Compose
docker-compose up -d mysql
# Aguardar MySQL estar pronto
docker-compose logs -f mysql
# Aguardar mensagem: "ready for connections"
Opção 2: MySQL Local
# Instalar MySQL (depende do OS)
# Ubuntu/Debian:
sudo apt-get install mysql-server
# Mac:
brew install mysql
# Iniciar MySQL
sudo systemctl start mysql # Linux
brew services start mysql # Mac
Criar banco de dados:
# Conectar ao MySQL
mysql -u root -p
# Criar banco
CREATE DATABASE csuite_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# Criar usuário (opcional)
CREATE USER 'csuite_dev'@'localhost' IDENTIFIED BY 'dev_password';
GRANT ALL PRIVILEGES ON csuite_dev.* TO 'csuite_dev'@'localhost';
FLUSH PRIVILEGES;
2. Executar Migrações
# Executar migrações
# (depende da ferramenta de migração usada)
# Exemplo com Alembic:
alembic upgrade head
# Ou executar scripts SQL diretamente:
mysql -u root -p csuite_dev < sql/schema.sql
mysql -u root -p csuite_dev < sql/seed.sql
3. Configurar Docker (Opcional)
Para desenvolvimento com Docker:
# Build das imagens
docker-compose build
# Iniciar serviços
docker-compose up -d
# Ver logs
docker-compose logs -f
🏃 Executando Serviços Localmente
Gateway (csuite-gateway)
cd csuite-gateway
# Instalar dependências
pip install -r requirements.txt
# Executar
uvicorn app.main:app --reload --host 0.0.0.0 --port 8080
# Ou com Python
python -m uvicorn app.main:app --reload
Acessar:
- API: http://localhost:8080
- Docs: http://localhost:8080/docs
- Health: http://localhost:8080/health
Context API (csuite-context)
cd csuite-context
# Instalar dependências
pip install -r requirements.txt
# Executar
uvicorn app.main:app --reload --host 0.0.0.0 --port 8001
Acessar:
- API: http://localhost:8001
- Docs: http://localhost:8001/docs
Executive API (csuite-executive)
cd csuite-executive
# Instalar dependências
pip install -r requirements.txt
# Executar
uvicorn app.main:app --reload --host 0.0.0.0 --port 8002
Acessar:
- API: http://localhost:8002
- Docs: http://localhost:8002/docs
Outros Serviços
Cada serviço segue o mesmo padrão:
1. Entrar no diretório do serviço
2. Instalar dependências: pip install -r requirements.txt
3. Executar: uvicorn app.main:app --reload --port <porta>
Portas padrão:
- Gateway: 8080
- Context: 8001
- Executive: 8002
- Operations: 8003
- (verificar cada serviço)
💻 Desenvolvimento
Estrutura de Projeto
c-suite/
├── csuite-gateway/ # Gateway principal
├── csuite-context/ # Context API
├── csuite-executive/ # Executive API
├── csuite-operations/ # Operations API
├── common/ # Código compartilhado
├── docs/ # Documentação
├── sql/ # Scripts SQL
└── tests/ # Testes
Convenções de Código
Python:
- PEP 8 style guide
- Type hints quando possível
- Docstrings para funções/classes
- Black para formatação (se configurado)
Estrutura de arquivo:
# app/main.py
"""
Módulo principal da aplicação.
"""
from fastapi import FastAPI
app = FastAPI(title="CSuite Service")
@app.get("/health")
async def health():
"""Health check endpoint."""
return {"status": "ok"}
Hot Reload
FastAPI com uvicorn:
# --reload habilita hot reload
uvicorn app.main:app --reload
Mudanças no código são refletidas automaticamente.
🧪 Testes
Executar Testes
# Todos os testes
pytest
# Testes específicos
pytest tests/test_api.py
# Com cobertura
pytest --cov=app --cov-report=html
# Verbose
pytest -v
Estrutura de Testes
tests/
├── unit/ # Testes unitários
├── integration/ # Testes de integração
└── fixtures/ # Fixtures compartilhadas
Exemplo de Teste
# tests/test_api.py
import pytest
from fastapi.testclient import TestClient
from app.main import app
client = TestClient(app)
def test_health():
response = client.get("/health")
assert response.status_code == 200
assert response.json() == {"status": "ok"}
🐛 Debugging
Debug no VS Code
Criar .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: FastAPI",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/csuite-gateway/app/main.py",
"module": "uvicorn",
"args": [
"app.main:app",
"--reload",
"--host",
"0.0.0.0",
"--port",
"8080"
],
"jinja": true,
"justMyCode": false
}
]
}
Debug com print/logging
import logging
logger = logging.getLogger(__name__)
def minha_funcao():
logger.debug("Debug message")
logger.info("Info message")
logger.warning("Warning message")
logger.error("Error message")
Debug no Docker
# Executar container em modo interativo
docker run -it --rm csuite-gateway:latest /bin/bash
# Ver logs
docker logs <container-id>
# Executar com debug
docker run -e DEBUG=True csuite-gateway:latest
🔧 Troubleshooting
Problema: Porta já em uso
Solução:
# Verificar processo usando porta
lsof -i :8080 # Mac/Linux
netstat -ano | findstr :8080 # Windows
# Matar processo
kill -9 <PID> # Mac/Linux
taskkill /PID <PID> /F # Windows
# Ou usar outra porta
uvicorn app.main:app --reload --port 8081
Problema: Dependências não instalam
Solução:
# Atualizar pip
pip install --upgrade pip
# Limpar cache
pip cache purge
# Reinstalar
pip install -r requirements.txt --force-reinstall
Problema: Banco de dados não conecta
Solução:
# Verificar se MySQL está rodando
docker ps | grep mysql
# ou
sudo systemctl status mysql
# Testar conexão
mysql -u root -p -h localhost
# Verificar variáveis de ambiente
echo $DB_HOST
echo $DB_PORT
Problema: Import errors
Solução:
# Verificar PYTHONPATH
export PYTHONPATH="${PYTHONPATH}:$(pwd)"
# Instalar em modo desenvolvimento
pip install -e .
# Verificar imports
python -c "import app.main"
📚 Recursos Adicionais
Documentação
Ferramentas Úteis
Desenvolvimento:
- Postman - Testar APIs
- DBeaver - Cliente de banco de dados
- VS Code - Editor recomendado
Debugging:
- pdb - Python debugger
- ipdb - IPython debugger
- pytest - Framework de testes
🔗 Documentos Relacionados
- TROUBLESHOOTING.md - Guia de troubleshooting
- TESTING_GUIDE.md - Guia de testes
- API_DOCUMENTATION.md - Documentação de APIs
Última Revisão: 2025-01-02
Próxima Revisão: 2025-04-02 (trimestral)