Skip to content

PAV-92: Reorganizar detalhe da candidatura - #252

Merged
Benevanio merged 7 commits into
Cla-Code-Community:developfrom
Jovinull:jovinull/pav-92-frontend
Sep 7, 2026
Merged

Benevanio merged 7 commits into
Cla-Code-Community:developfrom
Jovinull:jovinull/pav-92-frontend

Conversation

@Jovinull

@Jovinull Jovinull commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Linear

Issue: PAV-92

Branch flow

  • Este PR é uma feature/fix/chore destinada a develop.
  • Este PR não contém alteração direta ou fluxo indevido para master.
  • A branch foi criada a partir da base prevista pelo fluxo do projeto.

Objetivo

Finalizar a experiência do detalhe da candidatura (JobDetailModal) pós PAV-19/90: hoje as informações principais ficam misturadas com um bloco de payload bruto que duplica dados já mostrados, dificultando identificar rápido o que importa.

Escopo

O que faz parte desta entrega:

  • Reorganização visual do JobDetailModal: local, modalidade, nível, fonte, salário e match ganham tiles rotulados.
  • Remoção da duplicação de dados entre os tiles principais e o bloco de payload bruto ("Payload da vaga" → "Detalhes adicionais").
  • Indicação visual de que as notas são salvas ao fechar o modal.

O que está fora do escopo:

  • Migração de modal para página dedicada — o próprio card só pede migrar se houver ganho claro de usabilidade/responsividade, e o modal atual já trata altura/scroll/responsividade adequadamente.
  • Qualquer alteração na timeline (PAV-19/90) — comportamento preservado sem mudança.
  • Anexos/links extras e novo evento de nota na timeline — o card proíbe explicitamente neste ticket.
  • Novo contrato de backend.

Resumo das alterações

  • JobDetailModal.tsx: promove local/modalidade/nível/fonte/salário/match a tiles rotulados (InfoTile); status isolado como pill; filtro redundantPayloadKeys remove do bloco de detalhes adicionais campos já representados em outro lugar; texto de feedback abaixo do campo de notas.
  • Ajuste de uma asserção pré-existente em jobs.test.tsx que checava o heading antigo ("Payload da vaga") — o fixture usado ali (url === jobLink) agora não tem mais nada de extra pra mostrar, então o bloco corretamente não renderiza.
  • Correção avulsa: mesmo timeout de um teste de boot pré-existente (server.test.ts) já ajustado no PR PAV-30: Relatórios/KPIs do candidato #251 — ainda não está em develop, então reaplicado aqui.

Como testar

npm run test --workspace=backend
npm run test --workspace=frontend
npm run build --workspace=frontend
npm run lint --workspace=frontend

Validation

  • Testes relevantes executados.
  • Build executado quando aplicável.
  • Validação manual realizada quando aplicável.
  • Critérios de aceite do card foram conferidos individualmente (8 critérios, verificação independente com evidência por caso — ver .specs/features/job-detail-reorganizacao/validation.md na branch).

Evidências executadas:

  • Backend: 60 arquivos, 570 testes aprovados.
  • Frontend: 53 arquivos, 352 testes aprovados (8 novos cobrindo o detalhe reorganizado).
  • Lint do frontend: sem erros (avisos preexistentes, fora do escopo).
  • Build do frontend: aprovado.

Impacto de banco / migration

  • Não altera schema nem migrations.

Impacto em contratos/API

  • Não altera contratos.

Impacto de configuração / infraestrutura

  • Não altera configuração.

Impacto de segurança

  • Sem impacto relevante.

Impacto de dados pessoais / privacidade

  • Sem tratamento novo ou alteração de dados pessoais.

Compatibilidade / dependências

  • Não depende de outra task/PR.

Evidências

  • .specs/features/job-detail-reorganizacao/validation.md (na branch): 8/8 critérios de aceite cobertos com evidência file:line, sensor de mutação sem sobreviventes.

Riscos

  • Baixo: mudança isolada de UI num único componente, sem alteração de contrato ou de dado persistido.

Rollback

  • Reverter este PR volta o JobDetailModal ao layout anterior; nenhuma migration ou dado persistido precisa ser desfeito.

Checklist final

  • Escopo limitado ao card.
  • Não inclui segredos, .env, certificados ou tokens.
  • Não inclui arquivos temporários, builds, caches ou artefatos desnecessários.
  • Não executa deploy como efeito desta PR.
  • Critérios de aceite do card foram conferidos individualmente.
  • Alterações de contrato possuem testes e documentação correspondentes (não aplicável — sem alteração de contrato).
  • Alterações em banco/migrations foram validadas quando aplicável (não aplicável — sem migration).

