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:
2
Makefile
2
Makefile
@@ -51,7 +51,7 @@ test-integration:
|
||||
## test-bdd: Run BDD tests (Godog)
|
||||
test-bdd:
|
||||
@echo "$(BLUE)Running BDD tests...$(NC)"
|
||||
@godog run features/
|
||||
@godog run docs/domains/*/features/
|
||||
|
||||
## test-coverage: Run tests with coverage report
|
||||
test-coverage:
|
||||
|
||||
370
docs/REFACTOR-DDD.md
Normal file
370
docs/REFACTOR-DDD.md
Normal file
@@ -0,0 +1,370 @@
|
||||
# Plan de refactorisation : Organisation DDD de la documentation
|
||||
|
||||
## 🎯 Objectif
|
||||
|
||||
Réorganiser 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.
|
||||
|
||||
## 📊 Situation actuelle
|
||||
|
||||
### Structure actuelle
|
||||
|
||||
```
|
||||
docs/
|
||||
├── regles-metier/ # 19 fichiers numérotés 01-19 + ANNEXE
|
||||
├── diagrammes/ # Organisés par type (flux, états, séquences, entités)
|
||||
│ ├── flux/
|
||||
│ ├── etats/
|
||||
│ ├── sequence/
|
||||
│ └── entites/
|
||||
├── adr/ # Architecture Decision Records
|
||||
├── legal/ # Documentation légale
|
||||
└── interfaces/ # Interfaces UI
|
||||
```
|
||||
|
||||
### Problèmes identifiés
|
||||
|
||||
1. **Organisation séquentielle** : Numérotation 01-19 ne reflète pas les domaines métier
|
||||
2. **Diagrammes dispersés** : Séparés des règles métier qu'ils illustrent
|
||||
3. **Navigation complexe** : Difficile de trouver toute la doc d'un domaine
|
||||
4. **Pas d'alignement code** : Structure docs ≠ structure `backend/internal/`
|
||||
5. **Onboarding difficile** : Nouveau dev doit parcourir 19 fichiers linéairement
|
||||
6. **Maintenance** : Règles métier, entités et diagrammes d'un même domaine sont éparpillés
|
||||
|
||||
## 🎨 Architecture cible (DDD)
|
||||
|
||||
### Nouvelle structure
|
||||
|
||||
```
|
||||
docs/
|
||||
├── domains/ # 🆕 Organisation par domaine
|
||||
│ ├── README.md # Context Map + Index domaines
|
||||
│ │
|
||||
│ ├── _shared/ # Core Domain
|
||||
│ │ ├── README.md
|
||||
│ │ ├── rules/
|
||||
│ │ │ ├── authentification.md
|
||||
│ │ │ ├── rgpd.md
|
||||
│ │ │ └── gestion-erreurs.md
|
||||
│ │ ├── entities/
|
||||
│ │ │ └── modele-global.md
|
||||
│ │ └── ubiquitous-language.md
|
||||
│ │
|
||||
│ ├── recommendation/ # Bounded Context
|
||||
│ │ ├── README.md
|
||||
│ │ ├── rules/
|
||||
│ │ │ ├── centres-interet-jauges.md
|
||||
│ │ │ ├── algorithme-recommandation.md
|
||||
│ │ │ └── interactions-navigation.md
|
||||
│ │ ├── entities/
|
||||
│ │ │ └── modele-recommandation.md
|
||||
│ │ ├── sequences/
|
||||
│ │ │ └── scoring-recommandation.md
|
||||
│ │ └── features/
|
||||
│ │ └── *.feature
|
||||
│ │
|
||||
│ ├── content/ # Bounded Context
|
||||
│ │ ├── README.md
|
||||
│ │ ├── rules/
|
||||
│ │ │ ├── creation-publication.md
|
||||
│ │ │ ├── audio-guides.md
|
||||
│ │ │ ├── radio-live.md
|
||||
│ │ │ ├── contenus-geolocalises.md
|
||||
│ │ │ └── detection-contenu-protege.md
|
||||
│ │ ├── entities/
|
||||
│ │ │ ├── modele-audio-guides.md
|
||||
│ │ │ └── modele-radio-live.md
|
||||
│ │ └── flows/
|
||||
│ │
|
||||
│ ├── advertising/ # Bounded Context
|
||||
│ │ ├── README.md
|
||||
│ │ ├── rules/
|
||||
│ │ │ └── publicites.md
|
||||
│ │ ├── entities/
|
||||
│ │ │ └── modele-publicites.md
|
||||
│ │ ├── sequences/
|
||||
│ │ ├── states/
|
||||
│ │ └── flows/
|
||||
│ │
|
||||
│ ├── premium/ # Bounded Context
|
||||
│ │ ├── README.md
|
||||
│ │ ├── rules/
|
||||
│ │ │ ├── premium.md
|
||||
│ │ │ ├── mode-offline.md
|
||||
│ │ │ └── abonnements-notifications.md
|
||||
│ │ ├── entities/
|
||||
│ │ │ └── modele-premium.md
|
||||
│ │ └── sequences/
|
||||
│ │
|
||||
│ ├── monetization/ # Bounded Context
|
||||
│ │ ├── README.md
|
||||
│ │ ├── rules/
|
||||
│ │ │ └── monetisation-createurs.md
|
||||
│ │ ├── entities/
|
||||
│ │ │ └── modele-monetisation.md
|
||||
│ │ └── flows/
|
||||
│ │
|
||||
│ └── moderation/ # Bounded Context
|
||||
│ ├── README.md
|
||||
│ ├── rules/
|
||||
│ │ ├── moderation-flows.md
|
||||
│ │ ├── moderation-communautaire.md
|
||||
│ │ └── autres-comportements.md
|
||||
│ ├── entities/
|
||||
│ │ └── modele-moderation.md
|
||||
│ ├── sequences/
|
||||
│ │ └── processus-appel-moderation.md
|
||||
│ ├── states/
|
||||
│ │ └── signalement-lifecycle.md
|
||||
│ ├── flows/
|
||||
│ │ └── moderation-signalement.md
|
||||
│ └── features/
|
||||
│
|
||||
├── adr/ # Inchangé
|
||||
├── legal/ # Inchangé
|
||||
├── interfaces/ # Inchangé
|
||||
└── technical.md # Inchangé
|
||||
```
|
||||
|
||||
## 📋 Mapping des domaines
|
||||
|
||||
### 7 Bounded Contexts identifiés
|
||||
|
||||
| Domaine | Règles métier | Entités | Diagrammes | Responsabilité |
|
||||
|---------|--------------|---------|------------|----------------|
|
||||
| **_shared** | 01, 02, 10 | USERS, CONTENTS, SUBSCRIPTIONS, LISTENING_HISTORY | - | Authentification, RGPD, Gestion erreurs |
|
||||
| **recommendation** | 03, 04, 05 | USER_INTERESTS, INTEREST_CATEGORIES | scoring-recommandation.md | Jauges, Algorithme, Navigation |
|
||||
| **content** | 06, 07, 11, 12, 13 | AUDIO_GUIDES, LIVE_STREAMS, GUIDE_SEQUENCES, LIVE_RECORDINGS | - | Création, Audio-guides, Live, Détection droits |
|
||||
| **advertising** | 16 | AD_CAMPAIGNS, AD_METRICS, AD_IMPRESSIONS | - | Campagnes, Ciblage, Métriques |
|
||||
| **premium** | 08, 09, 17 | PREMIUM_SUBSCRIPTIONS, ACTIVE_STREAMS, OFFLINE_DOWNLOADS | - | Abonnements, Offline, Notifications |
|
||||
| **monetization** | 18 | CREATOR_MONETIZATION, REVENUES, PAYOUTS | - | KYC, Revenus, Versements |
|
||||
| **moderation** | 14, 15, 19 | REPORTS, SANCTIONS, APPEALS, STRIKES, BADGES | processus-appel-moderation.md, signalement-lifecycle.md, moderation-signalement.md | Signalements, Sanctions, Badges |
|
||||
|
||||
## 🗺️ Plan de migration détaillé
|
||||
|
||||
### Phase 1 : Créer la structure cible
|
||||
|
||||
```bash
|
||||
# Créer l'arborescence
|
||||
mkdir -p docs/domains/{_shared,recommendation,content,advertising,premium,monetization,moderation}/{rules,entities,sequences,states,flows,features}
|
||||
```
|
||||
|
||||
### Phase 2 : Déplacer les règles métier
|
||||
|
||||
| Fichier actuel | Destination |
|
||||
|----------------|-------------|
|
||||
| `01-authentification-inscription.md` | `domains/_shared/rules/authentification.md` |
|
||||
| `02-conformite-rgpd.md` | `domains/_shared/rules/rgpd.md` |
|
||||
| `03-centres-interet-jauges.md` | `domains/recommendation/rules/centres-interet-jauges.md` |
|
||||
| `04-algorithme-recommandation.md` | `domains/recommendation/rules/algorithme-recommandation.md` |
|
||||
| `05-interactions-navigation.md` | `domains/recommendation/rules/interactions-navigation.md` |
|
||||
| `06-audio-guides-multi-sequences.md` | `domains/content/rules/audio-guides.md` |
|
||||
| `07-contenus-geolocalises-voiture.md` | `domains/content/rules/contenus-geolocalises.md` |
|
||||
| `08-mode-offline.md` | `domains/premium/rules/mode-offline.md` |
|
||||
| `09-abonnements-notifications.md` | `domains/premium/rules/abonnements-notifications.md` |
|
||||
| `10-gestion-erreurs.md` | `domains/_shared/rules/gestion-erreurs.md` |
|
||||
| `11-creation-publication-contenu.md` | `domains/content/rules/creation-publication.md` |
|
||||
| `12-radio-live.md` | `domains/content/rules/radio-live.md` |
|
||||
| `13-detection-contenu-protege.md` | `domains/content/rules/detection-contenu-protege.md` |
|
||||
| `14-moderation-flows.md` | `domains/moderation/rules/moderation-flows.md` |
|
||||
| `15-moderation-communautaire.md` | `domains/moderation/rules/moderation-communautaire.md` |
|
||||
| `16-publicites.md` | `domains/advertising/rules/publicites.md` |
|
||||
| `17-premium.md` | `domains/premium/rules/premium.md` |
|
||||
| `18-monetisation-createurs.md` | `domains/monetization/rules/monetisation-createurs.md` |
|
||||
| `19-autres-comportements.md` | `domains/moderation/rules/autres-comportements.md` |
|
||||
| `ANNEXE-POST-MVP.md` | `domains/_shared/rules/ANNEXE-POST-MVP.md` |
|
||||
|
||||
### Phase 3 : Déplacer les diagrammes d'entités
|
||||
|
||||
| Fichier actuel | Destination |
|
||||
|----------------|-------------|
|
||||
| `diagrammes/entites/modele-global.md` | `domains/_shared/entities/modele-global.md` |
|
||||
| `diagrammes/entites/modele-recommandation.md` | `domains/recommendation/entities/modele-recommandation.md` |
|
||||
| `diagrammes/entites/modele-audio-guides.md` | `domains/content/entities/modele-audio-guides.md` |
|
||||
| `diagrammes/entites/modele-radio-live.md` | `domains/content/entities/modele-radio-live.md` |
|
||||
| `diagrammes/entites/modele-publicites.md` | `domains/advertising/entities/modele-publicites.md` |
|
||||
| `diagrammes/entites/modele-premium.md` | `domains/premium/entities/modele-premium.md` |
|
||||
| `diagrammes/entites/modele-monetisation.md` | `domains/monetization/entities/modele-monetisation.md` |
|
||||
| `diagrammes/entites/modele-moderation.md` | `domains/moderation/entities/modele-moderation.md` |
|
||||
|
||||
### Phase 4 : Déplacer les autres diagrammes
|
||||
|
||||
| Fichier actuel | Destination |
|
||||
|----------------|-------------|
|
||||
| `diagrammes/flux/moderation-signalement.md` | `domains/moderation/flows/moderation-signalement.md` |
|
||||
| `diagrammes/etats/signalement-lifecycle.md` | `domains/moderation/states/signalement-lifecycle.md` |
|
||||
| `diagrammes/sequence/processus-appel-moderation.md` | `domains/moderation/sequences/processus-appel-moderation.md` |
|
||||
|
||||
### Phase 5 : Créer les README.md de domaine
|
||||
|
||||
Créer un README.md dans chaque domaine avec le template suivant :
|
||||
|
||||
```markdown
|
||||
# Domaine : [Nom]
|
||||
|
||||
## Vue d'ensemble
|
||||
[Description du bounded context]
|
||||
|
||||
## Responsabilités
|
||||
- Responsabilité 1
|
||||
- Responsabilité 2
|
||||
|
||||
## Règles métier
|
||||
- [Règle 1](rules/xxx.md)
|
||||
|
||||
## Modèle de données
|
||||
- [Diagramme entités](entities/modele-xxx.md)
|
||||
|
||||
## Diagrammes
|
||||
- [Flux](flows/xxx.md)
|
||||
- [États](states/xxx.md)
|
||||
- [Séquences](sequences/xxx.md)
|
||||
|
||||
## Tests BDD
|
||||
- [Feature 1](features/xxx.feature)
|
||||
|
||||
## Dépendances
|
||||
- ✅ Dépend de : `_shared`
|
||||
- ⚠️ Interactions avec : `moderation`
|
||||
|
||||
## Ubiquitous Language
|
||||
**Termes métier spécifiques au domaine**
|
||||
```
|
||||
|
||||
### Phase 6 : Déplacer les features Gherkin
|
||||
|
||||
```bash
|
||||
# Les features actuellement dans /features/ root
|
||||
mv features/api/recommendation/* domains/recommendation/features/
|
||||
mv features/moderation/* domains/moderation/features/
|
||||
# etc.
|
||||
```
|
||||
|
||||
### Phase 7 : Créer le Context Map
|
||||
|
||||
Créer `docs/domains/README.md` avec la cartographie des domaines :
|
||||
|
||||
```markdown
|
||||
# Context Map RoadWave
|
||||
|
||||
## Vue d'ensemble des domaines
|
||||
|
||||
[Diagramme Mermaid des relations entre bounded contexts]
|
||||
|
||||
## Bounded Contexts
|
||||
|
||||
### Core Domain
|
||||
- **_shared** : Authentification, RGPD, Gestion erreurs
|
||||
|
||||
### Supporting Subdomains
|
||||
- **recommendation** : Jauges, Algorithme, Scoring
|
||||
- **content** : Création, Audio-guides, Live
|
||||
- **moderation** : Signalements, Sanctions, Badges
|
||||
|
||||
### Generic Subdomains
|
||||
- **advertising** : Campagnes publicitaires
|
||||
- **premium** : Abonnements, Offline
|
||||
- **monetization** : Revenus créateurs
|
||||
```
|
||||
|
||||
### Phase 8 : Mettre à jour mkdocs.yml
|
||||
|
||||
Réorganiser la navigation MkDocs pour refléter la nouvelle structure par domaine.
|
||||
|
||||
### Phase 9 : Mettre à jour les liens internes
|
||||
|
||||
Corriger tous les liens relatifs dans les fichiers markdown pour pointer vers les nouvelles locations.
|
||||
|
||||
### Phase 10 : Nettoyer l'ancienne structure
|
||||
|
||||
```bash
|
||||
# Une fois tout migré et testé
|
||||
rm -rf docs/regles-metier/
|
||||
rm -rf docs/diagrammes/
|
||||
```
|
||||
|
||||
## ✅ Avantages attendus
|
||||
|
||||
1. **Cohésion forte** : Toute la doc d'un domaine au même endroit
|
||||
2. **Couplage faible** : Domaines indépendants, dépendances explicites
|
||||
3. **Navigabilité améliorée** : README par domaine = entrée claire
|
||||
4. **Alignement code/docs** : Miroir de `backend/internal/`
|
||||
5. **Onboarding facilité** : Nouveau dev explore domaine par domaine
|
||||
6. **Maintenance simplifiée** : Modifier un domaine sans toucher aux autres
|
||||
7. **Scalabilité** : Facile d'ajouter un nouveau domaine
|
||||
8. **Tests BDD intégrés** : Features au plus près des règles métier
|
||||
|
||||
## ⚠️ Risques et précautions
|
||||
|
||||
### Risques identifiés
|
||||
|
||||
1. **Liens cassés** : Nombreux liens internes à corriger
|
||||
2. **Confusion temporaire** : Équipe doit s'adapter à la nouvelle structure
|
||||
3. **MkDocs rebuild** : Navigation complète à refaire
|
||||
4. **Features Gherkin** : Potentiellement beaucoup de fichiers à déplacer
|
||||
|
||||
### Précautions
|
||||
|
||||
1. ✅ **Créer ce plan d'abord** : Validation avant exécution
|
||||
2. ✅ **Branch dédiée** : `refactor/ddd-documentation`
|
||||
3. ✅ **Commits atomiques** : Un commit par phase
|
||||
4. ✅ **Tests continus** : Vérifier MkDocs build après chaque phase
|
||||
5. ✅ **Backup** : Garder ancienne structure jusqu'à validation complète
|
||||
6. ✅ **Script automatisé** : Créer script pour les déplacements et corrections de liens
|
||||
|
||||
## 📝 Checklist d'exécution
|
||||
|
||||
- [ ] Valider ce plan avec l'équipe
|
||||
- [ ] Créer branch `refactor/ddd-documentation`
|
||||
- [ ] Phase 1 : Créer arborescence
|
||||
- [ ] Phase 2 : Déplacer règles métier
|
||||
- [ ] Phase 3 : Déplacer diagrammes entités
|
||||
- [ ] Phase 4 : Déplacer autres diagrammes
|
||||
- [ ] Phase 5 : Créer README.md domaines
|
||||
- [ ] Phase 6 : Déplacer features Gherkin
|
||||
- [ ] Phase 7 : Créer Context Map
|
||||
- [ ] Phase 8 : Mettre à jour mkdocs.yml
|
||||
- [ ] Phase 9 : Corriger liens internes
|
||||
- [ ] Phase 10 : Nettoyer ancienne structure
|
||||
- [ ] Tester build MkDocs
|
||||
- [ ] Valider avec équipe
|
||||
- [ ] Merger dans main
|
||||
|
||||
## 🚀 Script d'automatisation suggéré
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# scripts/refactor-ddd.sh
|
||||
|
||||
# Phase 1 : Créer structure
|
||||
echo "Phase 1: Création structure..."
|
||||
mkdir -p docs/domains/{_shared,recommendation,content,advertising,premium,monetization,moderation}/{rules,entities,sequences,states,flows,features}
|
||||
|
||||
# Phase 2 : Déplacer règles métier
|
||||
echo "Phase 2: Migration règles métier..."
|
||||
git mv docs/regles-metier/01-authentification-inscription.md docs/domains/_shared/rules/authentification.md
|
||||
# ... etc pour tous les fichiers
|
||||
|
||||
# Phase 3-4 : Déplacer diagrammes
|
||||
echo "Phase 3-4: Migration diagrammes..."
|
||||
git mv docs/diagrammes/entites/modele-global.md docs/domains/_shared/entities/modele-global.md
|
||||
# ... etc
|
||||
|
||||
# Phase 9 : Corriger liens (sed ou script Python)
|
||||
echo "Phase 9: Correction liens..."
|
||||
find docs/domains -name "*.md" -exec sed -i 's|../../regles-metier/|../rules/|g' {} \;
|
||||
# ... etc
|
||||
|
||||
echo "Migration terminée!"
|
||||
```
|
||||
|
||||
## 📚 Références DDD
|
||||
|
||||
- [Domain-Driven Design - Eric Evans](https://www.domainlanguage.com/ddd/)
|
||||
- [Bounded Context - Martin Fowler](https://martinfowler.com/bliki/BoundedContext.html)
|
||||
- [Context Mapping](https://github.com/ddd-crew/context-mapping)
|
||||
|
||||
---
|
||||
|
||||
**Date de création** : 2026-02-07
|
||||
**Statut** : 🟡 En attente de validation
|
||||
**Auteur** : Documentation refactoring initiative
|
||||
@@ -23,7 +23,7 @@ RoadWave nécessite un système d'authentification sécurisé pour mobile (iOS/A
|
||||
- Base de données PostgreSQL partagée avec RoadWave (séparation logique par schéma)
|
||||
- Aucune donnée d'authentification ne transite par des serveurs tiers
|
||||
|
||||
> 📋 **Clarification** : OAuth2 PKCE est le **protocole technique** utilisé entre l'app mobile et Zitadel. Ce n'est **PAS** pour des fournisseurs tiers. L'authentification reste 100% email/password native (voir [Règle 01](../regles-metier/01-authentification-inscription.md#11-méthodes-dinscription)).
|
||||
> 📋 **Clarification** : OAuth2 PKCE est le **protocole technique** utilisé entre l'app mobile et Zitadel. Ce n'est **PAS** pour des fournisseurs tiers. L'authentification reste 100% email/password native (voir [Règle 01](../domains/_shared/rules/authentification.md#11-méthodes-dinscription)).
|
||||
|
||||
## Alternatives considérées
|
||||
|
||||
@@ -112,7 +112,7 @@ graph TB
|
||||
- Zitadel implémente OAuth2/OIDC comme **protocole**, mais l'auth reste email/password
|
||||
- Alternative serait session cookies (moins adapté mobile) ou JWT custom (réinventer la roue)
|
||||
|
||||
> 📋 **Référence** : Voir [Règle 01 - Méthodes d'Inscription](../regles-metier/01-authentification-inscription.md#11-méthodes-dinscription) pour la décision métier.
|
||||
> 📋 **Référence** : Voir [Règle 01 - Méthodes d'Inscription](../domains/_shared/rules/authentification.md#11-méthodes-dinscription) pour la décision métier.
|
||||
|
||||
## Exemple d'intégration
|
||||
|
||||
|
||||
@@ -205,8 +205,8 @@ Le service de gestion des permissions (`lib/core/services/location_permission_se
|
||||
### Documentation Associée
|
||||
|
||||
- **Guide détaillé** : [/docs/mobile/permissions-strategy.md](../mobile/permissions-strategy.md)
|
||||
- **Règles métier** : [Règle 05 - Mode Piéton](../regles-metier/05-interactions-navigation.md#512-mode-piéton-audio-guides)
|
||||
- **RGPD** : [Règle 02 - Conformité RGPD](../regles-metier/02-conformite-rgpd.md)
|
||||
- **Règles métier** : [Règle 05 - Mode Piéton](../domains/recommendation/rules/interactions-navigation.md#512-mode-piéton-audio-guides)
|
||||
- **RGPD** : [Règle 02 - Conformité RGPD](../domains/_shared/rules/rgpd.md)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -114,5 +114,5 @@ flowchart TD
|
||||
|
||||
- [ADR-004 : CDN (Souveraineté)](004-cdn.md)
|
||||
- [ADR-015 : Hébergement](015-hebergement.md)
|
||||
- [Règle 02 : RGPD (Mode Dégradé)](../regles-metier/02-conformite-rgpd.md#136-géolocalisation-optionnelle)
|
||||
- [Règle 02 : RGPD (Mode Dégradé)](../domains/_shared/rules/rgpd.md#136-géolocalisation-optionnelle)
|
||||
- IP2Location Lite : https://lite.ip2location.com/
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
## Contexte
|
||||
|
||||
Le système de modération RoadWave doit traiter des signalements de contenu audio problématique (haine, spam, droits d'auteur, etc.) avec :
|
||||
- **SLA stricts** : 2h (critique), 24h (haute), 72h (standard) définis dans [Règle 14](../regles-metier/14-moderation-flows.md)
|
||||
- **SLA stricts** : 2h (critique), 24h (haute), 72h (standard) définis dans [Règle 14](../domains/moderation/rules/moderation-flows.md)
|
||||
- **Scalabilité** : 0-10K+ signalements/mois
|
||||
- **Conformité DSA** : transparence, traçabilité, délais garantis
|
||||
- **Efficacité** : pré-filtrage IA pour priorisation automatique
|
||||
@@ -193,12 +193,12 @@ graph TB
|
||||
1. Migration Redis Streams si >1000 signalements/jour
|
||||
2. GPU pour Whisper si latence >15 min P95
|
||||
3. NLP avancé (distilbert + roberta)
|
||||
4. Modération communautaire (badges, [Règle 15](../regles-metier/15-moderation-communautaire.md))
|
||||
4. Modération communautaire (badges, [Règle 15](../domains/moderation/rules/moderation-communautaire.md))
|
||||
|
||||
## Références
|
||||
|
||||
- [Règle 14 : Modération - Flows opérationnels](../regles-metier/14-moderation-flows.md)
|
||||
- [Règle 15 : Modération Communautaire](../regles-metier/15-moderation-communautaire.md)
|
||||
- [Règle 14 : Modération - Flows opérationnels](../domains/moderation/rules/moderation-flows.md)
|
||||
- [Règle 15 : Modération Communautaire](../domains/moderation/rules/moderation-communautaire.md)
|
||||
- [ADR-001 : Langage Backend](001-langage-backend.md) (Go, Fiber)
|
||||
- [ADR-005 : Base de données](005-base-de-donnees.md) (PostgreSQL)
|
||||
- [ADR-010 : Architecture Backend](010-architecture-backend.md) (Modular monolith)
|
||||
|
||||
@@ -100,7 +100,7 @@ graph TB
|
||||
### Encryption PII (Field-level)
|
||||
|
||||
**Données chiffrées** (AES-256-GCM) :
|
||||
- **GPS précis** : lat/lon conservés 24h puis réduits à geohash-5 (~5km²) ([Règle 02](../regles-metier/02-conformite-rgpd.md))
|
||||
- **GPS précis** : lat/lon conservés 24h puis réduits à geohash-5 (~5km²) ([Règle 02](../domains/_shared/rules/rgpd.md))
|
||||
- **Email** : chiffré en base, déchiffré uniquement à l'envoi
|
||||
- **Numéro téléphone** : si ajouté (Phase 2)
|
||||
|
||||
@@ -270,7 +270,7 @@ graph TB
|
||||
- [ADR-011 : Accès données](011-orm-acces-donnees.md) (sqlc, prepared statements)
|
||||
- [ADR-015 : Hébergement](015-hebergement.md) (OVH France, souveraineté)
|
||||
- [ADR-024 : Monitoring](024-monitoring-observabilite.md) (Audit logs)
|
||||
- [Règle 02 : Conformité RGPD](../regles-metier/02-conformite-rgpd.md)
|
||||
- [Règle 02 : Conformité RGPD](../domains/_shared/rules/rgpd.md)
|
||||
- [HashiCorp Vault Documentation](https://www.vaultproject.io/docs)
|
||||
- [OWASP Top 10 2021](https://owasp.org/Top10/)
|
||||
- [NIST SP 800-175B (Cryptography)](https://csrc.nist.gov/publications/detail/sp/800-175b/final)
|
||||
|
||||
@@ -316,4 +316,5 @@ Score final =
|
||||
- [ADR-005 : Base de données](../../adr/005-base-de-donnees.md)
|
||||
- [Redis Geospatial Commands](https://redis.io/docs/data-types/geospatial/)
|
||||
- [PostGIS Documentation](https://postgis.net/documentation/)
|
||||
- [Règles métier : Découverte de contenu géolocalisé](../../regles-metier/03-decouverte-contenu.md)
|
||||
- [Règles métier : Algorithme de recommandation](../../domains/recommendation/rules/algorithme-recommandation.md)
|
||||
- [Règles métier : Centres d'intérêt](../../domains/recommendation/rules/centres-interet-jauges.md)
|
||||
|
||||
@@ -84,7 +84,7 @@ RoadWave est une app audio géolocalisée utilisée en conduite (CarPlay/Android
|
||||
- In-app disclosure obligatoire avant demande "Always"
|
||||
- Flux two-step : When In Use → Always (si user active mode piéton)
|
||||
- Si refusée : app fonctionne en mode voiture uniquement
|
||||
- **Action** : Voir strings détaillés dans [05-interactions-navigation.md](../regles-metier/05-interactions-navigation.md#512-mode-piéton-audio-guides)
|
||||
- **Action** : Voir strings détaillés dans [05-interactions-navigation.md](../domains/recommendation/rules/interactions-navigation.md#512-mode-piéton-audio-guides)
|
||||
|
||||
### Revenus créateurs
|
||||
|
||||
|
||||
249
docs/domains/README.md
Normal file
249
docs/domains/README.md
Normal file
@@ -0,0 +1,249 @@
|
||||
# Context Map RoadWave
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
RoadWave est organisé selon les principes du **Domain-Driven Design (DDD)** avec **7 bounded contexts** clairs. Cette architecture modulaire permet une meilleure séparation des préoccupations, facilite la maintenance et l'évolution du système.
|
||||
|
||||
## Architecture des domaines
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "Core Domain"
|
||||
SHARED[_shared<br/>Authentification, RGPD, Erreurs]
|
||||
end
|
||||
|
||||
subgraph "Supporting Subdomains"
|
||||
RECO[recommendation<br/>Jauges & Algorithme]
|
||||
CONTENT[content<br/>Audio-guides & Live]
|
||||
MODERATION[moderation<br/>Signalements & Sanctions]
|
||||
end
|
||||
|
||||
subgraph "Generic Subdomains"
|
||||
ADS[advertising<br/>Publicités]
|
||||
PREMIUM[premium<br/>Abonnements]
|
||||
MONETIZATION[monetization<br/>Monétisation créateurs]
|
||||
end
|
||||
|
||||
%% Dépendances principales
|
||||
RECO --> SHARED
|
||||
RECO --> CONTENT
|
||||
CONTENT --> SHARED
|
||||
ADS --> SHARED
|
||||
ADS --> RECO
|
||||
PREMIUM --> SHARED
|
||||
PREMIUM --> CONTENT
|
||||
MONETIZATION --> SHARED
|
||||
MONETIZATION --> CONTENT
|
||||
MONETIZATION --> ADS
|
||||
MONETIZATION --> PREMIUM
|
||||
MODERATION --> SHARED
|
||||
MODERATION --> CONTENT
|
||||
|
||||
%% Relations anti-corruption
|
||||
ADS -.-|bloqué par| PREMIUM
|
||||
MODERATION -.->|peut démonétiser| MONETIZATION
|
||||
```
|
||||
|
||||
## Bounded Contexts
|
||||
|
||||
### Core Domain
|
||||
|
||||
#### 🔐 [_shared](/_shared/)
|
||||
**Responsabilité** : Fonctionnalités transversales essentielles
|
||||
|
||||
- Authentification et inscription via Zitadel
|
||||
- Conformité RGPD (consentements, suppression données)
|
||||
- Gestion cohérente des erreurs
|
||||
- Entités centrales : `USERS`, `CONTENTS`, `SUBSCRIPTIONS`, `LISTENING_HISTORY`
|
||||
|
||||
**Utilisé par** : Tous les autres domaines
|
||||
|
||||
---
|
||||
|
||||
### Supporting Subdomains
|
||||
|
||||
#### 🎯 [recommendation](/recommendation/)
|
||||
**Responsabilité** : Recommandation géolocalisée de contenus
|
||||
|
||||
- Jauges de centres d'intérêt (scores dynamiques 0-100)
|
||||
- Algorithme de scoring (distance + affinité)
|
||||
- Adaptation selon interactions utilisateur
|
||||
- Entités : `USER_INTERESTS`, `INTEREST_CATEGORIES`
|
||||
|
||||
**Dépend de** : `_shared`, `content`
|
||||
|
||||
**Ubiquitous Language** : Interest Gauge, Recommendation Score, Geographic Priority, Interest Decay
|
||||
|
||||
---
|
||||
|
||||
#### 🎙️ [content](/content/)
|
||||
**Responsabilité** : Création et diffusion de contenus audio
|
||||
|
||||
- Audio-guides multi-séquences géolocalisés
|
||||
- Radio live et enregistrements
|
||||
- Contenus géolocalisés pour voiture/piéton
|
||||
- Détection de contenu protégé (droits d'auteur)
|
||||
- Entités : `AUDIO_GUIDES`, `LIVE_STREAMS`, `GUIDE_SEQUENCES`, `LIVE_RECORDINGS`
|
||||
|
||||
**Dépend de** : `_shared`
|
||||
|
||||
**Interagit avec** : `moderation` (modération), `monetization` (revenus)
|
||||
|
||||
**Ubiquitous Language** : Audio Guide, Guide Sequence, Live Stream, Geofence, Content Fingerprint
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ [moderation](/moderation/)
|
||||
**Responsabilité** : Modération et sécurité de la plateforme
|
||||
|
||||
- Workflow de traitement des signalements
|
||||
- Système de strikes et sanctions
|
||||
- Processus d'appel
|
||||
- Badges de confiance créateurs
|
||||
- Modération communautaire
|
||||
- Entités : `REPORTS`, `SANCTIONS`, `APPEALS`, `STRIKES`, `BADGES`
|
||||
|
||||
**Dépend de** : `_shared`, `content`
|
||||
|
||||
**Peut affecter** : `monetization` (démonétisation)
|
||||
|
||||
**Ubiquitous Language** : Report, Strike, Sanction, Appeal, Trust Badge, Community Moderation
|
||||
|
||||
---
|
||||
|
||||
### Generic Subdomains
|
||||
|
||||
#### 📢 [advertising](/advertising/)
|
||||
**Responsabilité** : Publicités audio géociblées
|
||||
|
||||
- Campagnes publicitaires
|
||||
- Ciblage géographique et par intérêts
|
||||
- Métriques (impressions, CPM)
|
||||
- Insertion dynamique dans flux audio
|
||||
- Entités : `AD_CAMPAIGNS`, `AD_METRICS`, `AD_IMPRESSIONS`
|
||||
|
||||
**Dépend de** : `_shared`, `recommendation` (ciblage)
|
||||
|
||||
**Bloqué par** : `premium` (pas de pub pour abonnés)
|
||||
|
||||
**Ubiquitous Language** : Ad Campaign, Ad Impression, CPM, Ad Targeting, Skip Rate
|
||||
|
||||
---
|
||||
|
||||
#### 💎 [premium](/premium/)
|
||||
**Responsabilité** : Abonnements et fonctionnalités premium
|
||||
|
||||
- Abonnements payants (mensuel/annuel)
|
||||
- Mode offline (téléchargement, synchro)
|
||||
- Notifications personnalisées
|
||||
- Avantages : sans pub, qualité audio supérieure
|
||||
- Entités : `PREMIUM_SUBSCRIPTIONS`, `ACTIVE_STREAMS`, `OFFLINE_DOWNLOADS`
|
||||
|
||||
**Dépend de** : `_shared`, `content`
|
||||
|
||||
**Bloque** : `advertising` (désactivation pubs)
|
||||
|
||||
**Ubiquitous Language** : Premium Subscription, Offline Download, Sync Queue, Premium Tier, Auto-Renewal
|
||||
|
||||
---
|
||||
|
||||
#### 💰 [monetization](/monetization/)
|
||||
**Responsabilité** : Monétisation des créateurs
|
||||
|
||||
- KYC (vérification identité)
|
||||
- Calcul des revenus (pub + abonnements)
|
||||
- Versements mensuels via Mangopay
|
||||
- Tableaux de bord revenus
|
||||
- Entités : `CREATOR_MONETIZATION`, `REVENUES`, `PAYOUTS`
|
||||
|
||||
**Dépend de** : `_shared`, `content`, `advertising`, `premium`
|
||||
|
||||
**Affecté par** : `moderation` (démonétisation en cas de sanction)
|
||||
|
||||
**Ubiquitous Language** : Revenue Share, KYC Verification, Payout, Minimum Threshold
|
||||
|
||||
---
|
||||
|
||||
## Relations entre domaines
|
||||
|
||||
### Upstream/Downstream
|
||||
|
||||
| Upstream (Fournisseur) | Downstream (Consommateur) | Type de relation |
|
||||
|------------------------|---------------------------|------------------|
|
||||
| `_shared` | Tous | **Kernel partagé** |
|
||||
| `content` | `recommendation` | **Customer/Supplier** |
|
||||
| `recommendation` | `advertising` | **Customer/Supplier** |
|
||||
| `premium` | `advertising` | **Anti-Corruption Layer** |
|
||||
|
||||
### Événements de domaine
|
||||
|
||||
Les domaines communiquent via des événements métier :
|
||||
|
||||
- **UserRegistered** (`_shared` → tous) : Nouvel utilisateur
|
||||
- **ContentPublished** (`content` → `recommendation`, `moderation`) : Nouveau contenu
|
||||
- **InterestGaugeUpdated** (`recommendation` → `advertising`) : Mise à jour jauges
|
||||
- **UserBanned** (`moderation` → `monetization`) : Bannissement utilisateur
|
||||
- **SubscriptionActivated** (`premium` → `advertising`) : Activation premium
|
||||
|
||||
## Structure de la documentation
|
||||
|
||||
Chaque domaine suit cette organisation :
|
||||
|
||||
```
|
||||
domains/<domain>/
|
||||
├── README.md # Vue d'ensemble du domaine
|
||||
├── rules/ # Règles métier (*.md)
|
||||
├── entities/ # Diagrammes entités (*.md)
|
||||
├── sequences/ # Diagrammes séquences (*.md)
|
||||
├── states/ # Diagrammes états (*.md)
|
||||
├── flows/ # Diagrammes flux (*.md)
|
||||
└── features/ # Tests BDD Gherkin (*.feature)
|
||||
```
|
||||
|
||||
## Navigation
|
||||
|
||||
- [📖 Règles métier par numéro](../regles-metier/) *(structure legacy, déprécié)*
|
||||
- [🏛️ ADR (Architecture Decision Records)](../adr/)
|
||||
- [⚖️ Documentation légale](../legal/)
|
||||
- [🖥️ Interfaces UI](../interfaces/)
|
||||
- [🔧 Documentation technique](../technical.md)
|
||||
|
||||
## Ubiquitous Language Global
|
||||
|
||||
**Termes transversaux utilisés dans tous les domaines** :
|
||||
|
||||
- **User** : Utilisateur (auditeur, créateur, ou les deux)
|
||||
- **Content** : Contenu audio diffusé sur la plateforme
|
||||
- **Creator** : Utilisateur créant du contenu
|
||||
- **Geolocation** : Position GPS de l'utilisateur
|
||||
- **Stream** : Flux de lecture audio
|
||||
- **Subscription** : Abonnement (à un créateur ou à premium)
|
||||
- **Interest** : Centre d'intérêt (automobile, voyage, musique, etc.)
|
||||
|
||||
## Principes d'architecture
|
||||
|
||||
1. **Bounded Contexts clairs** : Chaque domaine a des limites bien définies
|
||||
2. **Autonomie des domaines** : Chaque domaine peut évoluer indépendamment
|
||||
3. **Communication asynchrone** : Préférence pour les événements vs appels directs
|
||||
4. **Anti-Corruption Layer** : Protection contre les changements externes
|
||||
5. **Alignment code/docs** : Structure docs ↔ structure `backend/internal/`
|
||||
|
||||
## Alignement avec le code backend
|
||||
|
||||
```
|
||||
backend/internal/ docs/domains/
|
||||
├── auth/ ←→ _shared/
|
||||
├── user/ ←→ _shared/
|
||||
├── content/ ←→ content/
|
||||
├── geo/ ←→ recommendation/
|
||||
├── streaming/ ←→ content/
|
||||
├── moderation/ ←→ moderation/
|
||||
├── payment/ ←→ monetization/
|
||||
└── analytics/ ←→ recommendation/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Dernière mise à jour** : 2026-02-07
|
||||
**Statut** : ✅ Active
|
||||
**Auteur** : Documentation DDD initiative
|
||||
37
docs/domains/_shared/README.md
Normal file
37
docs/domains/_shared/README.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# Domaine : Shared (Core Domain)
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
Le domaine **Shared** constitue le **Core Domain** de RoadWave. Il contient les fonctionnalités transversales essentielles utilisées par tous les autres bounded contexts de l'application.
|
||||
|
||||
## Responsabilités
|
||||
|
||||
- **Authentification et inscription** : Gestion des comptes utilisateurs, connexion, inscription
|
||||
- **Conformité RGPD** : Respect de la vie privée, consentements, suppression des données
|
||||
- **Gestion des erreurs** : Traitement cohérent des erreurs à travers toute l'application
|
||||
|
||||
## Règles métier
|
||||
|
||||
- [Authentification et inscription](rules/authentification.md)
|
||||
- [Conformité RGPD](rules/rgpd.md)
|
||||
- [Gestion des erreurs](rules/gestion-erreurs.md)
|
||||
- [Annexe Post-MVP](rules/ANNEXE-POST-MVP.md)
|
||||
|
||||
## Modèle de données
|
||||
|
||||
- [Diagramme entités globales](entities/../entities/modele-global.md) - Entités centrales : USERS, CONTENTS, SUBSCRIPTIONS, LISTENING_HISTORY
|
||||
|
||||
## Ubiquitous Language
|
||||
|
||||
**Termes métier du domaine partagé** :
|
||||
- **User** : Utilisateur de la plateforme (auditeur, créateur, ou les deux)
|
||||
- **Content** : Tout contenu audio diffusé sur la plateforme
|
||||
- **Subscription** : Abonnement d'un utilisateur à un créateur ou une catégorie
|
||||
- **Listening History** : Historique d'écoute d'un utilisateur
|
||||
- **Authentication** : Processus de vérification de l'identité via Zitadel
|
||||
- **RGPD Consent** : Consentement explicite pour le traitement des données personnelles
|
||||
|
||||
## Dépendances
|
||||
|
||||
- ✅ Utilisé par : **tous les autres domaines**
|
||||
- ⚠️ Dépend de : aucun (Core Domain)
|
||||
36
docs/domains/advertising/README.md
Normal file
36
docs/domains/advertising/README.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# Domaine : Advertising
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
Le domaine **Advertising** gère la diffusion de publicités audio ciblées. C'est un **Generic Subdomain** qui constitue une source de revenus importante pour la plateforme.
|
||||
|
||||
## Responsabilités
|
||||
|
||||
- **Campagnes publicitaires** : Création et gestion des campagnes
|
||||
- **Ciblage** : Ciblage géographique et par centres d'intérêt
|
||||
- **Métriques** : Suivi des impressions, écoutes et performances
|
||||
- **Insertion dynamique** : Insertion de publicités dans les flux audio
|
||||
|
||||
## Règles métier
|
||||
|
||||
- [Publicités](rules/publicites.md)
|
||||
|
||||
## Modèle de données
|
||||
|
||||
- [Diagramme entités publicités](entities/modele-publicites.md) - Entités : AD_CAMPAIGNS, AD_METRICS, AD_IMPRESSIONS
|
||||
|
||||
## Ubiquitous Language
|
||||
|
||||
**Termes métier du domaine** :
|
||||
- **Ad Campaign** : Campagne publicitaire avec budget et durée
|
||||
- **Ad Impression** : Affichage/lecture d'une publicité
|
||||
- **Ad Targeting** : Critères de ciblage (geo + intérêts)
|
||||
- **CPM (Cost Per Mille)** : Coût pour 1000 impressions
|
||||
- **Ad Insertion** : Insertion dynamique dans le flux audio
|
||||
- **Skip Rate** : Taux de publicités sautées par les utilisateurs
|
||||
|
||||
## Dépendances
|
||||
|
||||
- ✅ Dépend de : `_shared` (users, listening history)
|
||||
- ✅ Dépend de : `recommendation` (ciblage par intérêts)
|
||||
- ⚠️ Bloqué par : `premium` (pas de pub pour abonnés premium)
|
||||
@@ -1,6 +1,6 @@
|
||||
# Modèle de données - Publicités
|
||||
|
||||
📖 Voir [Règles métier - Section 16 : Publicités](../../regles-metier/16-publicites.md) | [Entités globales](modele-global.md)
|
||||
📖 Voir [Règles métier - Section 16 : Publicités](../rules/publicites.md) | [Entités globales](../../_shared/entities/modele-global.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
44
docs/domains/content/README.md
Normal file
44
docs/domains/content/README.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# Domaine : Content
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
Le domaine **Content** gère toute la création, publication et diffusion des contenus audio sur RoadWave. C'est un **Supporting Subdomain** essentiel qui couvre les audio-guides, les radios live et les contenus géolocalisés.
|
||||
|
||||
## Responsabilités
|
||||
|
||||
- **Création et publication** : Workflow de création de contenu par les créateurs
|
||||
- **Audio-guides multi-séquences** : Gestion des parcours audio structurés
|
||||
- **Radio live** : Diffusion en direct et enregistrements
|
||||
- **Contenus géolocalisés** : Association de contenus à des zones géographiques
|
||||
- **Détection de contenu protégé** : Prévention des violations de droits d'auteur
|
||||
|
||||
## Règles métier
|
||||
|
||||
- [Création et publication de contenu](rules/creation-publication.md)
|
||||
- [Audio-guides multi-séquences](rules/audio-guides.md)
|
||||
- [Radio live](rules/radio-live.md)
|
||||
- [Contenus géolocalisés en voiture](rules/contenus-geolocalises.md)
|
||||
- [Détection de contenu protégé](rules/detection-contenu-protege.md)
|
||||
|
||||
## Modèle de données
|
||||
|
||||
- [Diagramme entités audio-guides](entities/modele-audio-guides.md) - Entités : AUDIO_GUIDES, GUIDE_SEQUENCES
|
||||
- [Diagramme entités radio live](entities/modele-radio-live.md) - Entités : LIVE_STREAMS, LIVE_RECORDINGS
|
||||
|
||||
## Ubiquitous Language
|
||||
|
||||
**Termes métier du domaine** :
|
||||
- **Audio Guide** : Contenu structuré en séquences géolocalisées
|
||||
- **Guide Sequence** : Segment d'un audio-guide déclenché à un point GPS précis
|
||||
- **Live Stream** : Diffusion audio en temps réel
|
||||
- **Live Recording** : Enregistrement automatique d'un live pour réécoute
|
||||
- **Geofence** : Zone géographique déclenchant un contenu
|
||||
- **Content Fingerprint** : Empreinte numérique pour détecter le contenu protégé
|
||||
- **Creator** : Utilisateur créant et publiant du contenu
|
||||
|
||||
## Dépendances
|
||||
|
||||
- ✅ Dépend de : `_shared` (users, contents base)
|
||||
- ⚠️ Interactions avec : `moderation` (modération de contenu)
|
||||
- ⚠️ Interactions avec : `monetization` (revenus créateurs)
|
||||
- ⚠️ Utilisé par : `recommendation` (métadonnées pour scoring)
|
||||
@@ -1,6 +1,6 @@
|
||||
# Modèle de données - Audio-guides
|
||||
|
||||
📖 Voir [Règles métier - Section 06 : Audio-guides multi-séquences](../../regles-metier/06-audio-guides-multi-sequences.md) | [Entités globales](modele-global.md)
|
||||
📖 Voir [Règles métier - Section 06 : Audio-guides multi-séquences](../rules/audio-guides.md) | [Entités globales](../../_shared/entities/modele-global.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Modèle de données - Radio Live
|
||||
|
||||
📖 Voir [Règles métier - Section 12 : Radio Live](../../regles-metier/12-radio-live.md) | [Entités globales](modele-global.md)
|
||||
📖 Voir [Règles métier - Section 12 : Radio Live](../rules/radio-live.md) | [Entités globales](../../_shared/entities/modele-global.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user