Pite-Backend
v0.11.0
v0.11.0 — Administração, painel do treinador e deploy
2026-09-27
## O que há de novo
### [ADMIN] Administração da plataforma (#71)
- **#72** Gestão de usuários (listar/bloquear/alterar role)
- **#73** Estrutura inicial de planos/assinaturas
- **#74** Configuração de integrações habilitadas
- **#75** Métricas administrativas
### Endpoints para o painel do treinador (Pite-Frontend)
- **#97** `GET /coach/athletes/{athleteId}`: perfil de um atleta vinculado
- **#98** Status do plano de treino (`DRAFT`/`ACTIVE`/`COMPLETED`/`CANCELED`, migration V28), `GET /training-plans?athleteId=` e `status` no `PUT`
- **#99** `PATCH /workouts/{id}`: reagendar treino
- **#100** `hasActivity` no resumo de treino (consulta em lote, sem N+1)
- **#101** `athleteId` opcional em `GET /workouts`: modo "todos os atletas vinculados" para o treinador, `athleteId` no resumo
- **#102** `athleteId` + `CoachAccessGuard` em `GET /activities`, `/activities/metrics` e `/activities/compare/{workoutId}`
- Relatórios por atleta para o treinador: `athleteId` em `POST /reports` e `GET /reports?athleteId=`
- `GET /coach/athletes`: atletas com vínculo ACTIVE do treinador
- `GET /coach/ai-suggestions/history?athleteId=&status=`: histórico de decisões de sugestões da IA
- `GET/PATCH /coaches/me` (bio e credenciais), `GET /coach/teams` e `PATCH /coach/teams/{id}` (renomear assessoria)
- `GET /coach/integrations`: disponibilidade de cada provedor e quantos atletas vinculados conectaram cada um
### Correções
- **Perfil de treinador nunca era criado**: nenhum fluxo criava a entidade `Coach`, então todo endpoint de treinador respondia 404 "Perfil de treinador não encontrado" para usuários reais. Agora `CoachProfileService.findOrCreate` cria o perfil sob demanda (cadastros novos, existentes e troca de role pelo admin).
- **Vazamento de estado em `PATCH /coach/ai-suggestions/{id}/decide`**: o vínculo passa a ser checado antes do status, então um treinador sem vínculo não distingue mais (400 vs 403) se a sugestão de outro atleta já foi decidida.
- **Revisão de segurança do módulo [IDENTITY]** (#83–#90, #92): conta desativada retorna 401 (não 500), filtro JWT tolera claims ausentes, limite de 72 caracteres na senha, e-mail normalizado em minúsculas, limpeza de tokens de redefinição expirados, `/actuator/health` sem detalhes para anônimos, HSTS atrás de proxy, CORS sem duplicação e resposta do refresh padronizada.
- **CI**: a imagem `minio/minio` deixou de ser distribuída no Docker Hub e quebrava todos os testes de integração; trocada por `pgsty/minio` (fork drop-in) no `docker-compose.yml` e no Testcontainers.
### Deploy
- Imagem publicada em `ghcr.io/kevindsousa/pite-backend` (tags `latest` e `sha-<commit>`) só depois do CI passar na `main`, com webhook opcional do Dokploy.
- A imagem sobe com `SPRING_PROFILES_ACTIVE=prod` por padrão, `JAVA_OPTS` ajustável, `HEALTHCHECK` em `/actuator/health` e graceful shutdown.
- `.env.production.example` com todas as variáveis de runtime do prod.
ver release completa →
Pite-Frontend
v0.9.0
v0.9.0 — Configurações
2026-09-27
## Checkpoint: fim do módulo `[SETTINGS] Configurações` (#40)
Versão **pré-1.0**, sem garantia de estabilidade de API. Com este módulo, **todas as issues do Pite-Frontend (#1–#43) estão concluídas**.
### O que entra nessa versão
- **Perfil do treinador/assessoria** (#41): tela `/settings` com formulário de bio/credenciais (`GET/PATCH /coaches/me`) e gestão de assessorias — listar, criar e renomear (`GET /coach/teams`, `PATCH /coach/teams/{id}`).
- **Integrações conectadas** (#42): disponibilidade real de cada provedor (configuração do admin) e quantos atletas vinculados conectaram cada um (`GET /coach/integrations`); sem ações de conectar/desconectar.
- **Preferências de notificação** (#43): toggles de alerta de sugestão da IA e resumo semanal, persistidos no navegador.
### Dependências de backend (já entregues)
- `GET/PATCH /coaches/me`, `GET /coach/teams`, `PATCH /coach/teams/{id}` (Pite-Backend `0bd6e6f`) — junto da correção que passou a criar o perfil de treinador sob demanda (antes, todo endpoint de treinador respondia 404 para usuários reais).
- `GET /coach/integrations` (Pite-Backend `f0d6081`).
### Limitações conhecidas
- Desativar/excluir assessoria não existe (exige decidir o destino dos vínculos dos atletas).
- Preferências de notificação ficam só no navegador — não há módulo de envio de notificações no backend.
- Lista de atletas, calendário e dashboard ainda usam `teamId` fixo como placeholder; `GET /coach/teams` já permite trocar pelo real.
ver release completa →
Pite-Frontend
v0.8.0
v0.8.0 — Sugestões de IA
2026-09-27
## Checkpoint: fim do módulo `[AI-INSIGHTS] Painel de sugestões de IA` (#36)
Versão **pré-1.0**, sem garantia de estabilidade de API.
### O que entra nessa versão
- **Listagem de sugestões pendentes** (#37): tela `/ai-insights` com sugestões de todos os atletas vinculados, justificativa sempre visível, destaque por severidade e e-mail do atleta em cada card; estados de carregando/erro/vazio distintos.
- **Aprovação/rejeição** (#38): confirmação só na rejeição, aviso de que aprovar não altera o plano automaticamente, remoção otimista com rollback; sugestão já decidida em outra aba (400) não volta à lista.
- **Histórico de decisões** (#39): aba "Histórico" persistente, com filtros por atleta e decisão; card compartilhado (`SuggestionCardComponent`) entre pendentes e histórico.
- **Deploy**: `Dockerfile` (nginx) e publicação da imagem no GHCR após o CI, prontos para o Dokploy (`PITE_API_BASE_URL` em build-time, `CSP_CONNECT_SRC` em runtime).
### Dependências de backend (já entregues)
- `GET /coach/ai-suggestions/history?athleteId=&status=` (Pite-Backend `c5f1879`).
- Checagem de vínculo antes do status em `PATCH /coach/ai-suggestions/{id}/decide` (Pite-Backend `eaba0ee`).
### Limitações conhecidas
- "Analisar agora" (disparo sob demanda) não existe: `generateForAthlete` não tem endpoint no backend.
- Justificativa da decisão sempre enviada como `null` (sem campo de texto na UI ainda).
ver release completa →
Pite-Frontend
v0.7.0
v0.7.0 — Análises e evolução
2026-09-27
## Checkpoint: fim do módulo `[ANALYTICS] Análises e evolução` (#32)
Versão **pré-1.0**, sem garantia de estabilidade de API.
### O que entra nessa versão
- **Gráficos de volume ao longo do tempo** (#33): ngx-charts (biblioteca de gráficos padrão do frontend), janela de 4/8/12 semanas, estado vazio.
- **Comparação planejado vs realizado** (#34): `PlannedVsActualCardComponent` compartilhado em `shared/`, 404 do backend tratado como "treino ainda não realizado", destaque de desvio de carga ≥ 3.
- **Exportação de relatório** (#35): seletor de atleta vinculado na tela de analytics (gráficos e exportação passam a ser por atleta), geração com loading sem duplo clique e histórico persistente de relatórios.
- **Correção**: histórico de atividades do atleta chamava `/activities/history` em vez de `/activities`.
### Dependências de backend (já entregues)
- `athleteId` + `CoachAccessGuard` em metrics/history/compare ([Pite-Backend#102](https://github.com/kevinDsousa/Pite-Backend/issues/102)).
- `athleteId` em `POST /reports`, `GET /reports?athleteId=` e `GET /coach/athletes` (Pite-Backend `ac3c8ea`).
### Limitações conhecidas
- CSV do relatório ainda é placeholder (só período), sem as métricas reais.
- `GET /reports/{id}` segue restrito ao próprio atleta — o front usa as URLs da listagem.
- Gráfico faz uma chamada a `/activities/metrics` por semana da janela (não há endpoint de série temporal).
ver release completa →
Pite-Frontend
v0.6.0
v0.6.0 — Calendário
2026-09-24
## Checkpoint: fim do módulo `[CALENDAR] Calendário` (#28)
Versão **pré-1.0**, sem garantia de estabilidade de API.
### O que entra nessa versão
- **Visualização mensal/semanal** (#29): grid customizado, navegação anterior/próximo/hoje, treinos agrupados por dia (sessões combinadas naturalmente lado a lado).
- **Drag-and-drop entre dias** (#30): Angular CDK, atualização otimista com rollback em caso de falha.
- **Filtro por atleta/tipo de treino** (#31): client-side, persistido via query params na URL.
### Limitações conhecidas
- `PATCH /workouts/{id}` não existe no backend ([Pite-Backend#99](https://github.com/kevinDsousa/Pite-Backend/issues/99)) — o drag-and-drop reverte visualmente até esse endpoint existir.
- Sem indicador `hasActivity` ([Pite-Backend#100](https://github.com/kevinDsousa/Pite-Backend/issues/100)) — nenhum treino é bloqueado pra arrastar, mesmo já executado.
- `athleteId` obrigatório em `GET /workouts` e ausente em `WorkoutSummaryResponse` ([Pite-Backend#101](https://github.com/kevinDsousa/Pite-Backend/issues/101)) — o filtro por atleta é funcionalmente inerte até existir o modo "todos os atletas vinculados".
ver release completa →
Pite-Frontend
v0.5.0
v0.5.0 — Gestão de treinos
2026-09-24
## Checkpoint: fim do módulo `[WORKOUTS] Gestão de treinos` (#23)
Versão **pré-1.0**, sem garantia de estabilidade de API.
### O que entra nessa versão
- **Listagem de planos de treino** (#24): filtro client-side por status (padrão ACTIVE).
- **Wizard de criação de plano** (#25): 3 passos — dados gerais, duração, confirmação com semanas geradas.
- **Editor de treino reutilizável** (#26): steps reordenáveis, suporte a sessão combinada (múltiplos treinos no mesmo dia), componente "burro" via outputs.
- **Templates de plano** (#27): salvar/listar/duplicar templates pra outro atleta, com aviso de que o template não traz os treinos.
### Limitações conhecidas
- `TrainingPlan` não tem campo de status no backend ainda, e não existe `GET /training-plans?athleteId=` ([Pite-Backend#98](https://github.com/kevinDsousa/Pite-Backend/issues/98)) — a listagem roda mas não retorna dado real até essa issue ser implementada.
- Wizard só cria planos — modo de edição de plano existente não está coberto.
- `athleteId`/`teamId` fixos como placeholder em várias telas (pendência recorrente desde o dashboard).
ver release completa →
Pite-Backend
v0.10.0
v0.10.0 — AI Engine, Integrações Externas e Segurança
2026-09-02
## O que há de novo
### [AI-ENGINE] Serviço de Inteligência Artificial (#64)
Módulo completo de análise automática do histórico do atleta com fluxo de aprovação humana pelo treinador.
- **#65** Estrutura do AI Service e contrato de entrada/saída (`AthleteTrainingSnapshot`, `TrainingSuggestion`, `TrainingAnalysisEngine`)
- **#66** Coleta de features do histórico do atleta (`FeatureCollectionService` — volume, ritmo, sono, RPE dos últimos 28 dias)
- **#67** Análise de fadiga/overtraining baseada em regras (`RuleBasedTrainingAnalysisEngine`)
- **#68** Geração e persistência de sugestões (`AiSuggestion` com status PENDING/APPROVED/REJECTED)
- **#69** `GET /coach/ai-suggestions` — lista sugestões pendentes dos atletas vinculados ao treinador
- **#70** `PATCH /coach/ai-suggestions/{id}/decide` — treinador aprova ou rejeita com justificativa; decisão definitiva via `CoachAccessGuard`
### [INTEGRATION] Integrações Externas (#57)
- **#58** Módulo integration-service e interface ActivityImportConnector
- **#59** GarminConnector — OAuth + importação de atividades
- **#60** StravaConnector — OAuth + importação de atividades
- **#61** TrainingPeaksConnector (esqueleto)
- **#62** AppleHealthConnector (esqueleto)
- **#63** Importação de atividade externa para Activity
### [SECURITY] Auditoria e correções de segurança
- **#93** @OwnershipRequired — verificação de ownership declarativa
- **#94** IDOR corrigido em endpoints de coach
- **#95** JWT secret fraco removido — guard em produção
- **#96** Redis exige autenticação em produção
---
🤖 Generated with [Claude Code](https://claude.com/claude-code)
ver release completa →
Pite-Backend
v0.1.0
v0.1.0 — Fundação do projeto Spring Boot
2026-08-12
## Checkpoint: fim do módulo `[INFRA] Fundação do projeto Spring Boot` (#1)
Versão **pré-1.0**, sem garantia de estabilidade de API — marca apenas que o módulo de fundação (issues #2 a #11) está concluído. Nenhum domínio de negócio (Identity, Athlete, Workout etc.) existe ainda.
### O que entra nessa versão
- **Estrutura do projeto**: Maven, Java 21, Spring Boot 4.1.0, empacotamento por domínio (#2).
- **Docker Compose**: Postgres + Redis + MinIO + app, com healthchecks e portas configuráveis via `.env` (#3).
- **PostgreSQL + Flyway**: `ddl-auto=validate` em todos os profiles, migrations versionadas (#4).
- **Cache Redis**: `RedisCacheManager` + `@EnableCaching`, convenção de nome/TTL documentada (#5).
- **MinIO**: `StorageService` genérico (upload/download/delete/presignedUrl), buckets iniciais criados automaticamente (#6).
- **Tratamento de erro global**: `ApiError` padronizado, `GlobalExceptionHandler` cobrindo 404/400/403/500 (#7).
- **Profiles `dev`/`prod`**: variáveis de ambiente, sem credencial hardcoded, CORS por ambiente (#8).
- **OpenAPI/Swagger**: documentação automática em `/swagger-ui/index.html`, versionamento `/api/v1` (#9).
- **CI/CD**: build + testes + Testcontainers + lint como gates obrigatórios em todo push/PR (#10).
- **Healthcheck + logging estruturado**: `/actuator/health` (Postgres/Redis/MinIO), logging via [trilha-log](https://github.com/trilha-log/trilha-log) com `traceId` de correlação por requisição (#11).
### Limitações conhecidas
- **Endpoints exigem HTTP Basic Auth por padrão** (senha aleatória gerada no boot), inclusive `/swagger-ui`, `/v3/api-docs` e rotas inexistentes (que deveriam devolver 404, hoje devolvem 401). Isso é o comportamento padrão do Spring Security sem um `SecurityFilterChain` customizado — só `/actuator/health` é liberado publicamente pela autoconfiguração do Actuator. Fica resolvido quando o épico `[IDENTITY]` (autenticação real) for implementado.
- **Proteção de branch em `main`** não pôde ser configurada — GitHub bloqueia essa feature (branch protection/rulesets) para repositórios privados em contas Free (exige upgrade para Pro/Team, ou tornar o repositório público).
### Como rodar
Ver `README.md` — `docker compose up -d --build` (com `.env` configurado, incluindo `GITHUB_ACTOR`/`GITHUB_TOKEN` para resolver o `trilha-log` do GitHub Packages).
ver release completa →