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:
@@ -0,0 +1,195 @@
|
||||
# language: fr
|
||||
Fonctionnalité: Actions complémentaires - Mode piéton
|
||||
En tant qu'auditeur en mode piéton
|
||||
Je veux accéder à des actions avancées depuis l'application mobile
|
||||
Afin de liker explicitement, m'abonner ou signaler du contenu
|
||||
|
||||
Contexte:
|
||||
Étant donné que l'API RoadWave est disponible
|
||||
Et qu'un utilisateur est connecté
|
||||
Et qu'il est en mode piéton (vitesse < 5 km/h)
|
||||
|
||||
Scénario: Like explicite avec bouton cœur
|
||||
Étant donné que j'écoute un contenu tagué "Automobile"
|
||||
Et que ma jauge "Automobile" est à 60%
|
||||
Quand je clique sur le bouton cœur "Like"
|
||||
Alors ma jauge "Automobile" augmente de 2%
|
||||
Et une animation de cœur rouge s'affiche
|
||||
Et une vibration courte est déclenchée
|
||||
Et ma jauge "Automobile" est maintenant à 62%
|
||||
|
||||
Scénario: Like explicite cumulable avec like automatique
|
||||
Étant donné que j'ai écouté un contenu "Voyage" à 85%
|
||||
Et que j'ai reçu un like automatique renforcé (+2%)
|
||||
Et que ma jauge "Voyage" est à 52%
|
||||
Quand je clique sur le bouton cœur "Like"
|
||||
Alors ma jauge "Voyage" augmente encore de 2%
|
||||
Et ma jauge "Voyage" passe à 54%
|
||||
Et les deux likes sont cumulés
|
||||
|
||||
Scénario: Unlike retire le like manuel uniquement
|
||||
Étant donné que j'ai liké manuellement un contenu "Sport"
|
||||
Et que ma jauge "Sport" est à 57%
|
||||
Quand je clique à nouveau sur le bouton cœur (toggle)
|
||||
Alors le cœur redevient vide (unlike)
|
||||
Et ma jauge "Sport" diminue de 2%
|
||||
Et ma jauge "Sport" revient à 55%
|
||||
|
||||
Scénario: Unlike ne retire pas le like automatique
|
||||
Étant donné que j'ai écouté un contenu "Musique" à 90%
|
||||
Et que j'ai reçu un like automatique renforcé (+2%)
|
||||
Et que ma jauge "Musique" est à 52%
|
||||
Et que je n'ai PAS liké manuellement
|
||||
Quand je consulte l'interface
|
||||
Alors le bouton "Unlike" n'est pas disponible
|
||||
Et le cœur reste grisé (aucun like manuel)
|
||||
Et ma jauge reste à 52%
|
||||
|
||||
Scénario: Abonnement à un créateur
|
||||
Étant donné qu'un créateur publie des contenus tagués "Automobile" et "Technologie"
|
||||
Et que mes jauges sont:
|
||||
| catégorie | niveau |
|
||||
| Automobile | 50% |
|
||||
| Technologie | 45% |
|
||||
Quand je clique sur "S'abonner" sur le profil du créateur
|
||||
Alors ma jauge "Automobile" augmente de 5%
|
||||
Et ma jauge "Technologie" augmente de 5%
|
||||
Et une animation d'étoile dorée s'affiche
|
||||
Et un badge "Abonné ✓" apparaît sur le profil
|
||||
Et mes nouvelles jauges sont:
|
||||
| catégorie | niveau |
|
||||
| Automobile | 55% |
|
||||
| Technologie | 50% |
|
||||
|
||||
Scénario: Désabonnement d'un créateur
|
||||
Étant donné que je suis abonné à un créateur
|
||||
Et que mes jauges "Automobile" et "Technologie" sont à 55% et 50%
|
||||
Quand je clique sur "Se désabonner"
|
||||
Alors ma jauge "Automobile" diminue de 5%
|
||||
Et ma jauge "Technologie" diminue de 5%
|
||||
Et le badge "Abonné ✓" disparaît
|
||||
Et mes nouvelles jauges sont:
|
||||
| catégorie | niveau |
|
||||
| Automobile | 50% |
|
||||
| Technologie | 45% |
|
||||
|
||||
Scénario: Signalement d'un contenu inapproprié
|
||||
Étant donné que j'écoute un contenu
|
||||
Quand je clique sur le menu contextuel "⋮"
|
||||
Et que je sélectionne "Signaler"
|
||||
Alors un formulaire de signalement s'ouvre
|
||||
Et je dois sélectionner une catégorie:
|
||||
| Catégorie |
|
||||
| Haine et violence |
|
||||
| Contenu sexuel |
|
||||
| Illégalité |
|
||||
| Droits d'auteur |
|
||||
| Spam |
|
||||
| Désinformation (fake news) |
|
||||
| Autre |
|
||||
Et je peux ajouter un commentaire optionnel
|
||||
Et le signalement est envoyé au flux de modération
|
||||
|
||||
Scénario: Feedback visuel pour like explicite
|
||||
Étant donné que je clique sur le bouton cœur
|
||||
Quand le like est enregistré
|
||||
Alors une animation de cœur rouge se lance (0.5s)
|
||||
Et le cœur reste rouge plein
|
||||
Et une vibration haptique courte est déclenchée (iOS: .light, Android: 50ms)
|
||||
Et un badge "♥ Ajouté à vos favoris" s'affiche 2 secondes
|
||||
|
||||
Scénario: Feedback visuel pour abonnement
|
||||
Étant donné que je clique sur "S'abonner"
|
||||
Quand l'abonnement est enregistré
|
||||
Alors une animation d'étoile dorée se lance (0.8s)
|
||||
Et le bouton devient "Abonné ✓" avec badge doré
|
||||
Et une notification "Abonné à [Créateur]" s'affiche
|
||||
Et les contenus du créateur seront boostés +30% dans l'algo
|
||||
|
||||
Scénario: Menu contextuel avec toutes les options
|
||||
Étant donné que j'utilise l'app en mode piéton
|
||||
Quand je clique sur le menu "⋮" (3 points verticaux)
|
||||
Alors les options disponibles sont:
|
||||
| Option |
|
||||
| Like (cœur) |
|
||||
| S'abonner au créateur |
|
||||
| Signaler |
|
||||
| Partager |
|
||||
| Voir le profil du créateur |
|
||||
| Télécharger (mode offline) |
|
||||
Et toutes les options sont cliquables
|
||||
|
||||
Scénario: Persistance des likes manuels en base de données
|
||||
Étant donné que je like manuellement 5 contenus
|
||||
Quand je ferme l'application
|
||||
Et que je me reconnecte plus tard
|
||||
Alors tous mes likes manuels sont toujours présents
|
||||
Et les cœurs rouges sont affichés sur les contenus likés
|
||||
Et mes jauges reflètent toujours l'impact (+2% × 5 likes)
|
||||
|
||||
Scénario: Liste "Mes contenus likés" accessible dans profil
|
||||
Étant donné que j'ai liké manuellement 10 contenus
|
||||
Quand j'accède à mon profil utilisateur
|
||||
Alors je vois une section "❤️ Mes favoris"
|
||||
Et la liste affiche les 10 contenus likés
|
||||
Et je peux cliquer pour réécouter
|
||||
Et je peux retirer un like (unlike) depuis cette liste
|
||||
|
||||
Scénario: Liste "Mes abonnements" accessible dans profil
|
||||
Étant donné que je suis abonné à 5 créateurs
|
||||
Quand j'accède à mon profil utilisateur
|
||||
Alors je vois une section "⭐ Mes abonnements"
|
||||
Et la liste affiche les 5 créateurs avec leurs avatars
|
||||
Et je peux accéder au profil de chaque créateur
|
||||
Et je peux me désabonner depuis cette liste
|
||||
|
||||
Scénario: Impact abonnement sur tous les tags du créateur
|
||||
Étant donné qu'un créateur a publié des contenus avec ces tags:
|
||||
| Contenu | Tags |
|
||||
| C1 | Automobile, Voyage |
|
||||
| C2 | Automobile, Technologie |
|
||||
| C3 | Voyage, Famille |
|
||||
Et que mes jauges sont toutes à 50%
|
||||
Quand je m'abonne à ce créateur
|
||||
Alors les jauges impactées sont:
|
||||
| Tag | Impact |
|
||||
| Automobile | +5% |
|
||||
| Voyage | +5% |
|
||||
| Technologie | +5% |
|
||||
| Famille | +5% |
|
||||
Et toutes les autres jauges restent à 50%
|
||||
|
||||
Scénario: Limite d'abonnements (200 maximum)
|
||||
Étant donné que je suis abonné à 200 créateurs
|
||||
Quand j'essaie de m'abonner à un 201ème créateur
|
||||
Alors un message "Limite de 200 abonnements atteinte" s'affiche
|
||||
Et je dois me désabonner d'un créateur existant pour en ajouter un nouveau
|
||||
|
||||
Scénario: Confirmation avant désabonnement
|
||||
Étant donné que je suis abonné à un créateur
|
||||
Quand je clique sur "Se désabonner"
|
||||
Alors une popup de confirmation s'affiche:
|
||||
"""
|
||||
Se désabonner de @CreateurNom ?
|
||||
|
||||
Vous ne recevrez plus de notifications pour ses contenus.
|
||||
Vos jauges diminueront de 5%.
|
||||
"""
|
||||
Et je dois confirmer pour valider
|
||||
Et je peux annuler pour conserver l'abonnement
|
||||
|
||||
Plan du Scénario: Cumul like automatique + like manuel
|
||||
Étant donné qu'un contenu est tagué "Sport"
|
||||
Et que ma jauge "Sport" est à 50%
|
||||
Quand j'écoute à <pourcentage>% (like auto <auto>)
|
||||
Et que je like manuellement (+2%)
|
||||
Alors l'impact total est <total>
|
||||
Et ma nouvelle jauge est <nouveau_niveau>
|
||||
|
||||
Exemples:
|
||||
| pourcentage | auto | total | nouveau_niveau |
|
||||
| 10 | 0 | +2% | 52% |
|
||||
| 30 | +1% | +3% | 53% |
|
||||
| 50 | +1% | +3% | 53% |
|
||||
| 80 | +2% | +4% | 54% |
|
||||
| 95 | +2% | +4% | 54% |
|
||||
Reference in New Issue
Block a user