Skip to content

PAV-182: [Frontend] Revisar busca de vagas, filtros e integração com dados reais após PAV-181 - #336

Merged
hltav merged 20 commits into
masterfrom
develop
Nov 3, 2026
Merged

hltav merged 20 commits into
masterfrom
develop

Conversation

@hltav

@hltav hltav commented Nov 3, 2026

Copy link
Copy Markdown
Collaborator

Linear
Issue: PAV-182 — Revisar busca de vagas, filtros e integração com dados reais após PAV-181

Referência independente: PAV-184 — Vincular vagas salvas ao catálogo e enriquecer Match pelo perfil atual.

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.
A branch existente foi criada a partir de develop, conforme autorização da PAV-182. O README recomenda origem em master; a origem existente foi preservada, sem rebase, e o destino é Cla-Code-Community/candidate:develop.

Objetivo
Modernizar a interface de vagas do Candidate, preservando os contratos reais de busca, salvamento e a arquitetura modular da PAV-181. A ordenação por Match usa a pontuação recebida da API; quando a compatibilidade não estiver disponível, tabela, modal e Kanban exibem Não calculado, sem criar percentuais artificiais.

Escopo
O que faz parte desta entrega:

Paletas dark/light, destaques da Home e menu lateral.
Busca, filtros geográficos e áreas profissionais, tabela, detalhes e apresentação da compatibilidade.
Correções de parâmetros, componentes de apresentação, documentação e testes de regressão.
O que está fora do escopo:

Backend, scraper Go, front_admin, infraestrutura, migrations e deploy.
Enriquecimento das vagas salvas com Match pelo backend, pertencente à PAV-184. A PAV-182 funciona de forma independente e não depende dessa evolução para tratar corretamente scores ausentes.
Resumo das alterações
Atualiza a identidade visual dark/light e os destaques do hero e da sidebar.
Organiza os filtros em duas linhas, com continente, país, estado/região e cidade, multiselect de áreas, modalidades e senioridade.
Conecta Match ASC/DESC ao contrato existente de ordenação global da API, preservando URL, filtros e paginação; mantém os sorts existentes de Fonte, Nível e Publicada em.
Moderniza a tabela com área profissional, localização compacta, tags de tecnologias em linha única e expansão +N.
Normaliza equivalências geográficas e oferece acesso a localidades adicionais sem alterar dados persistidos.
Padroniza o modal de detalhes e seus rótulos em português.
Remove scores artificiais e recálculos após paginação/salvamento; preserva zero real e usa Não calculado para ausência.
Acrescenta regressões de filtros, ordenação, paginação, tags, localizações, modal e fluxo busca → salvar → Kanban → recarregar.
Arquivos e módulos afetados
frontend/src/app/dashboard: composição, sidebar e tema existente.
frontend/src/features/home, jobs e applications: hero, filtros, tabela, detalhes, API adapters, hooks e Kanban.
frontend/src/styles/globals.css, frontend/tests/unit/new_dashboard e frontend/docs/PAV-182-match-vagas-salvas.md.
Nenhum arquivo de backend, scraper, front_admin, .env, dicionário local ou scripts-local/ integra o PR.
Como testar
npm run test --workspace=frontend
npm run test --workspace=backend
npm run lint --workspace=frontend
npx tsc --noEmit -p frontend/tsconfig.json
npm run build --workspace=frontend
git diff --check
Resultados locais:

Frontend: 59 suítes e 468 testes passaram.
Backend: 82 suítes e 865 testes passaram; 18 testes ignorados. A primeira tentativa no sandbox falhou por listen EPERM; a execução fora do sandbox passou.
ESLint frontend: zero erros e quatro avisos (três em artefatos locais de coverage e um em teste preexistente).
Build frontend: passou; aviso de bundle acima de 500 kB.
TypeScript: 63 erros preexistentes, reproduzidos em snapshot de develop com as mesmas dependências; comparação por arquivo, código e mensagem identificou zero erros novos. Nenhuma correção alheia ao escopo foi aplicada.
git diff --check: passou.
Não foi repetida validação manual autenticada no navegador nesta finalização.
Validation
Lint executado
Testes relevantes executados
Coverage permanece dentro do mínimo do projeto
Build executado quando aplicável
Validação manual realizada quando aplicável
Documentação atualizada quando necessária
Cobertura será conferida pelo CI existente; percentuais não foram presumidos.

