refactor(docs): réorganiser la documentation selon principes DDD

Réorganise la documentation du projet selon les principes du Domain-Driven Design (DDD) pour améliorer la cohésion, la maintenabilité et l'alignement avec l'architecture modulaire du backend.

**Structure cible:**
```
docs/domains/
├── README.md (Context Map)
├── _shared/ (Core Domain)
├── recommendation/ (Supporting Subdomain)
├── content/ (Supporting Subdomain)
├── moderation/ (Supporting Subdomain)
├── advertising/ (Generic Subdomain)
├── premium/ (Generic Subdomain)
└── monetization/ (Generic Subdomain)
```

**Changements effectués:**

Phase 1: Création de l'arborescence des 7 bounded contexts
Phase 2: Déplacement des règles métier (01-19) vers domains/*/rules/
Phase 3: Déplacement des diagrammes d'entités vers domains/*/entities/
Phase 4: Déplacement des diagrammes flux/états/séquences vers domains/*/
Phase 5: Création des README.md pour chaque domaine
Phase 6: Déplacement des features Gherkin vers domains/*/features/
Phase 7: Création du Context Map (domains/README.md)
Phase 8: Mise à jour de mkdocs.yml pour la nouvelle navigation
Phase 9: Correction automatique des liens internes (script fix-markdown-links.sh)
Phase 10: Nettoyage de l'ancienne structure (regles-metier/, diagrammes/, features/)

