Merge branch 'refactor/docs-reorganization' into main
This commit is contained in:
@@ -19,7 +19,7 @@ Le domaine **Shared** constitue le **Core Domain** de RoadWave. Il contient les
|
||||
|
||||
## Modèle de données
|
||||
|
||||
- [Diagramme entités globales](entities/../entities/entities-overview.md) - Entités centrales : USERS, CONTENTS, SUBSCRIPTIONS, LISTENING_HISTORY
|
||||
- [Diagramme entités globales](entities/../entities/vue-ensemble.md) - Entités centrales : USERS, CONTENTS, SUBSCRIPTIONS, LISTENING_HISTORY
|
||||
|
||||
## Ubiquitous Language
|
||||
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
# Séquence - Suppression de compte
|
||||
|
||||
## Diagramme
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as Utilisateur
|
||||
participant API as Backend API
|
||||
participant DB as PostgreSQL
|
||||
participant E as Email
|
||||
participant J as Job Quotidien
|
||||
|
||||
U->>API: DELETE /account (demande suppression)
|
||||
API->>DB: UPDATE account_status=grace_period
|
||||
API->>DB: UPDATE deletion_requested_at=NOW()
|
||||
API->>DB: UPDATE sessions.revoked_at=NOW() (toutes)
|
||||
API->>DB: UPDATE contents (cachés, non diffusés)
|
||||
API->>E: Email avec lien annulation (30j)
|
||||
API-->>U: Compte désactivé
|
||||
|
||||
alt Utilisateur change d'avis
|
||||
U->>API: GET /account/cancel-deletion (lien email)
|
||||
API->>DB: UPDATE account_status=active
|
||||
API->>DB: UPDATE deletion_requested_at=NULL
|
||||
API->>DB: Réactivation contenus
|
||||
API->>E: Email confirmation annulation
|
||||
API-->>U: Compte réactivé
|
||||
else Après 30 jours
|
||||
J->>DB: SELECT users WHERE grace_period > 30j
|
||||
J->>DB: UPDATE account_status=deleted
|
||||
J->>DB: Anonymisation données (email, pseudo...)
|
||||
J->>DB: UPDATE contents.creator="Utilisateur supprimé"
|
||||
J->>DB: DELETE listening_history, location_history, sessions
|
||||
J->>DB: Conservation contenus anonymisés
|
||||
J-->>DB: Suppression complète
|
||||
end
|
||||
```
|
||||
|
||||
## Légende
|
||||
|
||||
**Grace period** : 30 jours pour annuler
|
||||
**Annulation** : Via lien email unique
|
||||
**Anonymisation** :
|
||||
- Données perso supprimées (email, pseudo, GPS...)
|
||||
- Contenus conservés anonymes (intérêt communauté)
|
||||
- Irréversible après 30j
|
||||
|
||||
**Alternative** : Purge auto inactivité 5 ans (notifications 90j/30j/7j avant)
|
||||
@@ -20,9 +20,9 @@ sequenceDiagram
|
||||
Z-->>API: Token valide + user_id
|
||||
API->>DB: SELECT user WHERE id = ?
|
||||
DB-->>API: Données utilisateur
|
||||
API->>DB: INSERT session (hash tokens, IP, device)
|
||||
DB-->>API: Session créée
|
||||
API-->>A: Profil utilisateur
|
||||
|
||||
A->>DB: INSERT session (hash tokens, IP, device)
|
||||
A->>U: Connexion réussie
|
||||
```
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
# Séquence - Export de données RGPD
|
||||
|
||||
## Diagramme
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as Utilisateur
|
||||
participant API as Backend API
|
||||
participant DB as PostgreSQL
|
||||
participant W as Worker
|
||||
participant S as OVH Storage
|
||||
participant E as Email
|
||||
|
||||
U->>API: POST /exports (demande)
|
||||
API->>DB: Vérification limite (1/mois)
|
||||
API->>DB: INSERT export (status=pending)
|
||||
API->>W: Job asynchrone
|
||||
API-->>U: Export en préparation
|
||||
|
||||
W->>DB: Collecte données (profil, écoutes, contenus...)
|
||||
W->>W: Génération JSON + HTML
|
||||
|
||||
loop Contenus audio
|
||||
W->>DB: SELECT audio_url
|
||||
W->>W: Copie fichier
|
||||
end
|
||||
|
||||
W->>W: Création ZIP
|
||||
W->>S: Upload fichier
|
||||
S-->>W: URL signée (7j)
|
||||
|
||||
W->>DB: UPDATE export (status=ready, url, size)
|
||||
W->>E: Email avec lien download
|
||||
E-->>U: Export prêt (expire 7j)
|
||||
|
||||
U->>S: GET /export-signed-url
|
||||
S-->>U: Téléchargement ZIP
|
||||
|
||||
Note over DB: Job quotidien
|
||||
DB->>S: DELETE exports expirés (> 7j)
|
||||
```
|
||||
|
||||
## Légende
|
||||
|
||||
**Conformité RGPD** : Délai max 48h (Article 20)
|
||||
**Format** : ZIP (JSON machine-readable + HTML human-readable + audio)
|
||||
**Limite** : 1 export/mois
|
||||
**Expiration** : 7 jours calendaires
|
||||
**Sécurité** : URL signée unique
|
||||
32
docs/domains/_shared/states/consentement-parental.md
Normal file
32
docs/domains/_shared/states/consentement-parental.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# Cycle de vie - Consentement parental
|
||||
|
||||
## Diagramme
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> PendingValidation: Ado saisit email parent
|
||||
|
||||
PendingValidation --> Validated: Parent clique lien (< 7j)
|
||||
PendingValidation --> Expired: Délai 7j écoulé
|
||||
|
||||
Validated --> Revoked: Parent révoque consentement
|
||||
Validated --> AutoRevoked: Ado atteint 16 ans
|
||||
|
||||
Expired --> [*]
|
||||
Revoked --> [*]
|
||||
AutoRevoked --> [*]
|
||||
```
|
||||
|
||||
## Règles
|
||||
|
||||
| État | Valeur | Description |
|
||||
|------|--------|-------------|
|
||||
| Pending Validation | `pending_validation` | Email envoyé parent, token valide 7j |
|
||||
| Validated | `validated` | Parent a validé, restrictions 13-15 ans actives |
|
||||
| Expired | `expired` | Token expiré sans validation, compte inactif |
|
||||
| Revoked | `revoked` | Parent révoque, compte désactivé immédiatement |
|
||||
| Auto-Revoked | `auto_revoked` | Ado atteint 16 ans, restrictions levées automatiquement |
|
||||
|
||||
**Délai expiration** : 7 jours
|
||||
**Révocation** : Possible à tout moment via dashboard parent
|
||||
**Transition automatique** : À 16 ans → compte passe en `active` standard
|
||||
44
docs/domains/_shared/states/incident-breach.md
Normal file
44
docs/domains/_shared/states/incident-breach.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# Cycle de vie - Incident de violation de données
|
||||
|
||||
## Diagramme
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> Detected: Alerte monitoring
|
||||
|
||||
Detected --> Contained: Confinement immédiat (H+0)
|
||||
|
||||
Contained --> UnderInvestigation: Évaluation gravité (H+24)
|
||||
|
||||
UnderInvestigation --> Resolved: Risque faible (mesures suffisantes)
|
||||
UnderInvestigation --> CNILNotificationRequired: Risque utilisateurs
|
||||
|
||||
CNILNotificationRequired --> CNILNotified: Notification CNIL (< H+72)
|
||||
|
||||
CNILNotified --> Resolved: Pas de risque élevé utilisateurs
|
||||
CNILNotified --> UsersNotificationRequired: Risque élevé
|
||||
|
||||
UsersNotificationRequired --> UsersNotified: Email + push utilisateurs (< H+72)
|
||||
|
||||
UsersNotified --> Resolved: Post-mortem + correctifs
|
||||
|
||||
Resolved --> [*]
|
||||
```
|
||||
|
||||
## Règles
|
||||
|
||||
| État | Valeur | Délai max |
|
||||
|------|--------|-----------|
|
||||
| Detected | `detected` | H+0 |
|
||||
| Contained | `contained` | H+0 (immédiat) |
|
||||
| Under Investigation | `under_investigation` | H+24 |
|
||||
| CNIL Notification Required | `cnil_notification_required` | H+48 |
|
||||
| CNIL Notified | `cnil_notified` | H+72 (Article 33 RGPD) |
|
||||
| Users Notification Required | `users_notification_required` | H+48 |
|
||||
| Users Notified | `users_notified` | H+72 (Article 34 RGPD) |
|
||||
| Resolved | `resolved` | Post-incident |
|
||||
|
||||
**Sévérité** : `low` / `medium` / `high` / `critical`
|
||||
**Notification CNIL** : Obligatoire si risque pour droits/libertés utilisateurs
|
||||
**Notification utilisateurs** : Obligatoire si risque **élevé**
|
||||
**Runbook** : `docs/rgpd/procedure-breach.md`
|
||||
42
docs/domains/_shared/states/suppression-compte.md
Normal file
42
docs/domains/_shared/states/suppression-compte.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# Cycle de vie - Suppression de compte
|
||||
|
||||
## Diagramme
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> Requested: Utilisateur demande suppression
|
||||
|
||||
Requested --> GracePeriod: Compte désactivé, email envoyé
|
||||
|
||||
GracePeriod --> Cancelled: Clic lien annulation (< 30j)
|
||||
GracePeriod --> PendingDeletion: Délai 30j écoulé
|
||||
|
||||
Cancelled --> [*]
|
||||
|
||||
PendingDeletion --> Deleted: Job cron suppression effective
|
||||
|
||||
Deleted --> [*]
|
||||
```
|
||||
|
||||
## Règles
|
||||
|
||||
| État | Valeur | Description |
|
||||
|------|--------|-------------|
|
||||
| Requested | `requested` | Demande initiée, validation requise |
|
||||
| Grace Period | `grace_period` | 30j annulation possible, compte inaccessible |
|
||||
| Cancelled | `cancelled` | Utilisateur a annulé, compte réactivé |
|
||||
| Pending Deletion | `pending_deletion` | File job cron (< 24h) |
|
||||
| Deleted | `deleted` | Données supprimées, contenus anonymisés |
|
||||
|
||||
**Grace period** : 30 jours
|
||||
**Pendant grace period** :
|
||||
- Compte désactivé (login impossible)
|
||||
- Contenus cachés (non diffusés)
|
||||
- Sessions/tokens révoqués
|
||||
- Email avec token annulation (valide 30j)
|
||||
|
||||
**Après 30j** :
|
||||
- Données personnelles supprimées
|
||||
- Contenus créés anonymisés (créateur = "Utilisateur supprimé")
|
||||
- Historique GPS/écoute supprimé
|
||||
- Irréversible
|
||||
@@ -1,6 +1,6 @@
|
||||
# Modèle de données - Publicités
|
||||
|
||||
📖 Voir [Règles métier - Section 16 : Publicités](../rules/publicites.md) | [Entités globales](../../_shared/entities/entities-overview.md)
|
||||
📖 Voir [Règles métier - Section 16 : Publicités](../rules/publicites.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Modèle de données - Audio-guides
|
||||
|
||||
📖 Voir [Règles métier - Section 06 : Audio-guides multi-séquences](../rules/audio-guides.md) | [Entités globales](../../_shared/entities/entities-overview.md)
|
||||
📖 Voir [Règles métier - Section 06 : Audio-guides multi-séquences](../rules/audio-guides.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Modèle de données - Radio Live
|
||||
|
||||
📖 Voir [Règles métier - Section 12 : Radio Live](../rules/radio-live.md) | [Entités globales](../../_shared/entities/entities-overview.md)
|
||||
📖 Voir [Règles métier - Section 12 : Radio Live](../rules/radio-live.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Modèle de données - Modération
|
||||
|
||||
📖 Voir [Règles métier - Section 14 : Modération Flows](../rules/moderation-flows.md) | [Entités globales](../../_shared/entities/entities-overview.md)
|
||||
📖 Voir [Règles métier - Section 14 : Modération Flows](../rules/moderation-flows.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Modèle de données - Monétisation créateurs
|
||||
|
||||
📖 Voir [Règles métier - Section 18 : Monétisation](../rules/monetisation-createurs.md) | [Entités globales](../../_shared/entities/entities-overview.md)
|
||||
📖 Voir [Règles métier - Section 18 : Monétisation](../rules/monetisation-createurs.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Modèle de données - Premium
|
||||
|
||||
📖 Voir [Règles métier - Section 17 : Premium](../rules/premium.md) | [Entités globales](../../_shared/entities/entities-overview.md)
|
||||
📖 Voir [Règles métier - Section 17 : Premium](../rules/premium.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Modèle de données - Recommandation
|
||||
|
||||
📖 Voir [Règles métier - Section 03 : Centres d'intérêt](../rules/centres-interet-jauges.md) | [Section 04 : Algorithme](../rules/algorithme-recommandation.md) | [Entités globales](../../_shared/entities/entities-overview.md)
|
||||
📖 Voir [Règles métier - Section 03 : Centres d'intérêt](../rules/centres-interet-jauges.md) | [Section 04 : Algorithme](../rules/algorithme-recommandation.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
|
||||
|
||||
## Diagramme
|
||||
|
||||
|
||||
Reference in New Issue
Block a user