---
title: Flux Métiers
description: Diagrammes de séquence et explications des flux critiques de Memegoat.
---

# 🔄 Flux Métiers

Cette section détaille les processus critiques de la plateforme Memegoat à travers des diagrammes de séquence et des explications techniques étape par étape.

## 🔐 Authentification & Sécurité

### Inscription & Double Authentification (2FA)

Le processus d'inscription intègre immédiatement les mesures de sécurité fortes (Argon2id, PGP). L'activation de la 2FA est optionnelle mais fortement recommandée.

```mermaid
sequenceDiagram
    participant U as Utilisateur
    participant F as Frontend
    participant B as Backend
    participant DB as PostgreSQL
    participant M as Serveur SMTP

    Note over U, DB: Flux d'Inscription
    U->>F: Remplir formulaire (email, password)
    F->>B: POST /auth/register
    B->>B: Hash password (Argon2id)
    B->>B: Chiffrement Email (PGP)
    B->>B: Génération Email Hash (Blind Indexing)
    B->>DB: INSERT INTO users
    B->>M: Envoi email de validation
    B-->>F: 201 Created
    F-->>U: Succès (Redirection Login)

    Note over U, DB: Activation 2FA
    U->>F: Activer 2FA
    F->>B: POST /users/me/2fa/setup
    B->>B: Générer Secret TOTP
    B->>B: Chiffrer Secret (PGP)
    B->>DB: UPDATE users SET two_factor_secret
    B-->>F: Secret + QR Code URL
    F-->>U: Affiche QR Code
    U->>F: Saisir code TOTP
    F->>B: POST /users/me/2fa/enable (token)
    B->>B: Déchiffrer Secret (PGP)
    B->>B: Vérifier TOTP (otplib)
    B->>DB: UPDATE users SET is_two_factor_enabled = true
    B-->>F: 200 OK
```

---

## 📤 Publication de Contenu (Pipeline Média)

La publication d'un mème ou d'un GIF suit un pipeline rigoureux garantissant la sécurité (Antivirus) et l'optimisation (Transcodage).

```mermaid
sequenceDiagram
    participant U as Utilisateur
    participant F as Frontend
    participant B as Backend
    participant AV as ClamAV
    participant S3 as MinIO (S3)
    participant DB as PostgreSQL

    U->>F: Sélectionner image/vidéo
    F->>B: POST /contents/upload (multipart)
    B->>B: Validation (Taille, MIME-Type)
    B->>AV: Scan Antivirus (Stream)
    AV-->>B: Verdict (Clean/Infected)
    
    alt Infecté
        B-->>F: 400 Bad Request (Virus detected)
    else Sain
        B->>B: Transcodage (Sharp/FFmpeg)
        Note right of B: WebP pour images, WebM pour vidéos
        B->>S3: Upload fichier optimisé
        S3-->>B: Storage Key
        B->>DB: INSERT INTO contents
        B->>DB: INSERT INTO audit_logs (Upload action)
        B-->>F: 201 Created
    end
```

---

## 💬 Messagerie & Temps Réel

Memegoat utilise **Socket.io** pour les interactions en temps réel, avec une validation de session robuste via `iron-session`.

```mermaid
sequenceDiagram
    participant U1 as Utilisateur A
    participant F1 as Frontend A
    participant WS as WebSocket Gateway
    participant B as Backend (API)
    participant F2 as Frontend B
    participant U2 as Utilisateur B

    U1->>F1: Ouvre le chat
    F1->>WS: Connexion (transports: websocket)
    Note over WS: Authentification via iron-session cookie
    WS->>WS: Vérifie Access Token (JWT)
    WS->>WS: Rejoindre room "user:A"
    WS-->>F1: Connected

    U1->>F1: Tape un message
    F1->>WS: Event "typing" { recipientId: B, isTyping: true }
    WS->>F2: Event "user_typing" { userId: A, isTyping: true }
    F2-->>U2: Affiche "A est en train d'écrire..."

    U1->>F1: Envoyer message
    F1->>B: POST /messages { recipientId: B, text: "Salut !" }
    B->>DB: INSERT INTO messages
    B-->>F1: 201 Created
    B->>WS: Trigger Notify(B)
    WS->>F2: Event "new_message" { senderId: A, text: "Salut !" }
    F2-->>U2: Affiche message + Notification
```

---

## ⚖️ Cycle de Vie & Conformité (RGPD)

La gestion des données respecte le droit à l'oubli à travers un processus de suppression en deux étapes et une purge automatique.

```mermaid
sequenceDiagram
    participant U as Utilisateur
    participant B as Backend
    participant DB as PostgreSQL
    participant S3 as MinIO (S3)
    participant C as Cron Job (PurgeService)

    Note over U, DB: Droit à l'oubli (Phase 1)
    U->>B: DELETE /users/me
    B->>DB: UPDATE users SET deleted_at = NOW()
    B->>DB: UPDATE contents SET deleted_at = NOW() WHERE user_id = U
    B-->>U: 200 OK (Compte désactivé)

    Note over C, S3: Purge Automatique (Phase 2 - après 30 jours)
    C->>B: Execute purgeExpiredData()
    B->>DB: SELECT users WHERE deleted_at < 30 days
    B->>DB: DELETE FROM users (Hard Delete)
    Note right of B: Cascade delete sur API keys, Sessions, etc.
    B->>DB: DELETE FROM contents (Hard Delete)
    B->>S3: DELETE objects (Storage Keys)
    B->>DB: Purge Audit Logs / Reports expirés
```

---

## 🚩 Modération

Le flux de modération permet aux utilisateurs de signaler des abus, traités ensuite par les administrateurs.

```mermaid
sequenceDiagram
    participant U as Utilisateur
    participant B as Backend
    participant DB as PostgreSQL
    participant A as Administrateur

    U->>B: POST /reports { contentId, reason, description }
    B->>DB: INSERT INTO reports (status: pending)
    B-->>U: 201 Created

    A->>B: GET /reports (Admin Panel)
    B->>DB: SELECT * FROM reports WHERE status = pending
    B-->>A: Liste des signalements

    A->>B: PATCH /reports/:id/status { status: resolved }
    B->>DB: UPDATE reports SET status = resolved
    Note right of B: Si contenu illicite, l'admin peut supprimer le contenu
    B->>B: DELETE /contents/:id/admin (Hard Delete)
    B-->>A: 200 OK
```
