Repository navigation
Merged
Conversation
(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
requested review from
nayarakarinesilva and
pedrosilvaadev
as code owners
November 3, 2026 23:17
nayarakarinesilva
approved these changes
Nov 3, 2026
Benevanio
approved these changes
Nov 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.