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>
189 lines
8.0 KiB
Gherkin
189 lines
8.0 KiB
Gherkin
# language: fr
|
||
Fonctionnalité: Paramétrabilité utilisateur et profils
|
||
En tant qu'utilisateur
|
||
Je veux personnaliser mon expérience de recommandation
|
||
Afin d'adapter l'application à mes différents contextes d'usage
|
||
|
||
Contexte:
|
||
Étant donné que l'API RoadWave est disponible
|
||
Et que je suis connecté
|
||
|
||
Scénario: Accès aux paramètres de personnalisation
|
||
Quand j'ouvre les paramètres de personnalisation
|
||
Alors je vois trois curseurs disponibles:
|
||
| curseur | description |
|
||
| Géolocalisation | Local ← slider → National |
|
||
| Découverte | 0% ← slider → 50% |
|
||
| Politique | Masquer / Équilibré / Mes préférences |
|
||
|
||
Scénario: Modifier le curseur Géolocalisation vers Local
|
||
Étant donné que le curseur Géolocalisation est au centre (défaut)
|
||
Quand je déplace le curseur vers "Local" (gauche)
|
||
Alors l'algorithme privilégie fortement les contenus proches
|
||
Et la pondération géographique augmente
|
||
Et je vois le message "Recommandations locales privilégiées"
|
||
|
||
Scénario: Modifier le curseur Géolocalisation vers National
|
||
Étant donné que le curseur Géolocalisation est au centre
|
||
Quand je déplace le curseur vers "National" (droite)
|
||
Alors l'algorithme privilégie la découverte nationale
|
||
Et la pondération géographique diminue
|
||
Et je reçois des contenus de toute la France
|
||
|
||
Scénario: Curseur Découverte à 0% - aucun aléatoire
|
||
Quand je règle le curseur Découverte à 0%
|
||
Alors 0% de contenus aléatoires dans mes recommandations
|
||
Et 100% de contenus calculés selon score combiné
|
||
Et je vois le message "Personnalisation maximale"
|
||
|
||
Scénario: Curseur Découverte à 10% - défaut équilibré
|
||
Quand je règle le curseur Découverte à 10%
|
||
Alors 10% de contenus aléatoires
|
||
Et 90% de contenus calculés
|
||
Et je vois le message "Équilibre découverte/personnalisation"
|
||
|
||
Scénario: Curseur Découverte à 30% - découverte élevée
|
||
Quand je règle le curseur Découverte à 30%
|
||
Alors 30% de contenus aléatoires
|
||
Et 70% de contenus calculés
|
||
Et je vois le message "Découverte élevée activée"
|
||
|
||
Scénario: Curseur Découverte à 50% - découverte maximale
|
||
Quand je règle le curseur Découverte à 50%
|
||
Alors 50% de contenus aléatoires
|
||
Et 50% de contenus calculés
|
||
Et je vois le message "Découverte maximale (équivaut à national)"
|
||
|
||
Scénario: Créer un profil personnalisé "Trajet quotidien"
|
||
Quand je crée un nouveau profil nommé "🚗 Trajet quotidien"
|
||
Et que je configure:
|
||
| parametre | valeur |
|
||
| Géolocalisation | Local |
|
||
| Découverte | 5% |
|
||
| Politique | Masquer |
|
||
Et que je sauvegarde
|
||
Alors le profil "🚗 Trajet quotidien" est créé
|
||
Et je peux l'activer en un clic
|
||
|
||
Scénario: Créer un profil "Road trip"
|
||
Quand je crée un profil "🛣️ Road trip"
|
||
Et que je configure:
|
||
| parametre | valeur |
|
||
| Géolocalisation | Régional |
|
||
| Découverte | 30% |
|
||
| Politique | Équilibré |
|
||
Alors le profil est sauvegardé
|
||
Et je peux switcher entre profils facilement
|
||
|
||
Scénario: Créer un profil "Enfants"
|
||
Quand je crée un profil "👶 Enfants"
|
||
Et que j'active le Mode Kids
|
||
Alors tous les paramètres sont adaptés pour enfants:
|
||
| parametre | valeur |
|
||
| Mode Kids | Activé |
|
||
| Politique | Masquer (forcé) |
|
||
| Publicité | Aucune |
|
||
|
||
Scénario: Activer un profil existant
|
||
Étant donné que j'ai créé un profil "🚗 Trajet quotidien"
|
||
Quand je clique sur "Activer" pour ce profil
|
||
Alors tous les paramètres du profil sont appliqués
|
||
Et je vois le message "Profil 'Trajet quotidien' activé"
|
||
Et l'algorithme utilise ces paramètres immédiatement
|
||
|
||
Scénario: Synchronisation profils entre devices
|
||
Étant donné que j'ai créé 3 profils sur mon iPhone
|
||
Quand je me connecte sur mon iPad
|
||
Alors mes 3 profils sont automatiquement synchronisés
|
||
Et je peux les utiliser sur l'iPad
|
||
|
||
Scénario: Modification d'un profil synchronisée
|
||
Étant donné que j'ai un profil "Road trip" sur iPhone
|
||
Quand je modifie ce profil sur iPhone
|
||
Alors la modification est synchronisée sur tous mes devices
|
||
Et le profil est mis à jour partout en temps réel
|
||
|
||
Scénario: Pas de partage de profils entre utilisateurs
|
||
Étant donné que j'ai créé des profils personnalisés
|
||
Et que ma conjointe a un compte RoadWave
|
||
Quand elle se connecte sur son compte
|
||
Alors elle ne voit pas mes profils
|
||
Et chaque utilisateur a ses propres profils
|
||
|
||
Scénario: Auto-switch selon contexte (détection trajet récurrent)
|
||
Étant donné que j'utilise toujours le profil "Trajet quotidien"
|
||
Et que je pars de chez moi vers mon travail tous les matins à 8h
|
||
Quand le système détecte ce trajet récurrent
|
||
Alors le profil "Trajet quotidien" est activé automatiquement
|
||
Et je reçois une notification "Profil 'Trajet quotidien' activé"
|
||
|
||
Scénario: Désactiver l'auto-switch
|
||
Étant donné que l'auto-switch de profil est actif
|
||
Quand je désactive cette option dans les paramètres
|
||
Alors les profils ne changent plus automatiquement
|
||
Et je dois les activer manuellement
|
||
|
||
Scénario: Blocage modification si vitesse GPS >10 km/h
|
||
Étant donné que je conduis à 50 km/h
|
||
Quand j'essaie de modifier un curseur
|
||
Alors la modification est bloquée
|
||
Et je vois le message "Modification impossible pendant la conduite"
|
||
Et je dois m'arrêter ou être passager pour modifier
|
||
|
||
Scénario: Modification possible si vitesse <10 km/h
|
||
Étant donné que je suis arrêté à un feu rouge (5 km/h)
|
||
Quand j'essaie de modifier un curseur
|
||
Alors la modification est autorisée
|
||
Et je peux ajuster les paramètres
|
||
|
||
Scénario: Warning au lancement app
|
||
Quand je lance l'application pour la première fois
|
||
Alors je vois un warning "Configurez vos préférences avant de prendre la route"
|
||
Et un bouton "Configurer maintenant"
|
||
Et je peux accéder rapidement aux paramètres
|
||
|
||
Scénario: Modification uniquement app arrêtée ou mode passager
|
||
Étant donné que je suis passager dans une voiture
|
||
Et que le mode passager est activé
|
||
Quand j'essaie de modifier les paramètres
|
||
Alors la modification est autorisée
|
||
Et le blocage vitesse GPS ne s'applique pas
|
||
|
||
Scénario: Statistiques d'utilisation des profils
|
||
Étant donné que j'utilise plusieurs profils
|
||
Quand je consulte mes statistiques
|
||
Alors je vois:
|
||
| metrique | exemple |
|
||
| Profil le plus utilisé | Trajet quotidien |
|
||
| Heures par profil | 25h / 10h / 5h |
|
||
| Dernier profil actif | Road trip |
|
||
|
||
Scénario: Supprimer un profil
|
||
Étant donné que j'ai créé un profil "Test"
|
||
Quand je supprime ce profil
|
||
Alors le profil est définitivement supprimé
|
||
Et je vois le message "Profil 'Test' supprimé"
|
||
Et il disparaît de tous mes devices
|
||
|
||
Scénario: Limite de profils par utilisateur
|
||
Étant donné que j'ai créé 10 profils
|
||
Quand j'essaie de créer un 11ème profil
|
||
Alors la création échoue
|
||
Et je vois le message "Maximum 10 profils par utilisateur"
|
||
|
||
Scénario: Dupliquer un profil existant
|
||
Étant donné que j'ai un profil "Trajet quotidien"
|
||
Quand je clique sur "Dupliquer"
|
||
Alors un nouveau profil "Trajet quotidien (copie)" est créé
|
||
Et il a les mêmes paramètres que l'original
|
||
Et je peux le modifier indépendamment
|
||
|
||
Scénario: Réinitialiser un profil aux valeurs par défaut
|
||
Étant donné que j'ai modifié un profil
|
||
Quand je clique sur "Réinitialiser"
|
||
Alors tous les paramètres reviennent aux valeurs par défaut:
|
||
| parametre | valeur défaut |
|
||
| Géolocalisation | Équilibré |
|
||
| Découverte | 10% |
|
||
| Politique | Équilibré |
|