• Grupos já definidos. Quem não estiver em grupo até 03/11/2025 realiza individualmente.
• Cada integrante deve ter commits no repositório do grupo.
• Entrega: link do repositório
Trilha C — HTTP (FastAPI no VS Code) [recomendada para começar]
Baseie-se no projeto-guia da apostila v2 (serviço acadêmico na 8010). Rotas: agendar aula (orquestrador chama salas/turmas) e lançar nota (valida matrícula e chama notas).
Trilha B — RabbitMQ
Docker com rabbitmq:management. Produtor publica em queue (ex.: notas) e consumidor persiste/retorna.
Trilha A — Kafka
Docker com zookeeper+kafka. Orquestrador publica evento (ex.: aula_agendada); outro serviço consome e atualiza estado.
• 2–4 serviços com responsabilidades claras.
• Comunicação entre serviços (HTTP, RabbitMQ ou Kafka).
• 1 teste e2e automatizado do fluxo principal.
• Observabilidade: logs claros.
• Documentação: README.md (setup, como rodar, como testar, decisões), requests.http (ou Postman).
1) Abrir o projeto no VS Code (pasta com run_all.py e requirements.txt).
2) Criar e ativar venv + instalar dependências:
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
3) Subir todos os serviços:
python run_all.py
4) Testar (Swagger):
Acadêmico: http://127.0.0.1:8010/docs
Salas: http://127.0.0.1:8001/docs
Turmas: http://127.0.0.1:8002/docs
Notas: http://127.0.0.1:8003/docs
5) Fluxo (via Swagger):
POST /turmas {"turma_id":"ADS101","professor":"simone"}
POST /matriculas {"turma_id":"ADS101","aluno_id":"A1"}
POST /agendar-aula {"turma_id":"ADS101","sala":"LAB-01","inicio":"2025-11-05T19:00","fim":"2025-11-05T21:00"}
POST /lancar-nota {"turma_id":"ADS101","aluno_id":"A1","avaliacao":"P1","nota":8.5}
GET /nota/ADS101/A1
Health:
curl 127.0.0.1:8010/health
curl 127.0.0.1:8001/health
curl 127.0.0.1:8002/health
curl 127.0.0.1:8003/health
POSTs com JSON (use Invoke-RestMethod no PowerShell):
$h = @{ "Content-Type" = "application/json" }
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8002/turmas -Headers $h -Body '{"turma_id":"ADS101","professor":"simone"}'
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8002/matriculas -Headers $h -Body '{"turma_id":"ADS101","aluno_id":"A1"}'
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8010/agendar-aula -Headers $h -Body '{"turma_id":"ADS101","sala":"LAB-01","inicio":"2025-11-05T19:00","fim":"2025-11-05T21:00"}'
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8010/lancar-nota -Headers $h -Body '{"turma_id":"ADS101","aluno_id":"A1","avaliacao":"P1","nota":8.5}'
curl 127.0.0.1:8003/nota/ADS101/A1
• Cancelar aula / Reagendar (impacta salas e turmas).
• Persistência com SQLite por serviço.
• Timeouts e retries no orquestrador.
• Relatórios simples (notas por aluno, ocupação de salas).
• services/ (código de cada serviço)
• tests/test_e2e.py (fluxo ponta-a-ponta)
• requests.http (ou Postman)
• docker-compose.yml (se optar por Kafka ou RabbitMQ)
• README.md (arquitetura, setup, testes, decisões, responsáveis)
Arquitetura & isolamento (30)
Confiabilidade (20)
Código & organização (20)
Testes (15)
Observabilidade (10)
Doc & apresentação (5)
• "Could not open requirements file": rode na pasta raiz (onde há run_all.py / requirements.txt).
• Porta em uso: acadêmico está na 8010. Se necessário, use outra porta: uvicorn services.academico:app --port 8011.
• PowerShell: "curl" é Invoke-WebRequest. Para POST com JSON, use Invoke-RestMethod ou chame curl.exe.
• "No module named services": você rodou dentro de services/. Na raiz use services.academico:app; dentro de services use academico:app.
□ Build/execução limpa
□ Fluxo e2e funcionando (documentado)
□ Comunicação entre serviços demonstrada
□ Logs mostram o caminho da requisição/mensagem
□ README claro + requests.http/coleção Postman