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.
271 lines
12 KiB
Gherkin
271 lines
12 KiB
Gherkin
# language: fr
|
||
|
||
Fonctionnalité: Audio-guides Premium et monétisation
|
||
En tant que créateur
|
||
Je veux pouvoir proposer des audio-guides Premium
|
||
Afin de monétiser mon contenu de qualité
|
||
|
||
Contexte:
|
||
Étant donné que l'application RoadWave est démarrée
|
||
Et que le créateur "guide@example.com" est connecté et vérifié
|
||
|
||
# 16.9 - Audio-guides Premium
|
||
|
||
Scénario: Création d'un audio-guide Premium
|
||
Étant donné que le créateur crée un audio-guide "Visite VIP Versailles"
|
||
Quand il accède aux paramètres de monétisation (étape 4)
|
||
Alors il peut choisir:
|
||
| option | description |
|
||
| Gratuit | Accessible à tous (avec pubs) |
|
||
| Premium | Réservé abonnés Premium |
|
||
|
||
Scénario: Badge Premium visible sur l'audio-guide
|
||
Étant donné un audio-guide configuré en Premium
|
||
Quand il est affiché dans les résultats de recherche
|
||
Alors un badge "👑 Premium" est visible
|
||
Et la cover image a un cadre doré subtil
|
||
|
||
Scénario: Preview 3 premières séquences pour utilisateurs gratuits
|
||
Étant donné un audio-guide Premium "Visite VIP Versailles" avec 15 séquences
|
||
Et qu'un utilisateur gratuit ouvre l'audio-guide
|
||
Quand il consulte la liste des séquences
|
||
Alors les séquences affichent:
|
||
| séquence | état |
|
||
| 1 | ✅ Accessible (preview) |
|
||
| 2 | ✅ Accessible (preview) |
|
||
| 3 | ✅ Accessible (preview) |
|
||
| 4 | 🔒 Réservé Premium |
|
||
| 5-15 | 🔒 Réservé Premium |
|
||
|
||
Scénario: Écoute des 3 premières séquences sans blocage
|
||
Étant donné un utilisateur gratuit
|
||
Et un audio-guide Premium avec preview
|
||
Quand il écoute les séquences 1, 2 et 3
|
||
Alors aucune publicité n'est insérée (preview = teasing)
|
||
Et l'écoute est fluide
|
||
|
||
Scénario: Paywall après la 3ème séquence
|
||
Étant donné qu'un utilisateur gratuit termine la séquence 3
|
||
Quand la séquence se termine
|
||
Alors un overlay paywall s'affiche immédiatement:
|
||
"""
|
||
👑 Contenu réservé Premium
|
||
|
||
Continuez cette expérience exclusive
|
||
et accédez à 12 séquences supplémentaires
|
||
|
||
✓ Sans publicité
|
||
✓ Accès illimité à tous les contenus Premium
|
||
✓ Téléchargement offline
|
||
✓ Audio haute qualité
|
||
|
||
[Passer Premium - 4.99€/mois]
|
||
[Découvrir d'autres audio-guides gratuits]
|
||
"""
|
||
|
||
Scénario: Bouton "Passer Premium" vers tunnel d'abonnement
|
||
Étant donné que l'overlay paywall Premium est affiché
|
||
Quand l'utilisateur clique sur "Passer Premium"
|
||
Alors il est redirigé vers la page d'abonnement Mangopay
|
||
Et l'audio-guide actuel est marqué en "pending" (reprise après souscription)
|
||
|
||
Scénario: Reprise automatique après souscription Premium
|
||
Étant donné qu'un utilisateur s'est abonné Premium depuis un paywall audio-guide
|
||
Quand l'abonnement est activé
|
||
Alors il est redirigé vers l'audio-guide automatiquement
|
||
Et la séquence 4 démarre immédiatement
|
||
Et un toast de bienvenue s'affiche: "✨ Bienvenue Premium ! Profitez de votre audio-guide"
|
||
|
||
Scénario: Utilisateur Premium - Accès complet immédiat
|
||
Étant donné qu'un utilisateur Premium ouvre un audio-guide Premium
|
||
Quand il consulte la liste des séquences
|
||
Alors toutes les 15 séquences sont accessibles
|
||
Et aucun paywall ne s'affiche
|
||
Et aucune publicité n'est insérée
|
||
|
||
Scénario: Pas de preview si l'audio-guide a <3 séquences
|
||
Étant donné un audio-guide Premium avec seulement 2 séquences
|
||
Quand un utilisateur gratuit tente de l'ouvrir
|
||
Alors un paywall s'affiche immédiatement (avant lecture)
|
||
Et aucune preview n'est disponible
|
||
|
||
# 16.10 - Revenus créateur
|
||
|
||
Scénario: Rémunération créateur pour audio-guide Premium
|
||
Étant donné un créateur avec un audio-guide Premium
|
||
Et que 50 utilisateurs Premium ont écouté l'audio-guide ce mois
|
||
Quand la répartition des revenus est calculée
|
||
Alors le créateur reçoit 70% des revenus proportionnels
|
||
Et la formule est: (Écoutes créateur / Total écoutes Premium) × 70% pool Premium
|
||
|
||
Scénario: Dashboard revenus par audio-guide
|
||
Étant donné qu'un créateur a 3 audio-guides Premium publiés
|
||
Quand il consulte son dashboard revenus
|
||
Alors il voit pour chaque audio-guide:
|
||
| audio_guide | ecoutes_mois | revenus_estime |
|
||
| Visite VIP Versailles | 142 | 45.20 € |
|
||
| Secrets du Louvre | 89 | 28.50 € |
|
||
| Châteaux de la Loire | 203 | 64.80 € |
|
||
|
||
Scénario: Comparaison gratuit vs Premium
|
||
Étant donné qu'un créateur a publié 2 audio-guides:
|
||
| titre | type | ecoutes_mois | revenus |
|
||
| Tour de Paris | Gratuit | 1200 | 3.60 € |
|
||
| Visite VIP Versailles| Premium | 142 | 45.20 € |
|
||
Quand il consulte son dashboard
|
||
Alors il peut comparer les performances
|
||
Et constater que Premium génère plus de revenus par écoute
|
||
|
||
Scénario: Seuil minimum de paiement (50€)
|
||
Étant donné qu'un créateur a généré 42€ de revenus ce mois
|
||
Quand le paiement mensuel est traité
|
||
Alors le montant est reporté au mois suivant
|
||
Et un message s'affiche: "Seuil minimum non atteint (50€). Montant reporté."
|
||
|
||
Scénario: Paiement automatique mensuel
|
||
Étant donné qu'un créateur a généré 138.50€ de revenus en janvier
|
||
Quand le 15 février arrive
|
||
Alors le paiement est initié automatiquement via Mangopay
|
||
Et le créateur reçoit une notification: "Paiement de 138.50€ en cours"
|
||
Et les fonds arrivent sous 1-3 jours ouvrés (SEPA)
|
||
|
||
# 16.11 - Publicités dans audio-guides gratuits
|
||
|
||
Scénario: Insertion publicité toutes les 5 séquences (gratuit)
|
||
Étant donné un audio-guide gratuit avec 12 séquences
|
||
Et un utilisateur gratuit
|
||
Quand il termine la séquence 5
|
||
Alors une publicité démarre automatiquement
|
||
Quand il termine la séquence 10
|
||
Alors une deuxième publicité démarre
|
||
|
||
Scénario: Publicité après séquence en mode piéton (avec pause)
|
||
Étant donné un audio-guide piéton gratuit
|
||
Quand la séquence 5 se termine
|
||
Alors la publicité démarre automatiquement (pas d'attente bouton)
|
||
Et la pub est skippable après 5 secondes
|
||
Quand la publicité se termine
|
||
Alors le player se met en pause
|
||
Et l'utilisateur doit cliquer sur [▶|] pour continuer
|
||
|
||
Scénario: Publicité en mode voiture/vélo/transport (automatique)
|
||
Étant donné un audio-guide voiture gratuit
|
||
Quand la séquence 5 se termine
|
||
Alors la publicité démarre automatiquement
|
||
Quand la publicité se termine
|
||
Alors la séquence 6 démarre automatiquement (pas de pause)
|
||
Parce que l'utilisateur est en conduite (mode hands-free)
|
||
|
||
Scénario: Publicités géolocalisées dans audio-guides
|
||
Étant donné un audio-guide dans la région "Île-de-France"
|
||
Quand une publicité doit être insérée
|
||
Alors l'API publicitaire filtre par:
|
||
| critère | valeur |
|
||
| Géolocalisation | Île-de-France |
|
||
| Catégorie | Tourisme, Culture |
|
||
| Langue | Français |
|
||
|
||
Scénario: Comptabilisation revenus pub pour créateur
|
||
Étant donné qu'un audio-guide gratuit génère 200 écoutes complètes
|
||
Et que chaque écoute complète = 2 publicités (séq. 5 et 10)
|
||
Quand les revenus pub sont calculés
|
||
Alors 400 impressions pub sont diffusées
|
||
Et le créateur reçoit 0.60€ (200 écoutes × 0.003€)
|
||
|
||
# 16.12 - Stratégies de conversion
|
||
|
||
Scénario: CTA Premium après audio-guide gratuit complété
|
||
Étant donné qu'un utilisateur gratuit complète un audio-guide gratuit
|
||
Quand il termine la dernière séquence
|
||
Alors un overlay s'affiche:
|
||
"""
|
||
🎉 Audio-guide complété !
|
||
|
||
Vous avez aimé cette expérience ?
|
||
Découvrez nos audio-guides Premium pour aller plus loin
|
||
|
||
[Découvrir Premium] [Fermer]
|
||
"""
|
||
|
||
Scénario: Recommandations d'audio-guides Premium après gratuit
|
||
Étant donné qu'un utilisateur termine un audio-guide gratuit "Tour de Paris"
|
||
Quand l'overlay de fin s'affiche
|
||
Alors 3 audio-guides Premium similaires sont suggérés:
|
||
| titre | type | créateur |
|
||
| Secrets de Montmartre | Premium | @paris_stories |
|
||
| Visite VIP Musée d'Orsay | Premium | @art_guide |
|
||
| Paris hors des sentiers | Premium | @explore_paris |
|
||
|
||
Scénario: Badge "Premium recommandé" sur audio-guides populaires
|
||
Étant donné un audio-guide Premium avec >500 écoutes et note >4.5/5
|
||
Quand il est affiché dans les résultats de recherche
|
||
Alors un badge "⭐ Premium recommandé" est visible
|
||
Et il est mis en avant dans les résultats
|
||
|
||
Scénario: Conversion tracking pour attribution créateur
|
||
Étant donné qu'un utilisateur découvre Premium via un audio-guide créateur
|
||
Quand il s'abonne
|
||
Alors la conversion est trackée:
|
||
| donnée | valeur |
|
||
| source_conversion | audio_guide_paywall |
|
||
| audio_guide_id | visite_vip_versailles_123 |
|
||
| creator_id | guide_versailles_456 |
|
||
Et le créateur bénéficie d'un bonus de conversion
|
||
|
||
# Cas d'usage
|
||
|
||
Scénario: Créateur mix gratuit + Premium
|
||
Étant donné qu'un créateur a publié 5 audio-guides:
|
||
| titre | type |
|
||
| Découverte de Paris | Gratuit |
|
||
| Visite VIP Louvre | Premium |
|
||
| Balade Montmartre | Gratuit |
|
||
| Secrets Versailles | Premium |
|
||
| Visite express Orsay | Gratuit |
|
||
Quand un utilisateur découvre son profil
|
||
Alors les audio-guides gratuits servent de teasing
|
||
Et les audio-guides Premium sont mis en avant avec badge
|
||
|
||
Scénario: Utilisateur hésite à s'abonner
|
||
Étant donné qu'un utilisateur atteint le paywall d'un audio-guide Premium
|
||
Et qu'il clique sur "Découvrir d'autres audio-guides gratuits"
|
||
Quand il revient 2 jours plus tard sur le même audio-guide
|
||
Alors le paywall s'affiche à nouveau
|
||
Et une réduction temporaire est proposée: "Offre spéciale : -20% premier mois"
|
||
|
||
# Cas d'erreur
|
||
|
||
Scénario: Échec du paiement Premium via paywall
|
||
Étant donné qu'un utilisateur tente de s'abonner Premium
|
||
Quand le paiement Mangopay échoue
|
||
Alors un message d'erreur s'affiche:
|
||
"""
|
||
❌ Paiement refusé
|
||
Vérifiez vos informations bancaires ou contactez votre banque.
|
||
[Réessayer] [Annuler]
|
||
"""
|
||
|
||
Scénario: Abonnement Premium expiré pendant écoute
|
||
Étant donné qu'un utilisateur Premium écoute un audio-guide Premium
|
||
Et que son abonnement expire pendant l'écoute (séquence 8/15)
|
||
Quand l'expiration est détectée
|
||
Alors l'écoute continue jusqu'à la fin de la séquence en cours
|
||
Et un overlay s'affiche ensuite:
|
||
"""
|
||
⚠️ Votre abonnement Premium a expiré
|
||
|
||
Renouvelez pour continuer à profiter des contenus exclusifs
|
||
[Renouveler - 4.99€/mois] [Plus tard]
|
||
"""
|
||
|
||
Scénario: Créateur change audio-guide de gratuit à Premium
|
||
Étant donné qu'un audio-guide gratuit a 50 utilisateurs avec progression
|
||
Quand le créateur le passe en Premium
|
||
Alors les utilisateurs ayant déjà commencé gardent l'accès complet
|
||
Et seuls les nouveaux utilisateurs sont soumis au paywall
|
||
Et un message de transparence s'affiche:
|
||
"""
|
||
ℹ️ Cet audio-guide est maintenant Premium
|
||
Vous conservez votre accès car vous l'aviez démarré avant le changement.
|
||
"""
|