Repository navigation
Closed
Labels
apitarefa que diz respeito à API em Java Spring Boottarefa que diz respeito à API em Java Spring Boot
Milestone
Description
T-305 - Implementar na API a consulta de auditoria
- Componente:
api. - Depende de: T-304 no
develope T-301, que criatrilhas_auditoria.resultado_id. - Data máxima: 11/11/2026
- Estimativa: 8 pontos (Fibonacci)
Entregável
- Fatia
synapse.api.auditoriacomGET /auditoria/jobseGET /auditoria/jobs/{id}conforme o contrato. - Política de acesso própria, que permite só o papel
auditore não confere posse. - Log da consulta com o usuário e o job consultado.
- Testes de autorização, de conteúdo e de observabilidade.
Descrição
A API grava a trilha de auditoria e os artefatos, mas nenhuma rota os devolve, e o auditor recebe 403 em todas as rotas de job. Esta tarefa implementa as duas rotas de leitura definidas na T-304.
Contexto e decisões tomadas
- A API é organizada em fatias por domínio, com visibilidade de pacote como fronteira (skill architecture (
api/.agents/skills/architecture/SKILL.md)). A consulta de auditoria é uma fatia nova,synapse.api.auditoria, que lê as tabelas com consultas próprias e não usa classes da fatiajob. - A autorização das rotas de job (
AutorizacaoJobs.java) é privada da fatiajobe só cobre/jobs/**. A fatia nova obtém o usuário comUsuarioAtual.obter(), que é público emcore.security, e recusa quem não temPapelDoUsuario.AUDITOR. - O corpo de erro segue o formato
{codigo, mensagem}usado pela API, comsem_permissaoejob_nao_encontrado. - O nome padrão do job é resolvido em SQL na fatia
job(NOME_RESOLVIDOe a junção da submissão inicial emJobRepository.java). A regra é do contrato HTTP e não pode divergir entre as telas. A fatiajobpassa a expor essa resolução por uma interface pública mínima (opção 3 da skill de arquitetura), e a fatia de auditoria a usa. simulacao_idsó vem preenchido na linha de geração. Para as demais linhas, a consulta deriva a simulação pelo código do resultado apontado, porquesimulacoes.codigo_gerado_idé único.- A submissão de uma linha de extração é derivada na leitura. A extração inicial chega a ela pela resposta do modelo (
respostas_modelo.prompt_ideextracoes_regras.resposta_id). A reextração chega pela rodada de correção cuja versão analisada é aregra_idda linha. - As métricas HTTP do Micrometer já medem volume, falha e duração por rota. Nenhuma métrica de domínio é criada.
Escopo
Dentro do escopo
- Controller, serviço, repositório, DTOs e tratamento de erro da fatia
auditoria. - A interface pública mínima da resolução do nome na fatia
job. - Testes da fatia.
Fora do escopo
- Mudança nas rotas e na autorização de
/jobs/**. - Filtros da listagem, áudio e detalhamento por matrícula.
- Fontes da simulação e modelo da transcrição, que entram na T-310 e na T-312.
Requisitos
Acesso
- Toda rota da fatia chama
UsuarioAtual.obter()antes de ler qualquer dado. Papel diferente deauditorrecebe 403sem_permissao. Sessão ausente continua recebendo 401 pela cadeia de segurança existente. GET /auditoria/jobs/{id}com id inexistente recebe 404job_nao_encontrado. Id malformado recebe 400.
Listagem
GET /auditoria/jobspagina comoGET /jobs(padrões, limites e validação depaginaetamanhoiguais) e devolve jobs de todos os usuários em ordem decrescente de criação, com o dono e o nome resolvido.
Registro do job
GET /auditoria/jobs/{id}monta as seções do contrato com uma consulta por seção, filtrada pelo job e ordenada cronologicamente.- Em
etapas, preenchersimulacao_idpela linha quando ela o traz, e senão pelo código do resultado apontado. Preenchersubmissao_idnas linhas de extração conforme o contexto acima. - Nenhuma seção lê
submissoes.binarionemresultados_simulacao.linhas. - Campos
jsonbsão devolvidos como vieram do banco, sem recompor números. Decimais preservam a precisão, como emJobRepository.
Observabilidade
- Abrir o
CorrelationContextcom ojob_ide o id do usuário auditor na consulta de um job, e só com o usuário na listagem, fechando-o ao terminar, inclusive em erro. O formatador de log já emite os dois campos (JsonLogFormatter). - Registrar em
infoa consulta concluída, com mensagem estável, e na listagem a página e o tamanho. Registrar emwarna recusa por papel, sem dados do token. Nenhum log inclui prompt, resposta, código, entrada ou conclusão.
Contexto técnico
- Entradas: token do usuário e id do job.
- Saídas: as duas respostas do contrato.
- Componentes afetados: pacote novo
api/src/main/java/synapse/api/auditoria/e um método público na fatiajobpara o nome resolvido. - Restrições: só leitura; nenhuma escrita em tabela; nenhuma consulta por concatenação de texto; resposta de erro sem detalhe interno.
- Referências: architecture (
api/.agents/skills/architecture/SKILL.md), logging (api/.agents/skills/logging/SKILL.md), metrics (api/.agents/skills/metrics/SKILL.md),api/src/main/java/synapse/api/core/security/UsuarioAtual.java,api/src/main/java/synapse/api/job/AutorizacaoJobs.java,api/src/main/java/synapse/api/job/JobRepository.java,AutorizacaoJobsTests(api/src/test/java/synapse/api/job/AutorizacaoJobsTests.java).
Critérios de aceitação
- Um auditor lista jobs de dois usuários diferentes e consulta um job que não é dele.
- Um profissional de RH recebe 403 nas duas rotas, e uma requisição sem sessão recebe 401.
- Num job com sugestão de adaptação, busca da meta e correção do código,
etapastraz cada linha com o resultado e a simulação derivada, eresultadostraz as execuções candidatas da busca. - Num job de texto com uma rodada de correção, as duas linhas de extração apontam a submissão inicial e a de correção.
- A resposta não tem o binário do áudio nem
linhas. - O nome da listagem de auditoria é igual ao de
GET /jobspara o mesmo job.
Definição de concluído (DoD)
make checknaapisem falha.- Testes exercitando as rotas com token de auditor, de RH e sem token, com logs serializados conferidos quanto ao usuário, ao
job_ide à ausência de conteúdo. - Saída de
/metricsconferida depois de exercitar as rotas, comhttp_server_requestspara os templates/auditoria/jobse/auditoria/jobs/{id}. - Resposta validada contra o schema da especificação num teste, como faz
ContratoDoStreamTestspara o stream.
Metadata
Metadata
Assignees
Labels
apitarefa que diz respeito à API em Java Spring Boottarefa que diz respeito à API em Java Spring Boot
Activity