feat(bdd): réorganiser features en catégories api/ui/e2e et créer ADR-024

Résolution des incohérences #10, #11, et #12 de l'analyse d'architecture.

## Phase 1 : Réorganisation Features BDD (Point #10 - RÉSOLU)

- Créer structure features/{api,ui,e2e}
- Déplacer 83 features en 3 catégories via git mv (historique préservé)
  - features/api/ : 53 features (tests API backend)
  - features/ui/ : 22 features (tests UI mobile)
  - features/e2e/ : 8 features (tests end-to-end)

Domaines déplacés :
- API : authentication, recommendation, rgpd-compliance, content-creation,
  moderation, monetisation, premium, radio-live, publicites
- UI : audio-guides, navigation, interest-gauges, mode-offline,
  partage, profil, recherche
- E2E : abonnements, error-handling

## Phase 2 : Mise à jour Documentation

### ADR-007 - Tests BDD
- Ajouter section "Convention de Catégorisation des Features"
- Documenter règles api/ui/e2e avec exemples concrets
- Spécifier step definitions (backend Go, mobile Dart)

### ADR-024 - Stratégie CI/CD Monorepo (NOUVEAU)
- Créer ADR dédié pour stratégie CI/CD avec path filters
- Architecture workflows séparés (backend.yml, mobile.yml, shared.yml)
- Configuration path filters détaillée avec exemples YAML
- Matrice de déclenchement et optimisations (~70% gain temps CI)
- Plan d'implémentation (~2h, reporté jusqu'au développement)

### ADR-016 - Organisation Monorepo
- Simplifier en retirant section CI/CD détaillée
- Ajouter référence vers ADR-024 pour stratégie CI/CD

### INCONSISTENCIES-ANALYSIS.md
- Point #10 (Tests BDD synchronisés) :  RÉSOLU
  - Catégorisation features implémentée
  - ADR-007 mis à jour avec convention complète
- Point #11 (70/30 Split paiements) :  ANNULÉ (faux problème)
  - ADR-009 et Règle 18 parfaitement cohérents
  - Documentation exhaustive existante (formule, SQL, comparaisons)
- Point #12 (Monorepo path filters) : ⏸️ DOCUMENTÉ
  - Architecture CI/CD complète dans ADR-024
  - Implémentation reportée (projet en phase documentation)
- Métriques mises à jour :
  - MODERATE : 6/9 traités (4 résolus + 1 annulé + 1 documenté)
  - ADR à jour : 100% (19/19 avec ADR-024)

## Phase 3 : Validation

- Structure features validée (api/ui/e2e, aucun répertoire restant)
- Historique Git préservé (git mv, renommages détectés)
- 83 features total (API: 53, UI: 22, E2E: 8)

Closes: Point #10 (résolu), Point #11 (annulé), Point #12 (documenté)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
jpgiannetti
2026-02-01 11:31:41 +01:00
parent 841028d1b2
commit 37c62206ad
88 changed files with 625 additions and 67 deletions

View File

@@ -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% |