Impacto de banco / migration
Não altera schema nem migrations
Altera schema ou migrations
Detalhes: alterações restritas ao frontend Candidate.

Impacto em contratos/API
Não altera contratos
Altera endpoint, payload, schema ou comportamento de API
Detalhes: reutiliza GET /jobs/search, filtros existentes e GET/POST/PATCH /saved-jobs. A ausência de score passa a ser representada como null no modelo interno do frontend; nenhum contrato HTTP é alterado. O contrato atual de vagas salvas não retorna Match e sua evolução fica na PAV-184.

Impacto de configuração / infraestrutura
Não altera configuração
Altera env, Docker, filas, cache, serviços ou infraestrutura
Detalhes: sem novas dependências, workflows, templates ou configuração de infraestrutura.

Impacto de segurança
Sem impacto relevante
Impacto de segurança avaliado
Detalhes: mantém a sessão e os endpoints autenticados existentes.

Impacto de dados pessoais / privacidade
Sem tratamento novo ou alteração de dados pessoais
Impacto avaliado
Detalhes: usa o contexto de perfil existente, sem novo armazenamento de dados de Match.

Compatibilidade / dependências
Não depende de outra task/PR
Existe dependência ou ordem de deploy/merge
Detalhes: PAV-184 é uma evolução independente. Até sua entrega, vagas salvas sem score confiável apresentam Não calculado.

Evidências
Testes automatizados abrangem filtros, multiselect, geografia, ASC/DESC de Match, sorts preservados, paginação, tecnologias, localizações e detalhes.
Regressões do salvamento validam score real, zero e ausência, renderização no Kanban e recarga sem fabricar 45%.
Auditoria e limitação de recuperação por identidade documentadas em frontend/docs/PAV-182-match-vagas-salvas.md.
Riscos
Scores de vagas salvas permanecem indisponíveis até a PAV-184, conforme contrato atual.
Os erros globais preexistentes de TypeScript continuam pendentes; não houve novos diagnósticos nesta branch.
Coverage, CI remoto, revisão visual autenticada e revisão humana devem ser conferidos antes do merge.
Rollback
Reverter os commits da PAV-182 por PR, sem migrations ou alterações de contratos/infraestrutura.

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
Alterações em banco/migrations foram validadas quando aplicável
Os dois últimos itens são não aplicáveis: não há mudança de contrato HTTP, banco ou migration. O aceite manual autenticado permanece para revisão.

