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,224 @@
|
||||
# language: fr
|
||||
|
||||
@rgpd @geoip @degraded-mode
|
||||
Fonctionnalité: Mode dégradé avec GeoIP (sans GPS précis)
|
||||
|
||||
# 13.5 - GeoIP par défaut, GPS optionnel (progressive disclosure)
|
||||
|
||||
Contexte:
|
||||
Étant donné que je suis un nouvel utilisateur
|
||||
Et que je lance l'application pour la première fois
|
||||
|
||||
# Niveaux de précision
|
||||
|
||||
Plan du Scénario: Trois niveaux de géolocalisation disponibles
|
||||
Étant donné que j'utilise le niveau de géolocalisation "<niveau>"
|
||||
Quand le système détermine ma position
|
||||
Alors la technologie utilisée est "<technologie>"
|
||||
Et les contenus accessibles sont "<contenus>"
|
||||
Et le consentement RGPD est "<consentement>"
|
||||
|
||||
Exemples:
|
||||
| niveau | technologie | contenus | consentement |
|
||||
| Pays | Aucune géoloc | Contenus nationaux uniquement | Non requis |
|
||||
| Ville | GeoIP (IP2Location) | Contenus régionaux/ville | Non requis |
|
||||
| Précis | GPS | Tous contenus (hyperlocaux inclus) | Requis |
|
||||
|
||||
# Démarrage avec GeoIP automatique
|
||||
|
||||
Scénario: GeoIP activé par défaut au premier lancement
|
||||
Étant donné que je lance l'application pour la première fois
|
||||
Et que je n'ai pas encore accepté le GPS précis
|
||||
Quand l'application démarre
|
||||
Alors le système utilise automatiquement GeoIP basé sur mon adresse IP
|
||||
Et ma position est détectée au niveau ville: "Paris, France"
|
||||
Et aucun consentement n'est requis (GeoIP ne collecte pas de données personnelles)
|
||||
Et je peux accéder aux contenus régionaux et de ville
|
||||
|
||||
Scénario: Détection de ville avec IP2Location Lite
|
||||
Étant donné que mon adresse IP est 93.184.216.34
|
||||
Quand le système utilise GeoIP IP2Location Lite
|
||||
Alors ma ville est détectée: "Paris"
|
||||
Et ma région est détectée: "Île-de-France"
|
||||
Et mon pays est détecté: "France"
|
||||
Et la précision est d'environ 80% au niveau ville
|
||||
Et aucune coordonnée GPS précise n'est révélée
|
||||
|
||||
# Banner in-app pour upgrade vers GPS
|
||||
|
||||
Scénario: Banner d'invitation à activer le GPS
|
||||
Étant donné que j'utilise l'application en mode GeoIP
|
||||
Quand je suis sur l'écran principal
|
||||
Alors un banner discret s'affiche en haut:
|
||||
"""
|
||||
Activez la géolocalisation pour découvrir du contenu près de chez vous
|
||||
[Activer]
|
||||
"""
|
||||
Et le banner n'est pas intrusif (pas de popup modale)
|
||||
Et je peux le fermer temporairement avec un bouton X
|
||||
Et le banner réapparaît tous les 7 jours si je ne l'active pas
|
||||
|
||||
Scénario: Upgrade volontaire vers GPS depuis le banner
|
||||
Étant donné que le banner d'invitation au GPS est affiché
|
||||
Quand je clique sur "Activer"
|
||||
Alors un écran de consentement GPS s'affiche
|
||||
Et l'écran explique les avantages:
|
||||
"""
|
||||
En activant la géolocalisation précise, vous pouvez:
|
||||
- Découvrir du contenu hyperlocal près de vous
|
||||
- Accéder aux audio-guides géolocalisés
|
||||
- Recevoir des notifications quand vous passez près de points d'intérêt
|
||||
"""
|
||||
Et je peux accepter ou refuser
|
||||
Et si j'accepte, la permission OS est demandée
|
||||
|
||||
# Contenus accessibles selon le niveau
|
||||
|
||||
Scénario: Contenus disponibles en mode Pays (aucune géoloc)
|
||||
Étant donné que je n'autorise aucune géolocalisation
|
||||
Quand le système recherche du contenu à me proposer
|
||||
Alors seuls les contenus "National" sont disponibles
|
||||
Et les contenus géolocalisés (Ancré, Contextuel) ne sont pas proposés
|
||||
Et je vois un message: "Activez la géolocalisation pour plus de contenu local"
|
||||
|
||||
Scénario: Contenus disponibles en mode Ville (GeoIP)
|
||||
Étant donné que j'utilise le mode GeoIP et que je suis détecté à Paris
|
||||
Quand le système recherche du contenu à me proposer
|
||||
Alors les contenus suivants sont disponibles:
|
||||
| type_contenu | disponible |
|
||||
| National | oui |
|
||||
| Région Île-de-France | oui |
|
||||
| Ville Paris | oui |
|
||||
| Hyperlocal (GPS) | non |
|
||||
| Audio-guides | non |
|
||||
Et je reçois des recommandations pertinentes pour Paris
|
||||
|
||||
Scénario: Tous contenus disponibles en mode Précis (GPS)
|
||||
Étant donné que j'ai activé la géolocalisation précise
|
||||
Quand le système recherche du contenu à me proposer
|
||||
Alors tous les types de contenus sont disponibles:
|
||||
| type_contenu | disponible |
|
||||
| National | oui |
|
||||
| Régional | oui |
|
||||
| Ville | oui |
|
||||
| Hyperlocal (Ancré) | oui |
|
||||
| Contextuel | oui |
|
||||
| Audio-guides | oui |
|
||||
|
||||
# Pas de consentement requis pour GeoIP
|
||||
|
||||
Scénario: GeoIP ne nécessite pas de consentement RGPD
|
||||
Étant donné que j'utilise le mode GeoIP
|
||||
Quand un auditeur CNIL vérifie la conformité
|
||||
Alors GeoIP n'est pas considéré comme une donnée personnelle
|
||||
Et l'adresse IP n'est pas conservée après détection de la ville
|
||||
Et seule la ville est stockée (non identifiant)
|
||||
Et aucun consentement n'est requis conformément au RGPD
|
||||
|
||||
# Implémentation IP2Location Lite
|
||||
|
||||
Scénario: Base de données IP2Location self-hosted
|
||||
Étant donné que RoadWave utilise IP2Location Lite
|
||||
Quand on analyse l'infrastructure
|
||||
Alors la base de données IP2Location est hébergée sur les serveurs RoadWave
|
||||
Et aucune requête n'est envoyée à un service tiers
|
||||
Et la base de données est mise à jour automatiquement chaque mois
|
||||
Et le coût est de 0€ (IP2Location Lite est gratuit)
|
||||
|
||||
Scénario: Mise à jour mensuelle de la base GeoIP
|
||||
Étant donné que IP2Location publie des mises à jour mensuelles
|
||||
Quand le 1er du mois arrive
|
||||
Alors un job automatique télécharge la nouvelle base IP2Location Lite
|
||||
Et la base est mise à jour sans interruption de service
|
||||
Et un log est créé pour traçabilité
|
||||
Et si la mise à jour échoue, une alerte est envoyée
|
||||
|
||||
# Progressive disclosure - UX dégradée acceptable
|
||||
|
||||
Scénario: UX acceptable en mode GeoIP
|
||||
Étant donné que j'utilise le mode GeoIP à Paris
|
||||
Quand je parcours l'application
|
||||
Alors je peux écouter du contenu pertinent pour Paris et l'Île-de-France
|
||||
Et l'expérience est satisfaisante même sans GPS précis
|
||||
Et je ne suis pas bloqué dans l'utilisation de l'application
|
||||
Et je peux choisir d'activer le GPS quand je le souhaite
|
||||
|
||||
Scénario: Incitation progressive à activer le GPS
|
||||
Étant donné que j'utilise le mode GeoIP depuis 2 semaines
|
||||
Et que je n'ai pas activé le GPS
|
||||
Quand je consulte un audio-guide dans les résultats de recherche
|
||||
Alors un message s'affiche:
|
||||
"""
|
||||
Cet audio-guide nécessite la géolocalisation précise pour fonctionner.
|
||||
[Activer le GPS] [Plus tard]
|
||||
"""
|
||||
Et si je clique "Plus tard", je peux continuer à utiliser l'app normalement
|
||||
Et l'incitation reste douce et non intrusive
|
||||
|
||||
# Passage d'un mode à l'autre
|
||||
|
||||
Scénario: Upgrade GeoIP vers GPS
|
||||
Étant donné que j'utilise le mode GeoIP
|
||||
Quand j'active la géolocalisation précise
|
||||
Alors le système bascule immédiatement en mode GPS
|
||||
Et les contenus hyperlocaux deviennent disponibles
|
||||
Et mon feed se rafraîchit avec du contenu plus précis
|
||||
Et un toast de confirmation s'affiche: "Géolocalisation activée"
|
||||
|
||||
Scénario: Downgrade GPS vers GeoIP
|
||||
Étant donné que j'utilise le mode GPS précis
|
||||
Quand je désactive la géolocalisation dans les paramètres OS
|
||||
Alors le système bascule automatiquement en mode GeoIP
|
||||
Et les contenus hyperlocaux ne sont plus proposés
|
||||
Et un banner s'affiche: "Géolocalisation désactivée. Seul le contenu régional est disponible."
|
||||
Et l'application continue de fonctionner normalement
|
||||
|
||||
# Détection automatique du mode
|
||||
|
||||
Scénario: Détection automatique au démarrage de l'app
|
||||
Étant donné que j'ouvre l'application
|
||||
Quand l'app vérifie les permissions de géolocalisation
|
||||
Alors le système détecte automatiquement le mode disponible:
|
||||
| permission GPS | consentement app | mode activé |
|
||||
| Refusée | Non demandé | Pays |
|
||||
| Refusée | Accepté | GeoIP |
|
||||
| Accordée | Accepté | GPS précis |
|
||||
Et le mode est appliqué sans interaction utilisateur
|
||||
|
||||
# Précision GeoIP ~80%
|
||||
|
||||
Scénario: Précision acceptable pour la plupart des cas
|
||||
Étant donné que j'habite à Lyon
|
||||
Et que mon IP est une IP résidentielle standard
|
||||
Quand le système utilise GeoIP pour me localiser
|
||||
Alors la ville détectée est "Lyon" (correct à 80%)
|
||||
Et dans 20% des cas, la ville peut être légèrement erronée (banlieue proche)
|
||||
Et cette précision est suffisante pour proposer du contenu régional pertinent
|
||||
|
||||
Scénario: GeoIP avec VPN ou proxy
|
||||
Étant donné que j'utilise un VPN avec une IP sortante à Paris
|
||||
Mais que je suis physiquement à Lyon
|
||||
Quand le système utilise GeoIP
|
||||
Alors la ville détectée est "Paris" (IP du VPN)
|
||||
Et les contenus proposés sont pour Paris
|
||||
Et je peux activer le GPS précis pour corriger la localisation
|
||||
|
||||
# Conformité RGPD
|
||||
|
||||
Scénario: Pas de donnée personnelle collectée avec GeoIP
|
||||
Étant donné que j'utilise le mode GeoIP
|
||||
Quand le système détermine ma ville via mon IP
|
||||
Alors l'adresse IP n'est pas conservée après détection
|
||||
Et seule la ville "Paris" est stockée en base de données
|
||||
Et la ville seule n'est pas une donnée personnelle (RGPD)
|
||||
Et aucun consentement n'est donc requis
|
||||
|
||||
# Coût de la solution: 0€
|
||||
|
||||
Scénario: Solution GeoIP gratuite et self-hosted
|
||||
Étant donné que RoadWave utilise IP2Location Lite
|
||||
Quand on calcule le coût de la solution
|
||||
Alors le coût est de 0€
|
||||
Et la solution est opensource
|
||||
Et la base de données est hébergée sur les serveurs RoadWave
|
||||
Et aucun coût SaaS tiers
|
||||
Reference in New Issue
Block a user