Skip to content

Fix/job duplication#64

Merged
Benevanio merged 3 commits into
developfrom
fix/job-duplication
Apr 5, 2026
Merged

Fix/job duplication#64
Benevanio merged 3 commits into
developfrom
fix/job-duplication

Conversation

@Benevanio

Copy link
Copy Markdown
Collaborator

No description provided.

Copilot AI review requested due to automatic review settings April 5, 2026 14:18
@vercel

vercel Bot commented Apr 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
painel-vagas Ready Ready Preview, Comment Apr 5, 2026 2:18pm

@Benevanio Benevanio self-assigned this Apr 5, 2026
@Benevanio Benevanio moved this from Backlog to In Progress in JobAtlas – Kanban Apr 5, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Este PR busca corrigir a duplicação de vagas (principalmente quando a mesma vaga aparece em múltiplas plataformas/fontes) através de deduplicação por identidade (título/empresa/local) e merge de palavras‑chave/fontes, tanto no backend (pipeline) quanto no frontend (hook de filtragem).

Changes:

  • Implementa lógica de deduplicação + merge (keywords/fontes) no backend (scrapeAllSources) e no frontend (useJobsFiltering).
  • Estende o tipo Job no frontend para suportar keywords e sources.
  • Adiciona testes unitários cobrindo deduplicação e combinação de palavras‑chave.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
frontend/tests/unit/utils/useJobsFiltering.test.ts Novo teste cobrindo deduplicação de vagas equivalentes e merge de palavras‑chave.
frontend/src/types/jobs.ts Atualiza a interface Job para incluir keywords e sources.
frontend/src/hooks/useJobsFiltering.ts Deduplica vagas no client, normaliza busca e combina keywords/fontes para filtros.
backend/tests/unit/services/pipeline/scrapeAllSources.test.js Novo teste garantindo dedupe entre plataformas por título/empresa/local.
backend/src/pipeline/scrapeAllSources.js Implementa dedupe por identidade/URL normalizada e merge de campos/keywords/fontes.
backend/src/db/environment.json Altera o conjunto de KEYWORDS padrão persistido no environment.json.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +102 to +106
titulo: pickPreferredValue(existing.titulo, job.titulo),
empresa: pickPreferredValue(existing.empresa, job.empresa),
local: pickPreferredValue(existing.local, job.local),
link: pickPreferredValue(existing.link, job.link),
source: mergedSources.join(", ") || existing.source || job.source || "",

Copilot AI Apr 5, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Na deduplicação, a chave de comparação remove query/hash do link, mas o valor persistido em job.link é escolhido por pickPreferredValue (maior string). Isso tende a manter parâmetros de tracking (ex.: ?refId=...) mesmo quando já foi considerado equivalente, o que pode vazar dados/ruído e deixar URLs instáveis. Sugestão: ao mesclar, preferir a versão normalizada (sem query/hash) ou a URL mais “canônica” (ex.: a mais curta), e/ou armazenar o link original em um campo separado.

Copilot uses AI. Check for mistakes.
Comment on lines +81 to +93
function mergeKeywords(existing, incoming) {
const mergedKeywords = getMergedKeywords(existing, incoming);
const mergedSources = getMergedSources(existing, incoming);

return {
...existing,
...incoming,
titulo: pickPreferredValue(existing.titulo, incoming.titulo, existing.title, incoming.title),
empresa: pickPreferredValue(existing.empresa, incoming.empresa, existing.company, incoming.company),
local: pickPreferredValue(existing.local, incoming.local, existing.location, incoming.location),
link: pickPreferredValue(existing.link, incoming.link, existing.jobUrl, incoming.jobUrl),
jobUrl: pickPreferredValue(existing.jobUrl, incoming.jobUrl, existing.link, incoming.link),
source: mergedSources.join(", ") || existing.source || incoming.source || "",

Copilot AI Apr 5, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mergeKeywords agora está mesclando não só keywords, mas também campos de identidade (título/empresa/local/link) e fontes. Isso torna o nome enganoso e dificulta manutenção/leitura. Sugestão: renomear para algo como mergeJobs/mergeJobEntries (e manter mergeKeywords apenas para keywords, se ainda fizer sentido).

Copilot uses AI. Check for mistakes.
Comment on lines +88 to +93
titulo: pickPreferredValue(existing.titulo, incoming.titulo, existing.title, incoming.title),
empresa: pickPreferredValue(existing.empresa, incoming.empresa, existing.company, incoming.company),
local: pickPreferredValue(existing.local, incoming.local, existing.location, incoming.location),
link: pickPreferredValue(existing.link, incoming.link, existing.jobUrl, incoming.jobUrl),
jobUrl: pickPreferredValue(existing.jobUrl, incoming.jobUrl, existing.link, incoming.link),
source: mergedSources.join(", ") || existing.source || incoming.source || "",

Copilot AI Apr 5, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A chave de deduplicação normaliza a URL removendo query/hash, mas na mesclagem o link/jobUrl é escolhido por pickPreferredValue (string mais longa). Isso tende a preservar parâmetros de tracking (ex.: trackingId, refId) e pode deixar o output com URLs menos estáveis/mais sensíveis. Sugestão: ao mesclar, preferir a URL canônica (normalizada sem query/hash) ou a mais curta, e opcionalmente manter a URL original em um campo separado se precisar para auditoria.

Copilot uses AI. Check for mistakes.
Comment on lines 1 to 4
{
"KEYWORDS": [
"Java",
"Spring",
"RabbitMQ",
"Docker"
"Java"
]

Copilot AI Apr 5, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esta alteração reduz o conjunto padrão de KEYWORDS para apenas "Java". Como isso impacta diretamente o comportamento padrão do scraper/API (config lê src/db/environment.json), vale confirmar se é intencional para este PR de deduplicação; caso não seja, reverter ou justificar no PR para evitar mudança de funcionalidade inesperada em ambiente local/empacotado.

Copilot uses AI. Check for mistakes.
@Benevanio
Benevanio merged commit cdc66de into develop Apr 5, 2026
7 checks passed
@github-project-automation github-project-automation Bot moved this from In Progress to Done in JobAtlas – Kanban Apr 5, 2026
@Benevanio
Benevanio deleted the fix/job-duplication branch April 5, 2026 14:33
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