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,263 @@
# language: fr
Fonctionnalité: Conditions d'activation de la monétisation
En tant que créateur
Je veux pouvoir activer la monétisation quand je remplis les critères
Afin de générer des revenus avec mes contenus
Contexte:
Étant donné que l'API RoadWave est disponible
Et que je suis connecté en tant que créateur
Scénario: Critère 1 - Ancienneté de 3 mois validée
Étant donné que mon compte a été créé il y a 91 jours
Quand je consulte les critères de monétisation
Alors le critère "Ancienneté 3 mois" est validé
Scénario: Critère 1 - Ancienneté insuffisante
Étant donné que mon compte a été créé il y a 60 jours
Quand je consulte les critères de monétisation
Alors le critère "Ancienneté 3 mois" n'est pas validé
Et je vois "Encore 30 jours avant d'être éligible"
Scénario: Critère 2 - 500 abonnés atteints
Étant donné que j'ai exactement 500 abonnés
Quand je consulte les critères de monétisation
Alors le critère " 500 abonnés" est validé
Scénario: Critère 2 - Pas assez d'abonnés
Étant donné que j'ai 347 abonnés
Quand je consulte les critères de monétisation
Alors le critère " 500 abonnés" n'est pas validé
Et je vois "Encore 153 abonnés nécessaires"
Scénario: Critère 3 - 10 000 écoutes complètes atteintes
Étant donné que mes contenus ont cumulé 10 487 écoutes complètes
Quand je consulte les critères de monétisation
Alors le critère " 10 000 écoutes complètes" est validé
Scénario: Critère 3 - Écoutes incomplètes non comptabilisées
Étant donné que mes contenus ont:
| type écoute | nombre |
| Écoutes complètes | 8 500 |
| Écoutes <80% | 3 000 |
Quand je consulte les critères de monétisation
Alors seules les 8 500 écoutes complètes comptent
Et je vois "Encore 1 500 écoutes complètes nécessaires"
Scénario: Critère 4 - Aucun strike actif
Étant donné que je n'ai aucun strike actif
Et que je n'ai eu aucun contenu modéré dans les 6 derniers mois
Quand je consulte les critères de monétisation
Alors le critère "Fiabilité" est validé
Scénario: Critère 4 - Strike actif bloque l'éligibilité
Étant donné que j'ai 1 strike actif pour contenu inapproprié
Quand je consulte les critères de monétisation
Alors le critère "Fiabilité" n'est pas validé
Et je vois "Vous devez résoudre votre strike avant d'être éligible"
Scénario: Critère 4 - Contenu modéré dans les 6 derniers mois
Étant donné que je n'ai pas de strike actif
Mais qu'un de mes contenus a été modéré il y a 4 mois
Quand je consulte les critères de monétisation
Alors le critère "Fiabilité" n'est pas validé
Et je vois "Attendre 2 mois après le dernier contenu modéré"
Scénario: Critère 5 - 5 contenus publiés dans les 90 derniers jours
Étant donné que j'ai publié:
| date de publication | titre |
| Il y a 15 jours | Contenu 1 |
| Il y a 30 jours | Contenu 2 |
| Il y a 45 jours | Contenu 3 |
| Il y a 60 jours | Contenu 4 |
| Il y a 75 jours | Contenu 5 |
Quand je consulte les critères de monétisation
Alors le critère " 5 contenus publiés dans les 90 derniers jours" est validé
Scénario: Critère 5 - Contenus trop anciens ne comptent pas
Étant donné que j'ai publié:
| date de publication | titre |
| Il y a 15 jours | Contenu 1 |
| Il y a 30 jours | Contenu 2 |
| Il y a 95 jours | Contenu 3 |
| Il y a 120 jours | Contenu 4 |
Quand je consulte les critères de monétisation
Alors seuls 2 contenus comptent (dans les 90 jours)
Et je vois "Encore 3 contenus à publier dans les 90 prochains jours"
Scénario: Tous les critères validés - Bouton disponible
Étant donné que tous mes critères sont validés:
| critère | statut |
| Ancienneté 3 mois | |
| 500 abonnés | |
| 10 000 écoutes | |
| Fiabilité | |
| Régularité (5 contenus) | |
Quand j'accède à mon profil créateur
Alors le bouton "Demander la monétisation" est actif
Et je peux cliquer pour démarrer le KYC
Scénario: Critères incomplets - Bouton grisé avec progression
Étant donné que mes critères sont:
| critère | statut | progression |
| Ancienneté 3 mois | | 100% |
| 500 abonnés | | 347/500 (69%) |
| 10 000 écoutes | | 8500/10000 (85%) |
| Fiabilité | | 100% |
| Régularité (5 contenus) | | 100% |
Quand j'accède à mon profil créateur
Alors le bouton "Demander la monétisation" est grisé
Et je vois la progression détaillée de chaque critère
Scénario: Vérification automatique SQL lors de la demande
Étant donné que je clique sur "Demander la monétisation"
Quand le système vérifie mes critères
Alors une requête SQL est exécutée:
```sql
SELECT
(created_at <= NOW() - INTERVAL '3 months') AS anciennete_ok,
(SELECT COUNT(*) FROM subscriptions WHERE creator_id = :creator_id) >= 500 AS abonnes_ok,
(SELECT SUM(complete_listens) FROM contents WHERE creator_id = :creator_id) >= 10000 AS ecoutes_ok,
(SELECT COUNT(*) FROM strikes WHERE creator_id = :creator_id AND status = 'active') = 0 AS strikes_ok,
(SELECT COUNT(*) FROM moderated_contents WHERE creator_id = :creator_id AND moderated_at >= NOW() - INTERVAL '6 months') = 0 AS moderation_ok,
(SELECT COUNT(*) FROM contents WHERE creator_id = :creator_id AND published_at >= NOW() - INTERVAL '90 days') >= 5 AS regularite_ok
FROM users WHERE id = :creator_id;
```
Et si tous les critères sont TRUE, je suis redirigé vers le KYC
Scénario: Notification par email quand critères atteints
Étant donné que je viens d'atteindre 500 abonnés
Et que c'était mon dernier critère manquant
Quand le système détecte l'éligibilité
Alors je reçois un email:
"""
Félicitations ! Vous êtes maintenant éligible à la monétisation.
Accédez à votre profil pour activer la monétisation et commencer à gagner des revenus.
"""
Scénario: Badge "Éligible monétisation" dans profil
Étant donné que je remplis tous les critères
Mais que je n'ai pas encore activé la monétisation
Quand un utilisateur consulte mon profil
Alors il voit un badge "Éligible monétisation 💰"
Et cela renforce ma crédibilité de créateur
Scénario: Justification anti-fraude - Délai 3 mois
Étant donné qu'un compte suspect crée du contenu frauduleux
Quand le compte est détecté dans les 2 premiers mois
Alors le compte est banni avant d'atteindre les 3 mois
Et le créateur n'a jamais été éligible à la monétisation
Et aucun paiement n'a été effectué
Scénario: Justification qualité - 10 000 écoutes
Étant donné qu'un créateur produit du contenu de mauvaise qualité
Quand ses contenus ne génèrent que 2 000 écoutes complètes
Alors il ne peut pas activer la monétisation
Et seuls les créateurs avec contenu apprécié sont monétisés
Scénario: Réduction coût administratif plateforme
Étant donné que RoadWave a 10 000 créateurs inscrits
Et que seuls 500 remplissent tous les critères
Quand le système calcule le coût administratif
Alors seulement 500 KYC sont à gérer (vs 10 000)
Et seulement 500 virements mensuels (vs 10 000)
Et la charge comptable est réduite de 95%
Scénario: Statistiques publiques pour transparence
Quand un utilisateur consulte la page "Devenir créateur"
Alors il voit les statistiques:
| métrique | valeur exemple |
| Nombre créateurs monétisés | 1 247 |
| Revenus moyens par créateur | 127/mois |
| Top créateur (anonymisé) | 2 450/mois |
| Critères d'éligibilité à remplir | 5 critères |
Et cela permet de fixer des attentes réalistes
Scénario: Cache Redis pour calcul rapide critères
Étant donné que je consulte mes critères de monétisation
Quand le système charge la page
Alors les compteurs sont récupérés depuis Redis:
| clé Redis | exemple valeur |
| creator:[id]:subscribers_count | 347 |
| creator:[id]:complete_listens_total | 8500 |
| creator:[id]:recent_contents_count | 7 |
Et le temps de réponse est <50ms
Scénario: Mise à jour temps réel des compteurs
Étant donné que je viens de publier un nouveau contenu
Quand un utilisateur écoute ce contenu en entier
Alors le compteur "complete_listens_total" est incrémenté immédiatement
Et si je rafraîchis la page critères, je vois la nouvelle valeur
Et cela encourage les créateurs à continuer de produire
Scénario: Historique des tentatives d'activation
Étant donné que j'ai tenté d'activer la monétisation il y a 2 mois
Mais que les critères n'étaient pas remplis
Quand j'accède à mes logs d'activité
Alors je vois:
| date | action | résultat | raison |
| 2025-11-15 | Demande monétisation | Refusée | Seulement 300 abonnés |
Et cela m'aide à suivre ma progression
Scénario: Performance avec 100 000 créateurs
Étant donné que RoadWave a 100 000 créateurs
Et que chacun consulte ses critères 1 fois par jour
Quand le système traite ces requêtes
Alors la table users est indexée sur created_at
Et la table subscriptions est indexée sur creator_id
Et la table contents est indexée sur creator_id et published_at
Et chaque requête reste <50ms grâce aux index
Scénario: Export des critères pour support client
Étant donné que je contacte le support car je pense être éligible
Quand l'agent support consulte mon compte
Alors il voit un export JSON complet:
```json
{
"creator_id": "abc123",
"monetization_eligible": false,
"criteria": {
"account_age_days": 75,
"account_age_ok": false,
"subscribers_count": 512,
"subscribers_ok": true,
"complete_listens_total": 11234,
"complete_listens_ok": true,
"active_strikes": 0,
"strikes_ok": true,
"moderated_contents_6m": 1,
"moderation_ok": false,
"recent_contents_90d": 8,
"regularity_ok": true
},
"blocking_criteria": ["account_age", "moderation_history"]
}
```
Et l'agent peut expliquer précisément pourquoi je ne suis pas éligible
Scénario: Notification 30 jours avant éligibilité probable
Étant donné que mes critères sont:
| critère | statut | progression |
| Ancienneté 3 mois | | 60/90 jours |
| Tous les autres critères | | 100% |
Quand il reste exactement 30 jours avant les 90 jours
Alors je reçois une notification:
"""
Plus que 30 jours avant d'être éligible à la monétisation !
Préparez vos documents KYC (SIRET, RIB, CNI) pour gagner du temps.
"""
Scénario: Pas de bypass possible pour amis/influenceurs
Étant donné qu'un créateur influent me contacte directement
Et qu'il demande un bypass des critères
Quand je consulte la politique RoadWave
Alors la réponse est "Aucune exception possible, critères automatiques uniquement"
Et cela garantit l'équité pour tous les créateurs
Scénario: A/B test futur sur seuils (post-MVP)
Étant donné que RoadWave veut tester des seuils différents
Quand un A/B test est lancé en 2027
Alors groupe A voit: 500 abonnés, 10 000 écoutes
Et groupe B voit: 300 abonnés, 5 000 écoutes
Et les métriques (taux activation, fraude, qualité) sont comparées
Et le meilleur seuil est déployé définitivement