# Export de données (portabilité) ```mermaid sequenceDiagram participant User as Utilisateur participant App as Application participant DB as Base de données participant Queue as File d'attente participant Worker as Worker Background participant CDN as CDN (fichiers audio) participant Storage as Stockage temporaire participant Email as Service Email User->>App: Demande export données App->>DB: Vérifier dernière demande alt Dernière demande < 30 jours DB->>App: Demande refusée App->>User: "Prochain export disponible dans X jours" else Demande autorisée App->>DB: Créer demande export (statut: pending) App->>Queue: Ajouter job export App->>User: "Export en cours, email sous 48h" Queue->>Worker: Job export disponible Note over Worker: Génération asynchrone Worker->>DB: Récupérer profil utilisateur Worker->>DB: Récupérer historique d'écoute Worker->>DB: Récupérer contenus créés (métadonnées) Worker->>DB: Récupérer centres d'intérêt Worker->>DB: Récupérer historique consentements Worker->>CDN: Télécharger fichiers audio utilisateur CDN->>Worker: Fichiers audio (.opus) Worker->>Worker: Générer export.json (machine-readable) Worker->>Worker: Générer index.html (human-readable) Worker->>Worker: Générer README.txt Worker->>Worker: Créer archive ZIP Worker->>Storage: Stocker ZIP (expire 7j) Storage->>Worker: URL signée (expire 7j) Worker->>DB: Mettre à jour demande (statut: completed) Worker->>DB: Enregistrer URL + date expiration Worker->>Email: Envoyer email avec lien Email->>User: Email + lien téléchargement (valide 7j) User->>Storage: Clic lien téléchargement Storage->>User: Téléchargement ZIP Note over Storage: Après 7 jours Storage->>Storage: Suppression automatique ZIP end ``` **Légende** : - Limite : 1 export / 30 jours (anti-abus) - Délai génération : 48h maximum (conformité RGPD Article 20) - Expiration lien : 7 jours - Format : ZIP contenant JSON, HTML, audio, README