Sistema de Exclusão de Conta (LGPD-compliant)
Visão Geral
O sistema de exclusão de conta segue as melhores práticas de LGPD/GDPR, oferecendo:
- Desativação de membership — Acesso revogado mas dados mantidos
- Exclusão de conta — Período de 30 dias antes da exclusão permanente
Fluxo de Exclusão
- Usuário solicita exclusão em Configurações > Conta
- Confirma digitando o email
- Email de confirmação enviado com link de cancelamento
- Conta entra em período de carência (30 dias)
- Lembrete enviado 7 dias antes
- Último aviso 24 horas antes
- Exclusão permanente executada
O que é excluído
- Conta do usuário (CustomUser)
- Todas as memberships
- Notificações
- Preferências
- Transações de pontos
O que é mantido (anonimizado)
- Posts (autor removido)
- Comentários (autor removido)
Como cancelar
- Clique no link de cancelamento nos emails
- Acesse
/cancel-deletion?token=... - Faça login e cancele em Configurações > Conta
APIs
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /api/users/account/request-deletion/ | Solicitar exclusão |
| POST | /api/users/account/cancel-deletion/ | Cancelar exclusão |
| GET | /api/users/account/deletion-status/ | Verificar status |
Configuração
Variáveis de Ambiente
bash
FRONTEND_URL=http://localhost:3000Celery Beat Schedule
Adicione ao schedule para processar lembretes diariamente:
python
CELERY_BEAT_SCHEDULE = {
"process-deletion-reminders": {
"task": "apps.users.tasks.deletion.process_deletion_reminders",
"schedule": crontab(hour=8, minute=0), # Daily at 8 AM
},
}Modelos
AccountDeletionRequest
| Campo | Tipo | Descrição |
|---|---|---|
| user | FK → CustomUser | Usuário |
| status | CharField | pending/confirmed/cancelled/completed |
| scheduled_for | DateTimeField | Data agendada para exclusão |
| cancellation_token | CharField | Token único para cancelamento |
| days_remaining | Property | Dias restantes até exclusão |
AccountDeletionLog
| Campo | Tipo | Descrição |
|---|---|---|
| deletion_request | FK → AccountDeletionRequest | Pedido de exclusão |
| action | CharField | Ação realizada |
| details | JSONField | Detalhes adicionais |