hltav and others added 20 commits November 2, 2026 13:32
(cherry picked from commit 4088b91c7a8930420222734fbb1f5329c07f915b)
(cherry picked from commit 4fa7a9f568c773931ef1f7733f2425098c0ebdca)
(cherry picked from commit 2b4c003a1be744a91a1cf0dc260c8f0f7eebcf44)
(cherry picked from commit 88e4ea7101557f183e4e54692189b2ae860dcff5)
(cherry picked from commit df77e85739da1c23adcfb0f079bf16bd3e038795)
(cherry picked from commit 2641443d8a45b223ef60a1267452ed441496e61d)
(cherry picked from commit 488d5a41ee99fd1bac42281c107406d466641ef2)
(cherry picked from commit bb4a44dd062fdf21c7502ccfa5eeb0a43b1313f7)
(cherry picked from commit fcd4609efbfd8ffb9597ee7ab8a27fecf367cb86)
(cherry picked from commit 590df90e1e029a2ffe8ce9909af7ec8fca3b98ec)
(cherry picked from commit 21a8624b9650cd004cda7ec7f1a6e829066346e1)
(cherry picked from commit b675136d7e1188ca102c22009df2f3c7bf1bf298)
(cherry picked from commit 0db3070f89c81e416057dd5e4ce4512ea003ca02)
(cherry picked from commit 25c842401f00ed8530760661aab09e875e6e5eaa)
(cherry picked from commit 2155f5673786d29bc796aaba8955aa72d3df7e2f)
…ate (#334)

## Descrição

Reorganiza o frontend Candidate em Feature-Based Architecture para
distribuir as responsabilidades antes concentradas em
`domains/new_dashboard` e manter cada funcionalidade em seu módulo.
Consolida `domains` em `features`, organiza a composição em `app` e os
recursos reutilizáveis em `shared`, preservando contratos HTTP, schemas,
autenticação, estado, cache, aparência e comportamento. Os modelos
distintos de Job continuam separados.

## Linear

Issue: [PAV-181](https://linear.app/candidateappbr/issue/PAV-181)

## Linear link

https://linear.app/candidateappbr/issue/PAV-181

## Branch flow

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

Branch reconstruída de `upstream/develop` (`4b786c1`), com os 15 commits
da PAV-181 aplicados em ordem e referência aos hashes originais. Os
quatro commits exclusivos da PAV-178 foram excluídos; a branch original
foi preservada.

## Objetivo

Concluir a arquitetura modular do frontend sem misturar
responsabilidades de catálogo de vagas, candidaturas e composição do
dashboard.

## Escopo

O que faz parte desta entrega:

- Migração e padronização arquitetural exclusivamente em `frontend/`.
- Atualização dos consumidores, imports, exports, mocks, testes e
documentação.
- Compatibilização dos imports com os filtros por família de vaga já
existentes em `develop` e das três props correspondentes em um fixture
de teste.

O que está fora do escopo:

- Backend, scraper, front_admin, infraestrutura, alterações de negócio,
redesenho visual e remoção de mocks funcionais.
- Correção dos diagnósticos TypeScript e do warning de lint
preexistentes.

## Resumo das alterações

- Remove `src/domains` após migrar seus consumidores para imports
canônicos.
- Distribui as funcionalidades entre applications, auth, dashboard,
help, home, jobs, marketing, mentoring, notifications e profile.
- Organiza `app/routes`, `app/providers`, `app/layouts` e
`app/dashboard`.
- Padroniza `api`, `hooks`, `components` e `pages`, preservando as
camadas efetivas de domínio e mantendo providers/contextos fora de
hooks.
- Organiza cliente HTTP, erros de API, utilitários e hooks reutilizáveis
em `shared`.
- Preserva os contratos distintos em `features/jobs/types/job.types.ts`
e `features/jobs/domain/job.ts`, assim como o contexto legado e os dados
demonstrativos.

## Arquivos e módulos afetados

- `frontend/src/app`, `frontend/src/features`, `frontend/src/shared` e
`frontend/src/main.tsx`.
- `frontend/tests`, `frontend/README.md` e `frontend/ARCHITECTURE.md`.
- Diff local validado: 176 arquivos, todos dentro de `frontend/`.

## Como testar

```bash
cd frontend
npm test -- --maxWorkers=1 --no-file-parallelism
npm run lint
npm run build
npx --no-install tsc --noEmit -p tsconfig.json
```

O TypeScript ainda apresenta os 63 diagnósticos preexistentes; a
comparação deve considerar os diagnósticos completos, e não apenas a
quantidade.

## Como foi testado

Validação executada novamente na branch reconstruída: 398 testes
aprovados em 55 arquivos, Vitest em modo serial, build de produção
aprovado e lint concluído com zero erros e um warning preexistente.
Comparação completa TypeScript: 63 antes e 63 depois, sem diagnósticos
novos ou removidos. Verificados 338 imports e 110 referências de
mocks/imports dinâmicos, sem caminhos quebrados ou ciclos estáticos
detectados. `git diff --check` aprovado.

## Validation

- [x] Lint executado
- [x] Testes relevantes executados
- [ ] Coverage permanece dentro do mínimo do projeto
- [x] Build executado quando aplicável
- [ ] Validação manual realizada quando aplicável
- [x] Documentação atualizada quando necessária

Coverage e validação visual manual não foram repetidos nesta
reconstrução; o gate de coverage deve ser confirmado na CI. Backend não
foi testado nesta entrega restrita ao frontend.

## Impacto de banco / migration

- [x] Não altera schema nem migrations
- [ ] Altera schema ou migrations

Detalhes: nenhuma mudança de banco.

## Impacto em contratos/API

- [x] Não altera contratos
- [ ] Altera endpoint, payload, schema ou comportamento de API

Detalhes: endpoints, métodos, payloads, schemas Zod, autenticação,
persistência, cache e mecanismos de atualização existentes foram
preservados.

## Impacto de configuração / infraestrutura

- [x] Não altera configuração
- [ ] Altera env, Docker, filas, cache, serviços ou infraestrutura

Detalhes: sem alterações de dependências ou infraestrutura no diff do
PR.

## Impacto de segurança

- [x] Sem impacto relevante
- [ ] Impacto de segurança avaliado

Detalhes: preservados fluxos de sessão, tokens, cookies, logout e rotas
protegidas.

## Impacto de dados pessoais / privacidade

- [x] Sem tratamento novo ou alteração de dados pessoais
- [ ] Impacto avaliado

Detalhes: dados e fluxos existentes de perfil, mensagens e notificações
foram preservados.

## Compatibilidade / dependências

- [x] Não depende de outra task/PR
- [ ] Existe dependência ou ordem de deploy/merge

Detalhes: baseada em `develop`, sem incluir os commits exclusivos da
PAV-178. Mantidas as funcionalidades de famílias de vagas já presentes
na base; conflitos foram resolvidos nos imports, com o fixture de teste
atualizado para as props atuais.

## Evidências

- Vitest: 55 arquivos e 398 testes aprovados na branch reconstruída.
- Build: 2445 módulos transformados; concluído com aviso de bundle acima
de 500 kB.
- TypeScript: comparação integral com o frontend original, 63
diagnósticos em ambos, zero adicionados/removidos.
- Lint: zero erros; warning preexistente de dependência de `useEffect`
em `tests/unit/new_dashboard/theme.toast.test.tsx`.
- Implementações dos seis arquivos envolvidos nos conflitos comparadas
com `upstream/develop`, excluindo apenas imports/reexports; corpos
preservados integralmente.
- Branch original e alterações locais externas preservadas em worktree
separada.

## Riscos

- A amplitude da movimentação exige confirmação dos checks e revisão de
ownership/imports antes do merge.
- `develop` avançou 19 commits durante a validação (incluindo a PAV-178
já integrada). O comparativo remoto mantém somente os 15 commits da
PAV-181 e 176 arquivos do frontend; não houve merge ou force push para
incorporar o avanço da base. A CI deve validar a integração com o
`develop` atual.
- Permanecem 63 diagnósticos TypeScript preexistentes, um warning de
lint e o aviso de tamanho do bundle; não foram corrigidos neste escopo.
- A integração de consulta ao Linear estava indisponível; a referência
ao card foi incluída, mas os critérios do card ainda devem ser
conferidos no Linear pelo revisor.
- A validação reutilizou as dependências já instaladas no ambiente; a CI
deve confirmar a instalação a partir do lockfile da base atual.

## Rollback

Reverter o merge deste PR ou seus commits arquiteturais em ordem
inversa. Não há migrations ou transformações de dados a desfazer; não
incluir os commits ou alterações paralelas da PAV-178 no rollback.

## Checklist final

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

Não houve alteração de contrato, banco ou migrations; os dois últimos
itens são não aplicáveis. O merge depende dos checks, revisão e
conferência dos critérios de aceite pendentes.
…dados reais após PAV-181 (#335)

## Linear

Issue: [PAV-182 — Revisar busca de vagas, filtros e integração com dados
reais após
PAV-181](https://linear.app/candidateappbr/issue/PAV-182/frontend-revisar-busca-de-vagas-filtros-e-integracao-com-dados-reais)

Referência independente: [PAV-184 — Vincular vagas salvas ao catálogo e
enriquecer Match pelo perfil
atual](https://linear.app/candidateappbr/issue/PAV-184/backend-vincular-vagas-salvas-ao-catalogo-e-enriquecer-match-pelo).

## Branch flow

- [x] Este PR é uma feature/fix/chore destinada a `develop`.
- [x] 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.

A branch existente foi criada a partir de `develop`, conforme
autorização da PAV-182. O README recomenda origem em `master`; a origem
existente foi preservada, sem rebase, e o destino é
`Cla-Code-Community/candidate:develop`.

## Objetivo

Modernizar a interface de vagas do Candidate, preservando os contratos
reais de busca, salvamento e a arquitetura modular da PAV-181. A
ordenação por Match usa a pontuação recebida da API; quando a
compatibilidade não estiver disponível, tabela, modal e Kanban exibem
`Não calculado`, sem criar percentuais artificiais.

## Escopo

O que faz parte desta entrega:

- Paletas dark/light, destaques da Home e menu lateral.
- Busca, filtros geográficos e áreas profissionais, tabela, detalhes e
apresentação da compatibilidade.
- Correções de parâmetros, componentes de apresentação, documentação e
testes de regressão.

O que está fora do escopo:

- Backend, scraper Go, front_admin, infraestrutura, migrations e deploy.
- Enriquecimento das vagas salvas com Match pelo backend, pertencente à
PAV-184. A PAV-182 funciona de forma independente e não depende dessa
evolução para tratar corretamente scores ausentes.

## Resumo das alterações

- Atualiza a identidade visual dark/light e os destaques do hero e da
sidebar.
- Organiza os filtros em duas linhas, com continente, país,
estado/região e cidade, multiselect de áreas, modalidades e senioridade.
- Conecta Match ASC/DESC ao contrato existente de ordenação global da
API, preservando URL, filtros e paginação; mantém os sorts existentes de
Fonte, Nível e Publicada em.
- Moderniza a tabela com área profissional, localização compacta, tags
de tecnologias em linha única e expansão `+N`.
- Normaliza equivalências geográficas e oferece acesso a localidades
adicionais sem alterar dados persistidos.
- Padroniza o modal de detalhes e seus rótulos em português.
- Remove scores artificiais e recálculos após paginação/salvamento;
preserva zero real e usa `Não calculado` para ausência.
- Acrescenta regressões de filtros, ordenação, paginação, tags,
localizações, modal e fluxo busca → salvar → Kanban → recarregar.

## Arquivos e módulos afetados

- `frontend/src/app/dashboard`: composição, sidebar e tema existente.
- `frontend/src/features/home`, `jobs` e `applications`: hero, filtros,
tabela, detalhes, API adapters, hooks e Kanban.
- `frontend/src/styles/globals.css`, `frontend/tests/unit/new_dashboard`
e `frontend/docs/PAV-182-match-vagas-salvas.md`.
- Nenhum arquivo de backend, scraper, front_admin, `.env`, dicionário
local ou `scripts-local/` integra o PR.

## Como testar

```bash
npm run test --workspace=frontend
npm run test --workspace=backend
npm run lint --workspace=frontend
npx tsc --noEmit -p frontend/tsconfig.json
npm run build --workspace=frontend
git diff --check
```

Resultados locais:

- Frontend: **59 suítes e 468 testes passaram**.
- Backend: **82 suítes e 865 testes passaram; 18 testes ignorados**. A
primeira tentativa no sandbox falhou por `listen EPERM`; a execução fora
do sandbox passou.
- ESLint frontend: **zero erros e quatro avisos** (três em artefatos
locais de coverage e um em teste preexistente).
- Build frontend: **passou**; aviso de bundle acima de 500 kB.
- TypeScript: **63 erros preexistentes**, reproduzidos em snapshot de
`develop` com as mesmas dependências; comparação por arquivo, código e
mensagem identificou **zero erros novos**. Nenhuma correção alheia ao
escopo foi aplicada.
- `git diff --check`: passou.
- Não foi repetida validação manual autenticada no navegador nesta
finalização.

## Validation

- [x] Lint executado
- [x] Testes relevantes executados
- [ ] Coverage permanece dentro do mínimo do projeto
- [x] Build executado quando aplicável
- [ ] Validação manual realizada quando aplicável
- [x] Documentação atualizada quando necessária

Cobertura será conferida pelo CI existente; percentuais não foram
presumidos.

## Impacto de banco / migration

- [x] Não altera schema nem migrations
- [ ] Altera schema ou migrations

Detalhes: alterações restritas ao frontend Candidate.

## Impacto em contratos/API

- [x] Não altera contratos
- [ ] Altera endpoint, payload, schema ou comportamento de API

Detalhes: reutiliza `GET /jobs/search`, filtros existentes e
`GET/POST/PATCH /saved-jobs`. A ausência de score passa a ser
representada como `null` no modelo interno do frontend; nenhum contrato
HTTP é alterado. O contrato atual de vagas salvas não retorna Match e
sua evolução fica na PAV-184.

## Impacto de configuração / infraestrutura

- [x] Não altera configuração
- [ ] Altera env, Docker, filas, cache, serviços ou infraestrutura

Detalhes: sem novas dependências, workflows, templates ou configuração
de infraestrutura.

## Impacto de segurança

- [x] Sem impacto relevante
- [ ] Impacto de segurança avaliado

Detalhes: mantém a sessão e os endpoints autenticados existentes.

## Impacto de dados pessoais / privacidade

- [x] Sem tratamento novo ou alteração de dados pessoais
- [ ] Impacto avaliado

Detalhes: usa o contexto de perfil existente, sem novo armazenamento de
dados de Match.

## Compatibilidade / dependências

- [x] Não depende de outra task/PR
- [ ] Existe dependência ou ordem de deploy/merge

Detalhes: PAV-184 é uma evolução independente. Até sua entrega, vagas
salvas sem score confiável apresentam `Não calculado`.

## Evidências

- Testes automatizados abrangem filtros, multiselect, geografia,
ASC/DESC de Match, sorts preservados, paginação, tecnologias,
localizações e detalhes.
- Regressões do salvamento validam score real, zero e ausência,
renderização no Kanban e recarga sem fabricar 45%.
- Auditoria e limitação de recuperação por identidade documentadas em
`frontend/docs/PAV-182-match-vagas-salvas.md`.

## Riscos

- Scores de vagas salvas permanecem indisponíveis até a PAV-184,
conforme contrato atual.
- Os erros globais preexistentes de TypeScript continuam pendentes; não
houve novos diagnósticos nesta branch.
- Coverage, CI remoto, revisão visual autenticada e revisão humana devem
ser conferidos antes do merge.

## Rollback

Reverter os commits da PAV-182 por PR, sem migrations ou alterações de
contratos/infraestrutura.

## Checklist final

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

Os dois últimos itens são não aplicáveis: não há mudança de contrato
HTTP, banco ou migration. O aceite manual autenticado permanece para
revisão.
@hltav
hltav merged commit 7c0535c into master Nov 3, 2026
3 checks passed
@github-project-automation github-project-automation Bot moved this from Backlog to Done in JobAtlas – Kanban Nov 3, 2026
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.

3 participants