Uh oh!
There was an error while loading. Please reload this page.
feat(privacidade): exportar dados e excluir conta - #240
Conversation
…ode-Community#230) ## Linear Issue: PAV-119 Closes PAV-119 ## Branch flow - [ ] Este PR é uma feature/fix/chore destinada a `develop`. - [x] Este é um PR de release com origem `develop` e destino `master`. - [x] Este PR não pula o fluxo obrigatório entre `develop` e `master`. ## Objetivo Promover para `master` a implementação do lock distribuído do scraper, garantindo no máximo uma execução ativa do pipeline entre diferentes origens de disparo. ## Resumo das Alterações - Implementa lock distribuído no Valkey compartilhado por cron, execução manual administrativa e cache miss de `/scrape`. - Utiliza aquisição atômica com `SET NX PX`, TTL e renovação periódica. - Protege renovação e liberação por ownership/token. - Implementa comportamento fail-closed quando o Valkey não confirma a aquisição. - Cancela a execução de forma segura em caso de perda do lock. - Adiciona estado operacional com `runId`, origem, início e expiração sem expor o token proprietário. - Adiciona contratos HTTP para execução concorrente e indisponibilidade do run lock. - Alinha os defaults de `SCRAPER_RUN_LOCK_TTL` e `SCRAPER_RUN_LOCK_RENEW_INTERVAL` à semântica fail-fast definida anteriormente. - Adiciona cobertura de testes para concorrência, ownership, configuração, renovação, liberação e cenários de falha. - Atualiza documentação e configuração do Docker Compose. ## Arquivos e Módulos Afetados - Scraper Go - Run lock / Valkey - Scheduler e pipeline do scraper - Backend administrativo - Configuração do scraper - Docker Compose - Testes Go e backend - Documentação operacional ## Validação - [x] Implementação revisada contra o escopo da PAV-119. - [x] Ajustes solicitados no code review aplicados. - [x] Semântica fail-fast das configurações do run lock validada. - [x] Nenhuma alteração de frontend incluída no escopo. - [ ] CI final do PR de release validado. ## Observações Este PR promove alterações já integradas e revisadas em `develop`. Não realizar squash ou alterações adicionais diretamente em `master` fora do fluxo de release.
hltav
left a comment
There was a problem hiding this comment.
A implementação cobre boa parte do fluxo previsto na PAV-41, porém ainda existem dois pontos que precisam ser tratados antes da aprovação.
Primeiro, há uma dependência de integração com outra alteração de schema atualmente em review. O PR introduz uma migration com a mesma sequência utilizada por outro PR aberto, incluindo snapshot e journal do Drizzle. Antes do merge, será necessário reconciliar a ordem das migrations e regenerar os artefatos de schema com base no estado atualizado da develop.
Segundo, o fluxo de exclusão ainda não garante integralmente o critério de remoção/anonimização dos dados relacionados ao usuário. A alteração da FK de auditoria permite excluir a conta preservando os logs, porém remover apenas o vínculo direto com o usuário não garante, por si só, que os registros restantes deixem de conter dados identificáveis.
Revise o tratamento dos registros preservados após a exclusão, em especial os campos potencialmente correlacionáveis ou pessoais, e adicione cobertura garantindo que o estado final esteja de acordo com o critério de anonimização da PAV-41.
Após esses ajustes e a reconciliação das migrations, o PR pode voltar para revisão.
Jovinull
commented
Aug 29, 2026
Atualização aplicada em resposta ao review. Além da FK com Também atualizei a documentação e adicionei cobertura unitária para confirmar o payload de anonimização antes da remoção. Validação:
A migration |
Card
O que foi feito
GET /users/exporteDELETE /users/account.Validação
npm run test --workspace=backend— 61 arquivos e 575 testes aprovados.npm run test:coverage --workspace=backend— cobertura global: statements 90,58%, branches 81,53%, functions 91,45% e lines 91,32%.npm run test --workspace=frontend— 53 arquivos e 342 testes aprovados.npm run lint --workspace=frontendenpm run build --workspace=frontendaprovados./perfil: exportação iniciou o download demeus-dados.json; exclusão exibiu a confirmação final e enviou a requisição apenas após a segunda ação.Riscos
actor_idnulo.Evidências
Checklist