Local, modalidade, nível, fonte, salário e match viram tiles rotulados
em vez de chips soltas sem legenda. Status fica isolado como pill.
Bloco 'Detalhes adicionais' (ex Payload da vaga) não repete mais o que
já aparece nos tiles principais, no subtítulo ou no link 'Abrir vaga'.
Falha intermitente pré-existente e não relacionada à PAV-92: o timeout
padrão de 5s não sobra sob os 600+ testes concorrentes, mesmo passando
sempre isolado. Nenhuma asserção alterada. (mesma correção aplicada na
PAV-30, ainda não mergeada em develop).
@Benevanio
Benevanio merged commit 8773457 into Cla-Code-Community:develop Sep 7, 2026
1 check passed
@github-project-automation github-project-automation Bot moved this from Backlog to Done in JobAtlas – Kanban Sep 7, 2026
Benevanio added a commit that referenced this pull request Sep 28, 2026
…rd (#253)

## Release

Promoção da branch `develop` para `master`, consolidando 26 commits e 49
arquivos alterados.

## Objetivo

Disponibilizar em produção as entregas recentes de segurança,
versionamento da API, notas privadas por candidatura, melhorias no
dashboard e ajustes de confiabilidade/documentação.

## Escopo

Inclui as entregas das PRs `#234`, `#239`, `#242`, `#245`, `#246`,
`#250` e `#252`.

### API e documentação

- Adicionado o prefixo versionado `/api/v1` para os endpoints da API.
- Mantidas temporariamente as rotas sem prefixo para compatibilidade com
clientes existentes.
- Expandida a documentação OpenAPI/Swagger com schemas, respostas,
exemplos e endpoints principais.
- Atualizado o README com a estratégia de versionamento da API.

### Segurança

- Aplicado rate limit ao `POST /auth/register`, por IP e por e-mail.
- Endurecido o fallback de CORS em produção, sem permitir `localhost`
quando `CORS_ALLOWED_ORIGINS` não estiver configurada.
- Adicionado HSTS para tráfego HTTPS/produção.
- Aplicada CSP restritiva na API, frontend, painel administrativo, Nginx
e Vercel.
- Removido script inline de bootstrap do tema para compatibilidade com
CSP.
- Reforçada a renderização segura de descrições de vagas, bloqueando
atributos ativos, `iframe` e protocolos não permitidos.

### Candidaturas e dashboard

- Adicionado suporte a múltiplas notas privadas por candidatura.
- Criada a tabela `application_notes`, com migration, índices e remoção
em cascata.
- Disponibilizados endpoints autenticados para listar, criar, editar e
remover notas de vagas salvas.
- Garantido isolamento por usuário e ownership da vaga em todas as
operações de notas.
- Reorganizado o detalhe da candidatura com tiles para local,
modalidade, nível, fonte, salário e match.
- Removida a duplicação entre os dados principais e o bloco de detalhes
adicionais.
- Mantida compatibilidade com o campo legado de nota única para vagas
não rastreadas.

### Autenticação e confiabilidade

- Corrigidos tipos e fallbacks no envio de e-mail de boas-vindas.
- Validado `provider` como valor escalar antes da desconexão de contas
OAuth.
- Ajustado o timeout de teste de inicialização do servidor sob execução
completa da suíte.

### Documentação e fluxo de contribuição

- Adicionado template padrão de Pull Request.
- Atualizados `README.md`, `BACKEND.md` e `SECURITY.md`.
- Documentadas variáveis de ambiente de CORS e rate limiting.
- Registradas especificação, validação e handoff da PAV-92.

## Impacto de banco / migration

- [x] Altera schema e migrations.

Inclui a migration `0014_hard_korath`, que cria `application_notes` e
seus índices/foreign keys. A migration deve ser aplicada antes da
disponibilização do backend em produção.

## Impacto em contratos/API

- [x] Altera endpoint e comportamento de API.

A API passa a expor os endpoints em `/api/v1`. As rotas legadas sem
prefixo permanecem disponíveis temporariamente para evitar quebra
imediata de clientes.

Também foram adicionados endpoints de notas privadas em:

- `GET /saved-jobs/:id/notes`
- `POST /saved-jobs/:id/notes`
- `PATCH /saved-jobs/:id/notes/:noteId`
- `DELETE /saved-jobs/:id/notes/:noteId`

## Impacto de configuração / infraestrutura

- [x] Altera configuração de segurança.

A produção deve revisar:

- `CORS_ALLOWED_ORIGINS`
- `AUTH_RATE_LIMIT_IP_MAX`
- `AUTH_RATE_LIMIT_ACCOUNT_MAX`
- `AUTH_RATE_LIMIT_WINDOW_SECONDS`
- Headers CSP configurados em Nginx e Vercel

## Validação

As PRs de origem possuem cobertura automatizada para:

- Versionamento `/api/v1` e contrato Swagger.
- Rate limiting, CORS e HSTS.
- CSP e sanitização de conteúdo externo.
- CRUD e isolamento de notas privadas.
- Detalhe de candidatura e regressões de interface.
- Tipagem de autenticação e desconexão de provedores.

Também foram executados testes, lint e builds de backend/frontend nos
fluxos de origem.

## Riscos

- A aplicação de `0014_hard_korath` é obrigatória antes do deploy do
backend.
- Clientes devem migrar gradualmente para `/api/v1`; as rotas legadas
continuam disponíveis nesta etapa.
- CSP e CORS restritivos podem bloquear integrações externas não
declaradas.
- A PR está divergente de `master`; sincronizar a base com os dois
commits pendentes e revalidar os checks antes do merge.

## Rollback

O rollback pode ser realizado revertendo o merge da release.

Caso a migration já tenha sido aplicada, a reversão do código deve
preservar a tabela `application_notes` até que exista uma migration
reversa planejada, evitando perda de notas já criadas.

## Checklist final

- [x] Consolida entregas de `develop` para `master`.
- [x] Inclui alterações de API, banco, segurança, frontend e
documentação.
- [x] Mantém compatibilidade temporária com rotas legadas.
- [x] Possui migrations a serem aplicadas antes do deploy.
- [x] Sincronizar `develop` com os commits pendentes de `master`.
- [ ] Confirmar todos os checks da PR antes do merge.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants