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>
116 lines
6.0 KiB
Gherkin
116 lines
6.0 KiB
Gherkin
# language: fr
|
|
|
|
@error-handling @no-content
|
|
Fonctionnalité: Élargissement automatique de zone quand aucun contenu n'est disponible
|
|
|
|
Contexte:
|
|
Étant donné que je suis un utilisateur connecté
|
|
Et que la géolocalisation est activée
|
|
Et que je suis en mode écoute
|
|
|
|
# 12.1 - Élargissement progressif
|
|
|
|
Scénario: Aucun contenu dans rayon 50km - élargissement à 100km
|
|
Étant donné que je suis situé à la position GPS 48.8566, 2.3522
|
|
Et qu'aucun contenu n'existe dans un rayon de 50 km autour de ma position
|
|
Mais qu'au moins 1 contenu existe dans un rayon de 100 km
|
|
Quand le système recherche du contenu à me proposer
|
|
Alors le système élargit automatiquement la zone de recherche à 100 km
|
|
Et je reçois un message "Aucun contenu dans votre zone immédiate. Voici du contenu à proximité (100 km)"
|
|
Et un contenu dans le rayon de 100 km m'est proposé
|
|
|
|
Scénario: Aucun contenu dans rayon 100km - élargissement au département
|
|
Étant donné que je suis situé dans le département "75" (Paris)
|
|
Et qu'aucun contenu n'existe dans un rayon de 100 km autour de ma position
|
|
Mais qu'au moins 1 contenu existe avec la zone "département" pour "75"
|
|
Quand le système recherche du contenu à me proposer
|
|
Alors le système élargit automatiquement la zone de recherche au département
|
|
Et je reçois un message "Aucun contenu local disponible. Voici du contenu dans votre département"
|
|
Et un contenu départemental m'est proposé
|
|
|
|
Scénario: Aucun contenu départemental - élargissement à la région
|
|
Étant donné que je suis situé dans la région "Île-de-France"
|
|
Et qu'aucun contenu n'existe dans un rayon de 100 km autour de ma position
|
|
Et qu'aucun contenu départemental n'existe pour mon département
|
|
Mais qu'au moins 1 contenu existe avec la zone "région" pour "Île-de-France"
|
|
Quand le système recherche du contenu à me proposer
|
|
Alors le système élargit automatiquement la zone de recherche à la région
|
|
Et je reçois un message "Aucun contenu local disponible. Voici du contenu dans votre région"
|
|
Et un contenu régional m'est proposé
|
|
|
|
Scénario: Aucun contenu régional - basculement sur contenu national
|
|
Étant donné que je suis situé en France
|
|
Et qu'aucun contenu n'existe dans un rayon de 100 km autour de ma position
|
|
Et qu'aucun contenu départemental n'existe pour mon département
|
|
Et qu'aucun contenu régional n'existe pour ma région
|
|
Quand le système recherche du contenu à me proposer
|
|
Alors le système bascule automatiquement sur du contenu national
|
|
Et je reçois un message "Aucun contenu local disponible. Voici du contenu national qui pourrait vous intéresser"
|
|
Et un contenu national m'est proposé
|
|
Et je ne reste jamais sans contenu disponible
|
|
|
|
Scénario: Élargissement progressif avec plusieurs étapes
|
|
Étant donné que je suis situé dans une zone rurale isolée
|
|
Et qu'aucun contenu n'existe dans un rayon de 50 km
|
|
Et qu'aucun contenu n'existe dans un rayon de 100 km
|
|
Et qu'aucun contenu départemental n'existe
|
|
Et qu'aucun contenu régional n'existe
|
|
Quand le système recherche du contenu à me proposer
|
|
Alors le système essaie d'abord 50 km
|
|
Puis essaie 100 km
|
|
Puis essaie le département
|
|
Puis essaie la région
|
|
Puis bascule sur le contenu national
|
|
Et tout ce processus se fait de manière transparente et automatique
|
|
Et je reçois le message correspondant au dernier niveau trouvé
|
|
|
|
# Messages adaptatifs selon le niveau d'élargissement
|
|
|
|
Scénario: Message personnalisé selon la distance trouvée
|
|
Étant donné que je suis situé à la position GPS 43.6047, 1.4442
|
|
Et que <niveau_geo> contenu(s) est/sont trouvé(s)
|
|
Quand le système me propose du contenu
|
|
Alors je reçois le message "<message_attendu>"
|
|
|
|
Exemples:
|
|
| niveau_geo | message_attendu |
|
|
| 100 km | Aucun contenu dans votre zone immédiate. Voici du contenu à proximité (100 km) |
|
|
| département | Aucun contenu local disponible. Voici du contenu dans votre département |
|
|
| région | Aucun contenu local disponible. Voici du contenu dans votre région |
|
|
| national | Aucun contenu local disponible. Voici du contenu national qui pourrait vous intéresser|
|
|
|
|
# Filet de sécurité - toujours du contenu disponible
|
|
|
|
Scénario: Le contenu national sert de filet de sécurité
|
|
Étant donné que le système a épuisé toutes les zones géographiques locales
|
|
Quand le système bascule sur du contenu national
|
|
Alors je dois toujours avoir au moins 1 contenu disponible
|
|
Et ce contenu peut être:
|
|
| type_contenu |
|
|
| Actualités Le Monde |
|
|
| Podcasts génériques |
|
|
| Contenu éducatif national |
|
|
| Contenu culturel national |
|
|
|
|
# Pas de message d'erreur bloquant
|
|
|
|
Scénario: Pas d'écran d'erreur "Aucun contenu"
|
|
Étant donné que je lance l'application
|
|
Et qu'aucun contenu local n'est disponible dans ma zone
|
|
Quand le système recherche du contenu
|
|
Alors je ne dois jamais voir un message d'erreur "Aucun contenu disponible"
|
|
Et je ne dois jamais voir un écran vide
|
|
Et un contenu doit toujours m'être proposé, même si c'est du contenu national
|
|
|
|
# Comportement avec historique d'écoute
|
|
|
|
Scénario: Élargissement avec prise en compte des centres d'intérêt
|
|
Étant donné que je suis situé dans une zone rurale
|
|
Et qu'aucun contenu n'existe dans un rayon de 50 km
|
|
Et que mes centres d'intérêt incluent "Automobile" à 80% et "Voyage" à 70%
|
|
Et qu'un contenu national existe avec le tag "Automobile"
|
|
Et qu'un contenu national existe avec le tag "Politique"
|
|
Quand le système bascule sur du contenu national
|
|
Alors le contenu national proposé prend en compte mes centres d'intérêt
|
|
Et le contenu "Automobile" a un score supérieur au contenu "Politique"
|