**Configuration des tests:**
- Makefile: godog run docs/domains/*/features/
- scripts/generate-bdd-docs.py: features_dir → docs/domains

**Avantages:**
 Cohésion forte: toute la doc d'un domaine au même endroit
 Couplage faible: domaines indépendants, dépendances explicites
 Navigabilité améliorée: README par domaine = entrée claire
 Alignement code/docs: miroir de backend/internal/
 Onboarding facilité: exploration domaine par domaine
 Tests BDD intégrés: features au plus près des règles métier

Voir docs/REFACTOR-DDD.md pour le plan complet.
This commit is contained in:
jpgiannetti
2026-02-07 17:15:02 +01:00
parent 78422bb2c0
commit 5e5fcf4714
227 changed files with 1413 additions and 1967 deletions

View File

@@ -0,0 +1,254 @@
# language: fr
@rgpd @account-deletion
Fonctionnalité: Suppression du compte utilisateur (Article 17 RGPD - Droit à l'effacement)
# 13.4 - Grace period 30j + anonymisation contenus
Contexte:
Étant donné que je suis un utilisateur connecté
Et que j'ai utilisé l'application depuis plusieurs mois
Scénario: Demande de suppression depuis les paramètres
Étant donné que je suis dans "Paramètres > Compte"
Quand je clique sur "Supprimer mon compte"
Alors une page d'avertissement s'affiche avec le message:
"""
Attention: La suppression de votre compte est définitive.
Que se passe-t-il lors de la suppression?
- Votre compte sera désactivé immédiatement (connexion impossible)
- Vos données personnelles seront supprimées dans 30 jours
- Vos contenus créés resteront disponibles de manière anonyme
- Vous pouvez annuler la suppression dans les 30 jours
Voulez-vous vraiment continuer?
"""
Et deux boutons sont disponibles: "Annuler" et "Confirmer la suppression"
Scénario: Confirmation de suppression avec mot de passe
Étant donné que je clique sur "Confirmer la suppression"
Quand un formulaire de confirmation s'affiche
Alors je dois entrer mon mot de passe pour confirmer
Et je dois cocher "Je comprends que cette action est définitive"
Et un captcha peut être requis pour éviter les suppressions automatisées
Quand je valide le formulaire
Alors la suppression est initiée
# Désactivation immédiate
Scénario: Compte désactivé immédiatement après confirmation
Étant donné que j'ai confirmé la suppression de mon compte
Quand la demande est traitée
Alors mon compte est désactivé immédiatement
Et je suis déconnecté de toutes mes sessions
Et je ne peux plus me reconnecter
Et si j'essaie de me connecter, je reçois le message:
"""
Votre compte est en cours de suppression. Si vous souhaitez annuler, cliquez sur le lien reçu par email.
"""
Scénario: Contenus cachés pendant le grace period
Étant donné que mon compte est en cours de suppression
Quand un autre utilisateur recherche mes contenus
Alors mes contenus ne sont plus diffusés dans l'application
Et mes contenus n'apparaissent plus dans les recherches
Et mes contenus ne sont plus recommandés
Mais mes contenus ne sont pas encore supprimés définitivement
# Email de confirmation avec lien d'annulation
Scénario: Email de confirmation envoyé immédiatement
Étant donné que j'ai confirmé la suppression de mon compte
Quand la demande est traitée
Alors je reçois un email avec le sujet "Confirmation de suppression de votre compte RoadWave"
Et l'email contient:
"""
Bonjour,
Votre compte RoadWave est en cours de suppression. Vos données seront définitivement supprimées le [date + 30j].
Si vous changez d'avis, vous pouvez annuler la suppression en cliquant sur le lien ci-dessous (valide 30 jours):
[Annuler la suppression]
Que se passe-t-il ensuite?
- Votre compte est désactivé immédiatement
- Vos contenus sont masqués de l'application
- Vos données seront supprimées dans 30 jours
- Vous pouvez annuler à tout moment pendant ces 30 jours
Pour toute question: dpo@roadwave.fr
"""
Et le lien d'annulation est valide 30 jours
# Grace period de 30 jours
Scénario: Annulation de la suppression dans les 30 jours
Étant donné que j'ai demandé la suppression de mon compte le 2025-01-20
Et que je reçois l'email de confirmation
Quand je clique sur le lien "Annuler la suppression" le 2025-02-05 (16 jours plus tard)
Alors mon compte est réactivé immédiatement
Et je peux me reconnecter normalement
Et mes contenus redeviennent visibles dans l'application
Et toutes mes données sont restaurées
Et je reçois un email de confirmation: "Votre compte a été réactivé"
Scénario: Lien d'annulation expire après 30 jours
Étant donné que j'ai demandé la suppression de mon compte le 2025-01-20
Quand j'essaie de cliquer sur le lien d'annulation le 2025-02-25 (36 jours plus tard)
Alors le lien est expiré
Et je reçois un message "Ce lien a expiré. Votre compte a été définitivement supprimé."
Et la suppression effective a déjà eu lieu
# Suppression effective après 30 jours
Scénario: Suppression effective sans annulation
Étant donné que j'ai demandé la suppression de mon compte le 2025-01-20
Et que je n'ai pas cliqué sur le lien d'annulation
Quand la date atteint le 2025-02-19 (30 jours plus tard)
Alors un job automatique exécute la suppression définitive
Et toutes mes données personnelles sont supprimées
# Données supprimées
Scénario: Liste des données supprimées définitivement
Étant donné que la suppression effective est exécutée
Quand le job de suppression se termine
Alors les données suivantes sont supprimées:
| données | supprimé |
| Compte utilisateur (email, mdp) | oui |
| Profil (pseudo, bio, avatar) | oui |
| Historique d'écoute | oui |
| Historique GPS | oui |
| Centres d'intérêt (jauges) | oui |
| Sessions et tokens | oui |
| Likes et abonnements | oui |
| Notifications non lues | oui |
| Historique consentements | oui |
| Données de paiement | oui |
Et ces suppressions sont irréversibles
# Contenus conservés anonymement
Scénario: Anonymisation des contenus créés
Étant donné que j'ai créé 10 contenus audio
Quand la suppression effective est exécutée
Alors mes contenus audio restent disponibles dans l'application
Et le nom du créateur devient "Utilisateur supprimé"
Et mon pseudo n'est plus visible
Et les métadonnées (titre, description, tags, géolocalisation) sont conservées
Et les fichiers audio restent sur le CDN
Et les statistiques d'écoute sont conservées
Scénario: Justification de l'anonymisation (intérêt légitime)
Étant donné que mes contenus sont conservés anonymement
Quand un auditeur RGPD vérifie la conformité
Alors la conservation est justifiée par l'intérêt légitime de la communauté
Et les contenus ne contiennent plus de données personnelles identifiables
Et la suppression complète nuirait à l'expérience des autres utilisateurs
Et cette pratique est conforme au RGPD si anonymisation réelle
Scénario: Contenu anonymisé visible pour les autres utilisateurs
Étant donné que mon compte a été supprimé
Et que mes contenus ont été anonymisés
Quand un utilisateur consulte un de mes anciens contenus
Alors le créateur affiché est "Utilisateur supprimé"
Et le profil du créateur n'est plus accessible
Et le contenu reste écoutable normalement
Et les likes et statistiques sont conservés
# Likes et abonnements supprimés
Scénario: Suppression de mes likes avec conservation des compteurs
Étant donné que j'avais liké 50 contenus
Quand la suppression effective est exécutée
Alors mes likes sont supprimés de la base de données
Mais les compteurs de likes sur les contenus sont préservés
Et les créateurs ne perdent pas leurs statistiques
Et seule la relation "user X a liké content Y" est supprimée
Scénario: Suppression de mes abonnements
Étant donné que je suivais 20 créateurs
Quand la suppression effective est exécutée
Alors mes abonnements sont supprimés
Et les compteurs d'abonnés des créateurs sont décrémentés de 1
Et les créateurs ne reçoivent pas de notification de désabonnement
# Sessions et tokens révoqués
Scénario: Révocation de tous les tokens immédiatement
Étant donné que je suis connecté sur 3 appareils (mobile, tablette, web)
Quand je demande la suppression de mon compte
Alors tous mes tokens d'authentification sont révoqués immédiatement
Et je suis déconnecté de tous mes appareils
Et toute tentative de reconnexion échoue
# Notifications avant suppression
Scénario: Rappels par email pendant le grace period
Étant donné que j'ai demandé la suppression de mon compte le 2025-01-20
Quand le grace period s'écoule
Alors je reçois des emails de rappel:
| date | jours restants | sujet email |
| 2025-02-04 | 15 jours | Plus que 15 jours pour annuler la suppression |
| 2025-02-12 | 7 jours | Dernière semaine pour annuler la suppression |
| 2025-02-17 | 2 jours | Attention: suppression définitive dans 2 jours |
Et chaque email contient le lien d'annulation
# Conformité RGPD Article 17
Scénario: Conformité droit à l'effacement
Étant donné que la suppression de mon compte est complète
Quand un auditeur RGPD vérifie la conformité
Alors le processus respecte l'article 17 du RGPD:
| exigence RGPD | respecté |
| Suppression de toutes les données personnelles | oui |
| Délai raisonnable (30j grace period acceptable)| oui |
| Possibilité d'annulation (bonne pratique) | oui |
| Anonymisation des contenus (intérêt légitime) | oui |
| Révocation des tokens et sessions | oui |
| Suppression irréversible | oui |
# Cas particuliers
Scénario: Suppression d'un compte Premium
Étant donné que j'ai un abonnement Premium actif
Quand je demande la suppression de mon compte
Alors mon abonnement est annulé immédiatement
Et aucun remboursement n'est effectué (conformément aux CGV)
Et je reçois un email de confirmation d'annulation de l'abonnement
Et le reste du processus de suppression se déroule normalement
Scénario: Suppression d'un compte créateur avec revenus en attente
Étant donné que je suis un créateur avec 75 de revenus en attente de paiement
Quand je demande la suppression de mon compte
Alors un message m'informe:
"""
Vous avez 75 de revenus en attente. Souhaitez-vous recevoir ce paiement avant suppression?
"""
Et je peux choisir "Recevoir le paiement et attendre" ou "Renoncer au paiement"
Et si je choisis "Recevoir le paiement", la suppression est repoussée de 7 jours
Scénario: Suppression avec signalements de modération en cours
Étant donné que j'ai 2 signalements en cours de traitement
Quand je demande la suppression de mon compte
Alors les signalements sont automatiquement clôturés
Et les contenus signalés sont masqués immédiatement
Et aucune sanction n'est appliquée (compte déjà en suppression)
# Traçabilité pour audit
Scénario: Log de la suppression pour traçabilité
Étant donné que la suppression effective est exécutée
Quand le job de suppression se termine
Alors un log est créé avec:
| champ | valeur |
| user_id | [ID anonymisé] |
| deletion_requested_at | 2025-01-20T10:00:00Z |
| deletion_executed_at | 2025-02-19T02:00:00Z |
| deletion_cancelled | false |
| data_deleted | [liste des tables] |
| contents_anonymized | 10 |
Et ce log est conservé 5 ans pour audit RGPD
Et l'user_id est pseudonymisé pour anonymat