Merge branch 'refactor/docs-reorganization' into main

This commit is contained in:
jpgiannetti
2026-02-08 20:59:35 +01:00
35 changed files with 819 additions and 1022 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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
```

View File

@@ -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

View 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

View 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`

View 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