diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md new file mode 100644 index 0000000..3d74042 --- /dev/null +++ b/docs/CONTRIBUTING.md @@ -0,0 +1,457 @@ +# Guide de Contribution à la Documentation + +Bienvenue ! Ce guide explique comment contribuer à la documentation RoadWave tout en respectant son architecture et ses conventions. + +## Principes Fondamentaux + +### 1. Source Unique de Vérité (Single Source of Truth) + +Chaque information doit exister à **un seul endroit** : + +- **Règles métier** → `docs/domains/[domain]/rules/*.md` +- **Features BDD** → `domains/[domain]/features/**/*.feature` (sources Gherkin) +- **Documentation BDD** → `docs/generated/bdd/` (générée automatiquement) +- **Entités** → `docs/domains/[domain]/entities/*.md` +- **États** → `docs/domains/[domain]/states/*.md` +- **Séquences** → `docs/domains/[domain]/sequences/*.md` + +❌ **Ne jamais** dupliquer une information +✅ **Toujours** référencer via des liens + +### 2. Langue : 100% Français + +Tous les fichiers de documentation doivent être en français : + +- ✅ Noms de fichiers en français (kebab-case) +- ✅ Contenu en français +- ✅ Navigation `mkdocs.yml` en français +- ⚠️ Exception : code backend en anglais (convention internationale) + +### 3. Dossier `generated/` = Read-Only + +Le dossier `docs/generated/` contient **exclusivement** des fichiers générés automatiquement. + +❌ **Ne JAMAIS** créer de fichiers manuels dans `generated/` +❌ **Ne JAMAIS** éditer des fichiers dans `generated/` +✅ Modifier les sources (`.feature`) et regénérer + +## Ajouter une Nouvelle Feature BDD + +### Étape 1 : Créer le fichier `.feature` + +```bash +# Créer dans le bon domaine +touch domains/[domain]/features/[category]/ma-feature.feature +``` + +**Exemple** : Feature de recherche dans le domaine recommendation + +```bash +touch domains/recommendation/features/recherche/recherche-avancee.feature +``` + +### Étape 2 : Écrire la feature en Gherkin + +```gherkin +# language: fr +Fonctionnalité: Recherche avancée de contenus + En tant qu'utilisateur + Je veux rechercher des contenus avec des filtres avancés + Afin de trouver exactement ce que je cherche + + Contexte: + Étant donné que je suis connecté + Et que je suis sur la page de recherche + + Scénario: Recherche par catégorie et distance + Quand je sélectionne la catégorie "Tourisme" + Et je définis un rayon de 10 km + Alors je vois uniquement les contenus de type "Tourisme" + Et tous les résultats sont à moins de 10 km + + Scénario: Recherche avec filtres multiples + # ... autres scénarios +``` + +**Conventions Gherkin** : +- Langue française (`# language: fr`) +- Mots-clés : `Fonctionnalité`, `Scénario`, `Étant donné`, `Quand`, `Alors` +- Commentaires pour référencer les règles DDD + +### Étape 3 : Regénérer la documentation + +```bash +make bdd-docs +``` + +Cette commande : +1. Parse les fichiers `.feature` +2. Génère les `.md` dans `generated/bdd/` +3. Démarre le serveur MkDocs (http://localhost:8000) + +### Étape 4 : Ajouter dans `mkdocs.yml` + +Si la catégorie n'existe pas encore, l'ajouter : + +```yaml +- '🎯 Recommendation': + # ... + - Tests BDD: + - 'Recherche': + - Recherche de contenu: generated/bdd/recommendation/features/recherche/recherche.md + - Recherche avancée: generated/bdd/recommendation/features/recherche/recherche-avancee.md # ← NOUVEAU +``` + +### Étape 5 : Commit + +```bash +git add domains/recommendation/features/recherche/recherche-avancee.feature +git add mkdocs.yml +git commit -m "feat(bdd): ajouter feature recherche avancée + +- Ajout recherche par catégorie et distance +- Ajout filtres multiples +- Couverture domaine recommendation" +``` + +## Ajouter une Règle Métier + +### Étape 1 : Identifier le domaine + +Déterminer dans quel domaine DDD se situe la règle : + +- **Shared** : Authentification, RGPD, erreurs, profil +- **Recommendation** : Algorithme, jauges d'intérêt, recherche +- **Content** : Audio-guides, création, streaming +- **Moderation** : Signalements, validation, sanctions +- **Advertising** : Publicités, ciblage +- **Premium** : Abonnements, mode offline +- **Monetization** : Paiements, revenus créateurs + +### Étape 2 : Créer ou éditer le fichier de règles + +```bash +# Éditer fichier existant +vim domains/[domain]/rules/[theme].md + +# Ou créer un nouveau fichier +touch domains/[domain]/rules/nouveau-theme.md +``` + +### Étape 3 : Documenter la règle + +```markdown +# Règles - Nouveau Thème + +## Contexte + +Description du contexte métier... + +## Règles + +### Règle 1 : Titre de la règle + +**Contexte** : Quand... +**Règle** : L'utilisateur doit/peut/ne peut pas... +**Justification** : Parce que... + +**Exemple** : +- Cas nominal : ... +- Cas d'erreur : ... + +### Règle 2 : Autre règle + +... + +## Liens avec d'autres domaines + +- [Entité X](../entities/entite-x.md) +- [Séquence Y](../sequences/sequence-y.md) +- [ADR-XXX](../../adr/XXX-decision.md) +``` + +### Étape 4 : Créer les features BDD correspondantes + +Les règles métier doivent être testables → créer des features BDD. + +### Étape 5 : Ajouter dans `mkdocs.yml` + +```yaml +- '🎙️ Content': + - Règles: + - Création & Publication: domains/content/rules/creation-publication.md + - Nouveau Thème: domains/content/rules/nouveau-theme.md # ← NOUVEAU +``` + +## Ajouter une Entité + +### Créer le fichier + +```bash +touch domains/[domain]/entities/nouvelle-entite.md +``` + +### Documenter l'entité + +```markdown +# Entité : NouvelleThing + +## Description + +Brève description de l'entité... + +## Attributs + +| Attribut | Type | Description | Contraintes | +|----------|------|-------------|-------------| +| `id` | UUID | Identifiant unique | PK, NOT NULL | +| `name` | String | Nom de la chose | NOT NULL, max 255 | +| `created_at` | Timestamp | Date de création | NOT NULL | + +## Relations + +- **BelongsTo** : [User](../../../_shared/entities/users.md) +- **HasMany** : [Items](./items.md) + +## États du Cycle de Vie + +Voir [Lifecycle](../states/nouvelle-thing-lifecycle.md) + +## Règles Métier + +- [Règle de création](../rules/creation.md#nouvelle-thing) +- [Règle de validation](../rules/validation.md#nouvelle-thing) + +## Implémentation Backend + +**Module** : `backend/internal/[domain]/` +**Table** : `nouvelle_things` +**Repository** : `nouvelle_thing_repository.go` + +Requêtes sqlc : `backend/queries/nouvelle_thing.sql` +``` + +### Ajouter dans `mkdocs.yml` + +```yaml +- Entités: + - Vue d'ensemble: domains/[domain]/entities/vue-ensemble.md + - Nouvelle Entité: domains/[domain]/entities/nouvelle-entite.md # ← NOUVEAU +``` + +## Ajouter un Diagramme + +### Diagrammes de Séquence + +```bash +touch domains/[domain]/sequences/nouveau-processus.md +``` + +```markdown +# Séquence - Nouveau Processus + +## Diagramme + +\`\`\`mermaid +sequenceDiagram + participant U as Utilisateur + participant A as API + participant DB as Database + + U->>A: POST /nouvelle-action + A->>DB: Vérifier permissions + DB-->>A: OK + A->>DB: INSERT nouvelle_thing + A-->>U: 201 Created +\`\`\` + +## Légende + +**Acteurs** : +- Utilisateur : Client de l'API +- API : Backend RoadWave +- Database : PostgreSQL + +**Étapes clés** : +1. Vérification des permissions +2. Insertion en base +3. Retour confirmation + +## Cas d'Erreur + +### Permissions insuffisantes +... + +### Contrainte violée +... +``` + +### Diagrammes d'États + +```bash +touch domains/[domain]/states/nouvelle-thing-lifecycle.md +``` + +```markdown +# États - Lifecycle NouvelleThing + +## Diagramme + +\`\`\`mermaid +stateDiagram-v2 + [*] --> Draft + Draft --> Pending: Submit + Pending --> Approved: Approve + Pending --> Rejected: Reject + Approved --> Published: Publish + Published --> Archived: Archive + Archived --> [*] +\`\`\` + +## États + +| État | Description | Transitions Possibles | +|------|-------------|----------------------| +| Draft | Création en cours | → Pending | +| Pending | En attente validation | → Approved, Rejected | +| Approved | Validé | → Published | +| Rejected | Refusé | → Draft (correction) | +| Published | Publié | → Archived | +| Archived | Archivé | (final) | + +## Règles de Transition + +### Draft → Pending +**Conditions** : Tous les champs obligatoires remplis +**Actions** : Notification modérateurs +``` + +## Conventions de Nommage + +### Fichiers Markdown + +```bash +# Format : kebab-case-francais.md +✅ export-donnees.md +✅ suppression-compte.md +✅ moderation-communautaire.md +✅ vue-ensemble.md + +❌ data-export.md (anglais) +❌ entities-overview.md (anglais) +❌ ExportDonnees.md (PascalCase) +❌ export_donnees.md (snake_case) +``` + +### Fichiers Features + +```bash +# Format : kebab-case-francais.feature +✅ signalement.feature +✅ jauge-initiale.feature +✅ creation-audio-guide.feature + +❌ reporting.feature (anglais) +❌ initial-gauge.feature (anglais) +``` + +### Répertoires + +```bash +# Format : kebab-case-anglais (convention internationale) +✅ features/ +✅ interest-gauges/ +✅ content-creation/ +✅ rgpd-compliance/ +``` + +## Vérifications Avant Commit + +### Checklist + +- [ ] Tous les fichiers sont en français (sauf code backend) +- [ ] Pas de fichiers dans `generated/` (seulement sources modifiées) +- [ ] Les liens internes fonctionnent +- [ ] `mkdocs.yml` mis à jour si nécessaire +- [ ] Features BDD regénérées (`make bdd-docs`) +- [ ] Message de commit descriptif + +### Tester Localement + +```bash +# Vérifier syntaxe YAML +python3 -c "import yaml; yaml.safe_load(open('mkdocs.yml'))" + +# Tester la navigation +make docs-serve +# → http://localhost:8000 +``` + +### Vérifier les Liens + +```bash +# Chercher liens cassés vers anciens noms +grep -r "entities-overview\.md" docs/ +grep -r "user-account-lifecycle\.md" docs/ +grep -r "data-export\.md" docs/ + +# Ne devrait rien retourner +``` + +## Messages de Commit + +### Format + +``` +type(scope): description courte + +Corps optionnel avec détails... + +Refs: #issue-number +``` + +### Types + +- `feat(bdd)` : Nouvelle feature BDD +- `docs(rules)` : Nouvelle règle métier +- `docs(entity)` : Nouvelle entité +- `fix(link)` : Correction de lien +- `refactor(nav)` : Réorganisation navigation + +### Exemples + +```bash +# Feature BDD +git commit -m "feat(bdd): ajouter recherche avancée dans recommendation" + +# Règle métier +git commit -m "docs(rules): documenter règles de modération préventive" + +# Entité +git commit -m "docs(entity): ajouter entité Campaign pour advertising" + +# Fix +git commit -m "fix(link): corriger lien vers vue-ensemble.md" +``` + +## Ressources + +- **Architecture DDD** : [domains/README.md](domains/README.md) +- **Tests BDD** : [ADR-007](adr/007-tests-bdd.md) +- **Migration** : [MIGRATION.md](MIGRATION.md) +- **ADRs** : [adr/README.md](adr/README.md) + +## Support + +Questions ? Consultez : +1. Cette documentation +2. Les ADRs existants +3. Les exemples dans les domaines existants +4. L'équipe RoadWave + +## Auteurs + +- Équipe RoadWave +- Claude Sonnet 4.5 (documentation) + +Dernière mise à jour : 2026-02-08 diff --git a/docs/MIGRATION.md b/docs/MIGRATION.md new file mode 100644 index 0000000..b8f0592 --- /dev/null +++ b/docs/MIGRATION.md @@ -0,0 +1,220 @@ +# Migration Documentation - Réorganisation 2026-02-08 + +Cette documentation liste tous les changements effectués lors de la réorganisation complète de la documentation RoadWave. + +## Objectifs de la Migration + +1. **Éliminer les redondances** : Supprimer les doublons de fichiers et la navigation duale +2. **Normaliser la langue** : 100% français pour la cohérence +3. **Intégrer BDD dans DDD** : Source unique de vérité avec navigation domaine-first +4. **Rendre accessible toutes les features** : 164 features BDD dans la navigation (vs 34 avant) + +## Changements Effectués + +### 1. Fusions de Fichiers Doublons + +**Fichiers supprimés** (versions anglaises) : + +| Fichier Supprimé | Fichier Conservé | Raison | +|-----------------|------------------|---------| +| `sequences/data-export.md` | `sequences/export-donnees.md` | Version française plus détaillée | +| `sequences/account-deletion.md` | `sequences/suppression-compte.md` | Version française plus détaillée | + +### 2. Renommages EN → FR + +**Entités** : + +| Ancien Nom | Nouveau Nom | +|-----------|-------------| +| `entities-overview.md` | `vue-ensemble.md` | + +**États (Lifecycles)** : + +| Ancien Nom | Nouveau Nom | +|-----------|-------------| +| `user-account-lifecycle.md` | `compte-utilisateur.md` | +| `content-lifecycle.md` | `contenu.md` | +| `session-lifecycle.md` | `session.md` | +| `report-lifecycle.md` | `signalement.md` | +| `export-lifecycle.md` | `export-donnees.md` | +| `parental-consent-lifecycle.md` | `consentement-parental.md` | +| `account-deletion-lifecycle.md` | `suppression-compte.md` | +| `breach-incident-lifecycle.md` | `incident-breach.md` | + +**Séquences** : + +| Ancien Nom | Nouveau Nom | +|-----------|-------------| +| `authentication-flow.md` | `authentification.md` | +| `token-refresh.md` | `refresh-token.md` | +| `content-moderation.md` | `moderation-contenu.md` | +| `content-report.md` | `signalement.md` | + +### 3. Réorganisation Navigation + +**Changement majeur** : Suppression de la section "Tests BDD" autonome + +**Avant** : +```yaml +- Domaines DDD: + - Shared: (avec Features BDD) + - Recommendation: (SANS Features BDD) + - Content: (SANS Features BDD) + - ... +- Tests BDD: + - Vue d'ensemble: generated/bdd/index.md +``` + +**Après** : +```yaml +- Domaines DDD: + - Shared: + - Tests BDD: (34 features) + - Recommendation: + - Tests BDD: (17 features) ← NOUVEAU + - Content: + - Tests BDD: (59 features) ← NOUVEAU + - Moderation: + - Tests BDD: (23 features) ← NOUVEAU + - Advertising: + - Tests BDD: (7 features) ← NOUVEAU + - Premium: + - Tests BDD: (16 features) ← NOUVEAU + - Monetization: + - Tests BDD: (8 features) ← NOUVEAU +``` + +**Résultat** : 164/164 features BDD accessibles (100% vs 21% avant) + +### 4. Structure de Navigation par Domaine + +Chaque domaine suit désormais cette structure cohérente : + +``` +Domaine X: + - Vue d'ensemble + - Règles métier + - Entités + - [États] (si applicable) + - [Séquences] (si applicable) + - [Diagrammes] (si applicable) + - Tests BDD ← AJOUTÉ pour tous les domaines +``` + +## Métriques de la Migration + +| Métrique | Avant | Après | Amélioration | +|----------|-------|-------|--------------| +| Fichiers doublons | 4 | 0 | -100% | +| Features BDD accessibles | 34/164 (21%) | 164/164 (100%) | +379% | +| Domaines avec section BDD | 1/7 (14%) | 7/7 (100%) | +600% | +| Chemins vers BDD | 2 | 1 | Source unique | +| Langues mélangées | 2 (FR + EN) | 1 (FR) | Cohérence | + +## Impact sur les Liens + +Tous les liens internes ont été automatiquement mis à jour. Si vous avez des liens externes ou des bookmarks : + +### Entités + +```markdown +# Ancien lien (cassé) +docs/domains/_shared/entities/entities-overview.md + +# Nouveau lien +docs/domains/_shared/entities/vue-ensemble.md +``` + +### États + +```markdown +# Ancien lien (cassé) +docs/domains/_shared/states/user-account-lifecycle.md + +# Nouveau lien +docs/domains/_shared/states/compte-utilisateur.md +``` + +### Séquences + +```markdown +# Ancien lien (cassé) +docs/domains/_shared/sequences/data-export.md + +# Nouveau lien +docs/domains/_shared/sequences/export-donnees.md +``` + +## Navigation vers les Features BDD + +### Avant (34 features accessibles) + +Pour accéder aux features BDD de Shared : +1. Domaines DDD → Shared → Features BDD +2. **OU** Tests BDD → Vue d'ensemble + +Pour les autres domaines : **Impossible** (130 features inaccessibles) + +### Après (164 features accessibles) + +Pour accéder aux features BDD de n'importe quel domaine : +1. Domaines DDD → [Domaine] → Tests BDD + +Un seul chemin, cohérent pour tous les domaines. + +## Commits de la Migration + +1. `docs: fusionner séquences dupliquées (garder versions FR)` +2. `docs: renommer fichiers EN→FR pour cohérence linguistique` +3. `docs: mettre à jour liens après renommages` +4. `docs: intégrer toutes les features BDD dans navigation DDD` +5. `docs: supprimer index.md manuels du dossier generated/bdd` + +## Rollback (si nécessaire) + +Pour revenir à l'état avant migration : + +```bash +git checkout docs-before-refactor +# OU +git revert a29718a..4b28db3 +``` + +Tag de sauvegarde : `docs-before-refactor` + +## Questions Fréquentes + +### Où sont passées les pages "Vue d'ensemble" des domaines BDD ? + +Elles ont été supprimées car elles étaient dans le dossier `generated/` qui doit contenir uniquement les fichiers générés automatiquement par `scripts/generate-bdd-docs.py`. Les features sont directement accessibles dans la navigation. + +### Pourquoi supprimer la section "Tests BDD" autonome ? + +Pour établir une **source unique de vérité** : les tests BDD sont une vue testable des règles DDD, ils doivent donc être intégrés dans chaque domaine DDD, pas séparés. + +### Comment trouver une feature BDD maintenant ? + +1. Identifier le domaine concerné (content, recommendation, etc.) +2. Domaines DDD → [Domaine] → Tests BDD +3. Naviguer dans les catégories + +### Les fichiers `.feature` sont-ils dans la navigation ? + +Non. Seuls les fichiers générés (`.md` dans `generated/bdd/`) sont dans la navigation MkDocs. Les `.feature` sources sont dans `domains/[domain]/features/`. + +## Prochaines Étapes + +Pour maintenir cette organisation : + +1. **Toujours** utiliser les noms français pour les nouveaux fichiers +2. **Ne jamais** créer de fichiers manuels dans `generated/` +3. **Ajouter** les nouvelles features dans `domains/[domain]/features/` +4. **Regénérer** avec `make bdd-docs` après ajout de features +5. **Consulter** `CONTRIBUTING.md` pour les règles de contribution + +## Auteurs + +- Claude Sonnet 4.5 (réorganisation) +- Équipe RoadWave (validation) + +Date : 2026-02-08