Remplace les diagrammes Mermaid par DBML (via kroki-dbml) pour une meilleure expressivité des schémas de base de données : - Ajout support notes, contraintes et indexes détaillés - Migration de tous les schémas d'entités partagées - Ajout fichier exemple dbml-example.md - Configuration plugin mkdocs-kroki pour rendu DBML
58 lines
2.0 KiB
Markdown
58 lines
2.0 KiB
Markdown
# Account Deletions
|
|
|
|
📖 Suppressions de compte avec grace period 30 jours (Article 17 RGPD)
|
|
|
|
## Diagramme
|
|
|
|
```kroki-dbml
|
|
Table users {
|
|
id uuid [primary key]
|
|
email varchar(255)
|
|
status varchar(20)
|
|
}
|
|
|
|
Table account_deletions {
|
|
id uuid [primary key]
|
|
user_id uuid [not null, unique, ref: - users.id, note: 'One-to-one: un user ne peut avoir qu une seule demande active']
|
|
status deletion_status_enum [not null, default: 'pending']
|
|
cancellation_token varchar(64) [unique, note: 'Token dans email pour annuler (expire après 30j)']
|
|
requested_at timestamp [not null, default: `now()`]
|
|
effective_at timestamp [not null, note: 'Auto-calculated: requested_at + 30 days']
|
|
cancelled_at timestamp [note: 'Timestamp annulation via lien email (NULL si non annulé)']
|
|
deleted_at timestamp [note: 'Timestamp suppression effective (NULL si pending/cancelled)']
|
|
deletion_reason text [note: 'Raison optionnelle fournie par l utilisateur']
|
|
deleted_data_summary jsonb [note: 'Résumé des données supprimées (audit trail)']
|
|
|
|
indexes {
|
|
(user_id) [unique]
|
|
(status, effective_at) [note: 'Daily cron job: WHERE status = pending AND effective_at < NOW()']
|
|
(cancellation_token) [unique]
|
|
}
|
|
}
|
|
|
|
Enum deletion_status_enum {
|
|
pending [note: 'Grace period actif (30j), compte désactivé, annulation possible']
|
|
cancelled [note: 'Utilisateur a annulé via lien email']
|
|
completed [note: 'Suppression effective réalisée après 30j']
|
|
}
|
|
```
|
|
|
|
## Légende
|
|
|
|
**Statuts** :
|
|
|
|
- `pending`: Grace period actif (30j), compte désactivé, annulation possible
|
|
- `cancelled`: Utilisateur a annulé via lien email
|
|
- `completed`: Suppression effective réalisée après 30j
|
|
|
|
**Processus** :
|
|
1. Demande → compte désactivé, contenus cachés
|
|
2. Email avec `cancellation_token` (valide 30j)
|
|
3. Si annulation → `status = cancelled`, compte réactivé
|
|
4. Si 30j écoulés → job cron supprime données, anonymise contenus
|
|
|
|
**Données supprimées** :
|
|
|
|
- Profil utilisateur, historique GPS/écoute, sessions
|
|
- Contenus créés : anonymisés (`créateur = "Utilisateur supprimé"`)
|