Files
roadwave/docs/domains/_shared/entities/account-deletions.md
jpgiannetti 23fe67470b docs: migrer schémas BDD de Mermaid vers DBML
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
2026-02-12 20:49:02 +01:00

2.0 KiB

Account Deletions

📖 Suppressions de compte avec grace period 30 jours (Article 17 RGPD)

Diagramme

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é")