feat: salvar cenário na biblioteca + documentação de acesso externo à API #20

Merged
jhony75 merged 1 commit from feature/save-scenario-to-library-and-api-docs into develop 2026-09-03 11:37:53 -03:00
Owner

Resumo

Três pedidos desta rodada:

  1. API de reports (criação/leitura, CRUD completo): já existia — é a mesma API usada pelo frontend (POST/GET/PUT/DELETE /api/reports + duplicate). Documentado em docs/API.md como usar de fora do navegador: mesmo Basic Auth compartilhado do Traefik (provisório até o Authelia, ver ADR-0004), com exemplos de curl pra criar/listar/ler.
  2. "Nota geral" (overall_score): mantido como está por decisão explícita — sem critério definido ainda. Registrado no docs/BACKLOG.md (P2) pra não ficar esquecido.
  3. Salvar cenário na biblioteca: ScenarioBuilder.jsx (compartilhado entre "Novo report", ReportDetail, RunForm e RunDetail) ganha um checkbox "Também salvar esse cenário na biblioteca" — usa o endpoint POST /api/scenario-templates que já existia (sem exigir suíte). Escondido em Library.jsx, onde isso já é a ação principal.

Outras correções encontradas no caminho

  • bruno/Reports/Create Report.bru e docs/generate_bruno_collection.py tinham o exemplo de payload desatualizado desde o split do eeg (campos soltos em vez de aninhados). Corrigido.
  • docs/openapi.json regenerado a partir da aplicação real — estava desatualizado desde antes desta sessão de refactors.

Test plan

  • pytest no backend: 37/37 passando (nenhuma mudança de backend nesta PR, só validação de regressão)
  • vitest no frontend: 8/8 passando
  • Testado manualmente com dev server: criar cenário em "Novo report" com o checkbox marcado, confirmar que o cenário foi adicionado ao report e apareceu em "Cenários sem suíte" na Biblioteca; confirmado que o checkbox não aparece na própria tela Biblioteca
## Resumo Três pedidos desta rodada: 1. **API de reports (criação/leitura, CRUD completo)**: já existia — é a mesma API usada pelo frontend (`POST/GET/PUT/DELETE /api/reports` + `duplicate`). Documentado em `docs/API.md` como usar de fora do navegador: mesmo Basic Auth compartilhado do Traefik (provisório até o Authelia, ver ADR-0004), com exemplos de `curl` pra criar/listar/ler. 2. **"Nota geral" (overall_score)**: mantido como está por decisão explícita — sem critério definido ainda. Registrado no `docs/BACKLOG.md` (P2) pra não ficar esquecido. 3. **Salvar cenário na biblioteca**: `ScenarioBuilder.jsx` (compartilhado entre "Novo report", `ReportDetail`, `RunForm` e `RunDetail`) ganha um checkbox "Também salvar esse cenário na biblioteca" — usa o endpoint `POST /api/scenario-templates` que já existia (sem exigir suíte). Escondido em `Library.jsx`, onde isso já é a ação principal. ## Outras correções encontradas no caminho - `bruno/Reports/Create Report.bru` e `docs/generate_bruno_collection.py` tinham o exemplo de payload desatualizado desde o split do `eeg` (campos soltos em vez de aninhados). Corrigido. - `docs/openapi.json` regenerado a partir da aplicação real — estava desatualizado desde antes desta sessão de refactors. ## Test plan - [x] `pytest` no backend: 37/37 passando (nenhuma mudança de backend nesta PR, só validação de regressão) - [x] `vitest` no frontend: 8/8 passando - [x] Testado manualmente com dev server: criar cenário em "Novo report" com o checkbox marcado, confirmar que o cenário foi adicionado ao report **e** apareceu em "Cenários sem suíte" na Biblioteca; confirmado que o checkbox não aparece na própria tela Biblioteca
feat: salvar cenário na biblioteca do ScenarioBuilder + docs de API externa
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 3m24s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
8bcc6a4108
- ScenarioBuilder.jsx ganha um checkbox "Também salvar esse cenário na
  biblioteca". Quando marcado, além de adicionar o cenário ao
  Report/Run em edição, chama POST /api/scenario-templates (endpoint que
  já existia, sem exigir suíte) pra criar o mesmo cenário como template
  reutilizável. Funciona em qualquer lugar que usa o componente
  compartilhado — "Novo report" (ReportForm), ReportDetail, RunForm e
  RunDetail. Escondido via showSaveToLibrary={false} no próprio Library.jsx,
  onde salvar na biblioteca já é a ação principal (seria redundante).
  Falha ao salvar na biblioteca não descarta o preenchimento — mostra o
  erro e não adiciona o cenário, pra não perder silenciosamente uma ação
  que o usuário pediu explicitamente.

- docs/API.md ganha uma seção "Acesso externo": a API de Reports já é CRUD
  completo (create/list/read/update/delete/duplicate) usada pelo próprio
  frontend, sem endpoint separado pra integrações externas — autenticação
  é o mesmo Basic Auth compartilhado do Traefik (provisório até o Authelia
  substituir, ver ADR-0004), com exemplos de curl pra criar/listar/ler.

- bruno/Reports/Create Report.bru e docs/generate_bruno_collection.py
  estavam com o payload de exemplo desatualizado desde o split do eeg
  (has_photic/has_cardio/has_video soltos em vez de aninhados em "eeg").
  Corrigido só o necessário (não regenerei a coleção inteira — o gerador
  produz uma quebra de linha final diferente da que já estava commitada,
  o que sujaria todos os 53 arquivos sem nenhuma mudança de conteúdo real).

- docs/openapi.json regenerado a partir da aplicação real (script
  determinístico, sem edição manual) — estava desatualizado desde antes
  desta sessão (extração de módulos, split do eeg, Report.run).

Nenhuma mudança de contrato de API nem de schema — só documentação, exemplo
e uma funcionalidade de conveniência na UI. 37/37 testes de backend e 8/8
de frontend passando.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
jhony75 merged commit 1dfa85ced3 into develop 2026-09-03 11:37:53 -03:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
jhony75/eeg-qa!20
No description provided.