Skip to content

Develop - #258

Merged
Benevanio merged 5 commits into
masterfrom
develop
Sep 30, 2026
Merged

Benevanio merged 5 commits into
masterfrom
develop

Conversation

@hltav

@hltav hltav commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Linear

Issue: PAV-___

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

Descreva objetivamente o problema resolvido por esta PR.

Escopo

O que faz parte desta entrega:

O que está fora do escopo:

Resumo das alterações

Arquivos e módulos afetados

Como testar

# comandos de validaçã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

Impacto de banco / migration

  • Não altera schema nem migrations
  • Altera schema ou migrations

Detalhes:

Impacto em contratos/API

  • Não altera contratos
  • Altera endpoint, payload, schema ou comportamento de API

Detalhes:

Impacto de configuração / infraestrutura

  • Não altera configuração
  • Altera env, Docker, filas, cache, serviços ou infraestrutura

Detalhes:

Impacto de segurança

  • Sem impacto relevante
  • Impacto de segurança avaliado

Detalhes:

Impacto de dados pessoais / privacidade

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

Detalhes:

Compatibilidade / dependências

  • Não depende de outra task/PR
  • Existe dependência ou ordem de deploy/merge

Detalhes:

Evidências

Adicione logs, screenshots, links de execução ou outra evidência relevante.

Riscos

Rollback

Descreva como a alteração pode ser revertida com segurança.

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

Consulte o guia de contribuição do projeto para as regras completas.

RuhanFreitas and others added 5 commits September 3, 2026 19:50
Signed-off-by: Hudson Lima Tavares <109999011+hltav@users.noreply.github.com>
# Card
- PAV-121

# O que foi feito
- Organiza o pós-coleta do scraper-go em lotes limitados: coleta →
normalização → deduplicação → classificação → persistência → indexação,
com fila limitada (2 × maior lote), backpressure e cancelamento em todas
as etapas. Não cria goroutine por vaga e não acumula a coleta inteira
antes de persistir.
- Adiciona lotes configuráveis e fail-fast:
SCRAPER_CLASSIFICATION_BATCH_SIZE=100 (máx. 1000),
SCRAPER_PERSIST_BATCH_SIZE=100 (máx. 1000) e
SCRAPER_INDEX_BATCH_SIZE=250 (máx. 2500). Valor ausente usa o default;
valor explícito ≤0, vazio ou acima do máximo impede a inicialização. 1
permanece válido para diagnóstico. Compose usa ${VAR-default}.
- O catálogo coletado continua no Valkey (scraper:job:{id}) como fonte
da verdade da execução; o PostgreSQL segue para usuários/saved_jobs. A
indexação invertida só recebe IDs confirmados por SaveBatch.
Persistência em MULTI/EXEC por lote, com upsert pelo ID estável:
atualiza descrição, URL, classificação, fontes e keywords; campo vazio
não apaga dado existente. Falha no lote faz rollback, não indexa aquele
lote e aplica retry limitado só para erros transitórios.
- Indexação incremental com SADD em pipelines de
SCRAPER_INDEX_BATCH_SIZE, sem RENAME do set inteiro (isso apagaria lotes
anteriores da mesma execução). Se a indexação falhar após o persist,
ReindexPersistedJobs relê os documentos no Valkey e reconstrói os
índices, sem repetir a coleta externa.
- Deduplicação intra e inter-lote usa as chaves já existentes no domínio
(ID externo, title|company|location e URL canônica). Títulos iguais de
vagas diferentes são preservados. A classificação em lote mantém o
resultado individual, sem novas famílias, keywords ou pontuações. A
fórmula da cache key permanece inalterada.

# Validação

- [x] go test ./... em scraper-go
- [x] go test -race ./... em scraper-go
- [x] Conferir .env.example, docker-compose.yml e SCRAPER.md com
SCRAPER_CLASSIFICATION_BATCH_SIZE=100, -
[x]SCRAPER_PERSIST_BATCH_SIZE=100 e SCRAPER_INDEX_BATCH_SIZE=250
- [x] Confirmar que valores inválidos (0, vazio, acima do máximo)
impedem a inicialização e que 1 é aceito
- [x] Subir o scraper e validar nos logs scraper batch sizes / scraper
runtime configurado e os logs por run_id/lote (recebidos, duplicados,
aprovados, inseridos, atualizados, indexados, falhas, duração)
- [x] Executar uma coleta controlada e confirmar: só vagas persistidas
são indexadas; falha de persistência não indexa o lote; falha de
indexação fica registrada e pode ser reconciliada via
ReindexPersistedJobs; GET /jobs/search e healthcheck permanecem
compatíveis
- [x] Confirmar ausência de alterações em frontend/**, front_admin/**,
novas famílias/keywords e package-lock.json
@hltav
hltav requested a review from Benevanio as a code owner September 30, 2026 15:41
@Benevanio
Benevanio merged commit 480acab into master Sep 30, 2026
1 of 3 checks passed
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