Skip to content

[PAV-115] - front-melhorias-de-filtros - #256

Merged
Benevanio merged 2 commits into
developfrom
PAV-115-front-melhorias-de-filtros
Sep 28, 2026
Merged

Benevanio merged 2 commits into
developfrom
PAV-115-front-melhorias-de-filtros

Conversation

@Benevanio

Copy link
Copy Markdown
Collaborator

O que foi feito?

Implementado sistema robusto de busca e filtro de vagas com suporte a índices invertidos no Valkey, detecção e auto-reparo de documentos órfãos, seed de catálogo com vagas calibradas para match de perfil, e filtros granulares por localização (país, continente, estado, cidade), contrato, empresa e senioridade. A busca utiliza índice global (scraper:jobs:index) como fonte primária, hidratando documentos em janelas de até 10 fatias para evitar varredura completa em índices grandes. IDs sem documento correspondente no Valkey são detectados, removidos do índice automaticamente (auto-reparo espelhando scraper-go), e contabilizados no total retornado. Filtros estruturados (país, tecnologia, família, senioridade) usam índices invertidos (scraper:jobs:*) quando disponíveis; filtros post-only como empresa caem no caminho fallback de busca full-scan seguida de pós-filtro em memória. Perfis técnicos do usuário agora são hidratados no seed com tecnologias e nível, permitindo priorização de vagas compatíveis: cacheSearchKeywords() retorna IDs de vagas que casam com o perfil do candidato, reordenando resultados de maior para menor match. Infer de localização foi refatorado em tabela declarativa (LOCATION_RULES, BRAZILIAN_STATES, KNOWN_CITIES), espelhando estrutura do scraper Go para consistência bit-a-bit. Novo método inferJobContract() classifica vagas como CLT, PJ ou cooperado a partir de título, descrição e localização. Interface SearchJobFilters expandida com novos campos: seniority, state, city, contract, family, technology, company. Frontend removeu recalcular match quando backend já forneceu matchScore, e eliminou re-filtro client-side por modelo (quebrava paginação). Seed de desenvolvimento cria 12 vagas em catálogo calibradas de 99% a 45% match com perfil técnico do dev (React, TypeScript, Node.js, PostgreSQL, Docker, AWS), e atualiza perfil técnico se usuário existir. Testes unitários cobrem: hidratação de páginas com órfãos, auto-reparo, limite de esforço (max 10 janelas), priorização por perfil, pós-filtro por empresa e contrato, e matching de regras de localização. Nova função buildFilterParams() remove filtros vazios antes de enviar, evitando cache poisoning. Sem mudança no contrato HTTP; apenas refactor de busca, hidratação e seed.

Documentos alterados

  • .cspell/custom-dictionary-workspace.txt [change]
  • LOCAL_DEVELOPMENT.md [change]
  • backend/src/lib/cache.ts [change]
  • backend/src/modules/jobs/filters/jobSearch.filter.ts [change]
  • backend/src/modules/jobs/parsers/jobSearchQuery.parser.ts [change]
  • backend/src/modules/jobs/services/searchJobs.service.ts [change]
  • backend/src/modules/jobs/types/jobSearch.types.ts [change]
  • backend/src/scripts/seed.ts [change]
  • backend/src/scripts/seedCatalogJobs.ts [add]
  • backend/tests/unit/app.test.ts [change]
  • backend/tests/unit/libs/cache.test.ts [change]
  • backend/tests/unit/modules/jobs/jobSearch.filter.test.ts [add]
  • backend/tests/unit/modules/jobs/searchJobs.service.test.ts [add]
  • backend/tests/unit/scripts/seedCatalogJobs.test.ts [add]
  • docker-compose.migrate.yml [change]
  • frontend/src/domains/jobs/application/useJobsData.ts [change]
  • frontend/src/domains/new_dashboard/NewDashboardPage.tsx [change]
  • frontend/src/domains/new_dashboard/hooks/useDashboardJobs.ts [change]
  • frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts [change]

Checklist

  • Testado?
  • Documentado?
  • Build passando?

Benevanio and others added 2 commits September 28, 2026 16:50
…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.
@Benevanio
Benevanio merged commit a6c93b2 into develop Sep 28, 2026
1 check failed
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