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.
160 lines
7.5 KiB
Gherkin
160 lines
7.5 KiB
Gherkin
# language: fr
|
|
Fonctionnalité: Arrêt du live
|
|
En tant que créateur
|
|
Je veux arrêter ma diffusion en direct de manière contrôlée
|
|
Afin de terminer proprement mon live et générer un replay automatiquement
|
|
|
|
Contexte:
|
|
Étant donné que l'API RoadWave est disponible
|
|
Et que je suis connecté en tant que créateur
|
|
Et que je diffuse actuellement un live
|
|
|
|
Scénario: Arrêt manuel avec compte à rebours 5 secondes
|
|
Quand j'appuie sur le bouton "Arrêter live"
|
|
Alors un compte à rebours de 5 secondes démarre
|
|
Et je vois le message "Ce live se termine dans 5... 4... 3... 2... 1"
|
|
Et un bouton "Annuler" est affiché pendant le décompte
|
|
Et l'audio du compte à rebours est diffusé aux auditeurs
|
|
|
|
Scénario: Annulation du compte à rebours
|
|
Étant donné que j'ai appuyé sur "Arrêter live"
|
|
Et que le compte à rebours affiche "3 secondes"
|
|
Quand j'appuie sur "Annuler"
|
|
Alors le compte à rebours s'arrête
|
|
Et le live continue normalement
|
|
Et aucune notification n'est envoyée aux auditeurs
|
|
|
|
Scénario: Arrêt effectif après compte à rebours
|
|
Étant donné que le compte à rebours est à 0
|
|
Alors le live s'arrête
|
|
Et la diffusion aux auditeurs se termine
|
|
Et le message "Live terminé" s'affiche
|
|
Et le processus de traitement post-live démarre automatiquement
|
|
|
|
Scénario: Déconnexion créateur courte (moins de 60 secondes)
|
|
Étant donné que je diffuse un live
|
|
Quand ma connexion est perdue pendant 30 secondes
|
|
Alors les auditeurs voient le message "Connexion créateur perdue, reconnexion en cours..."
|
|
Et le live continue de bufferer
|
|
Et quand ma connexion revient, le live reprend normalement
|
|
|
|
Scénario: Déconnexion créateur longue (60 secondes ou plus)
|
|
Étant donné que je diffuse un live
|
|
Quand ma connexion est perdue pendant 60 secondes
|
|
Alors le live s'arrête automatiquement
|
|
Et les auditeurs voient le message "Le live est terminé suite à une coupure de connexion"
|
|
Et le processus de traitement post-live démarre
|
|
|
|
Scénario: Enregistrement automatique pendant le live
|
|
Étant donné que je diffuse un live
|
|
Alors mon flux audio est enregistré en continu
|
|
Et le format d'enregistrement est Opus raw
|
|
Et l'enregistrement est stocké temporairement sur le serveur
|
|
|
|
Scénario: Génération automatique du replay après arrêt
|
|
Étant donné que mon live vient de se terminer
|
|
Et que l'option "Publier replay automatiquement" est activée (par défaut)
|
|
Quand le traitement post-live démarre
|
|
Alors un job asynchrone est créé
|
|
Et le job effectue les opérations suivantes:
|
|
| opération | détail |
|
|
| Conversion format | Opus raw → MP3 256 kbps |
|
|
| Génération segments HLS | Segments .ts pour streaming |
|
|
| Normalisation volume | -14 LUFS |
|
|
| Détection silences prolongés | Nettoyage automatique |
|
|
|
|
Scénario: Publication du replay
|
|
Étant donné que le traitement post-live est terminé
|
|
Alors le replay est publié automatiquement sous 5 à 10 minutes
|
|
Et le titre est "[REPLAY] [Titre live original]"
|
|
Et la zone de diffusion est la même que le live
|
|
Et les tags sont identiques au live
|
|
Et la classification d'âge est identique
|
|
Et le type géographique est "Géo-neutre" (contenu pérenne)
|
|
|
|
Scénario: Notification de disponibilité du replay aux auditeurs
|
|
Étant donné que le replay de mon live est publié
|
|
Quand un auditeur qui a écouté le live se reconnecte
|
|
Alors il voit une notification in-app "Le replay de [Titre] est disponible"
|
|
|
|
Scénario: Option désactivation publication automatique replay
|
|
Étant donné que je configure un nouveau live
|
|
Quand je désactive l'option "Publier replay automatiquement"
|
|
Et que je démarre puis arrête le live
|
|
Alors le live est enregistré
|
|
Mais le replay n'est pas publié automatiquement
|
|
Et je peux décider manuellement de le publier plus tard
|
|
|
|
Scénario: Suppression manuelle du replay après publication
|
|
Étant donné que mon live a généré un replay publié
|
|
Quand j'accède à mes contenus
|
|
Alors je vois le replay dans ma liste
|
|
Et je peux le supprimer comme n'importe quel contenu
|
|
Quand je supprime le replay
|
|
Alors le fichier source Opus raw est supprimé immédiatement
|
|
|
|
Scénario: Conservation fichier source Opus raw
|
|
Étant donné que mon live est terminé
|
|
Et que le replay est publié
|
|
Alors le fichier Opus raw est conservé pendant 7 jours
|
|
Et après 7 jours, le fichier raw est supprimé automatiquement
|
|
Et seul le MP3 256 kbps est conservé
|
|
|
|
Scénario: Modification du replay interdite
|
|
Étant donné que mon live a généré un replay publié
|
|
Quand j'essaie de modifier l'audio du replay
|
|
Alors l'action est refusée
|
|
Et je vois le message "Les replays ne peuvent pas être modifiés pour garantir l'intégrité de l'enregistrement"
|
|
Et je peux uniquement modifier les métadonnées (titre, description)
|
|
|
|
Scénario: Statistiques du live disponibles après arrêt
|
|
Étant donné que mon live est terminé
|
|
Quand j'accède aux statistiques
|
|
Alors je vois:
|
|
| métrique | exemple valeur |
|
|
| Durée totale | 1h 23min |
|
|
| Nombre d'auditeurs max | 247 |
|
|
| Nombre d'auditeurs moyen | 183 |
|
|
| Nombre de likes | 89 |
|
|
| Nombre d'abonnements | 12 |
|
|
| Signalements reçus | 0 |
|
|
|
|
Scénario: Live terminé avec signalements en cours
|
|
Étant donné que mon live a reçu 3 signalements pendant la diffusion
|
|
Quand le live se termine
|
|
Alors le replay n'est pas publié automatiquement
|
|
Et le contenu est en attente de modération
|
|
Et je vois le message "Votre replay sera publié après vérification suite aux signalements reçus"
|
|
Et un modérateur doit valider ou refuser le replay sous 24h
|
|
|
|
Scénario: Arrêt forcé par un modérateur
|
|
Étant donné que je diffuse un live
|
|
Et qu'un modérateur détecte du contenu interdit
|
|
Quand le modérateur clique sur "Arrêter le live immédiatement"
|
|
Alors le live s'arrête sans compte à rebours
|
|
Et je vois le message "Votre live a été interrompu par la modération"
|
|
Et je reçois une notification détaillant la raison
|
|
Et le replay n'est pas publié
|
|
Et le fichier source est conservé 30 jours pour appel
|
|
|
|
Scénario: Métriques de bande passante pendant le live
|
|
Étant donné que je diffuse un live
|
|
Et que 100 auditeurs écoutent simultanément
|
|
Alors la bande passante consommée est d'environ 4.8 Mbps via NGINX Cache
|
|
Et le coût estimé infrastructure est d'environ 0.02€ par heure de diffusion
|
|
Et je peux voir ces métriques en temps réel dans l'interface créateur
|
|
|
|
Scénario: Live sans auditeurs pendant 5 minutes
|
|
Étant donné que je diffuse un live
|
|
Et qu'aucun auditeur n'écoute depuis 5 minutes
|
|
Alors je vois un message d'information "Aucun auditeur actuellement connecté"
|
|
Mais le live continue normalement
|
|
Et je peux choisir de continuer ou d'arrêter
|
|
|
|
Scénario: Qualité audio du replay supérieure au live
|
|
Étant donné que mon live était diffusé en Opus 48 kbps
|
|
Quand le replay est généré
|
|
Alors le replay est encodé en MP3 256 kbps
|
|
Et la qualité audio du replay est supérieure au live
|
|
Et la taille du fichier est optimisée pour le stockage long terme
|