diff --git a/documentation/content/docs/_meta.json b/documentation/content/docs/_meta.json
index 87e801a..f8c30e2 100644
--- a/documentation/content/docs/_meta.json
+++ b/documentation/content/docs/_meta.json
@@ -7,6 +7,7 @@
"features": "Fonctionnalités",
"stack": "Stack Technologique",
"database": "Modèle de Données",
+ "flows": "Flux Métiers",
"---security---": {
"type": "separator",
"label": "Sécurité & Conformité"
diff --git a/documentation/content/docs/api-reference.mdx b/documentation/content/docs/api-reference.mdx
index f113288..361dad7 100644
--- a/documentation/content/docs/api-reference.mdx
+++ b/documentation/content/docs/api-reference.mdx
@@ -216,6 +216,16 @@ Cette page documente tous les points de terminaison disponibles sur l'API Memego
- `200 OK` : 2FA désactivée.
+
+ Recherche des utilisateurs par leur nom d'utilisateur ou nom d'affichage. Requiert l'authentification.
+
+ **Query Params :**
+ - `q` (string) : Terme de recherche.
+
+ **Réponses :**
+ - `200 OK` : Liste des utilisateurs correspondants.
+
+
Liste tous les utilisateurs. **Réservé aux administrateurs.**
@@ -406,6 +416,92 @@ Cette page documente tous les points de terminaison disponibles sur l'API Memego
+### 💬 Commentaires (`/comments` & `/contents/:id/comments`)
+
+
+
+ Liste les commentaires d'un contenu.
+
+ **Réponses :**
+ - `200 OK` : Liste des commentaires, incluant l'auteur et si l'utilisateur actuel a aimé le commentaire.
+
+
+
+ Ajoute un commentaire à un contenu. Requiert l'authentification.
+
+ **Corps de la requête :**
+ - `text` (string) : Contenu du commentaire.
+ - `parentId` (uuid, optional) : ID du commentaire parent pour les réponses.
+
+ **Réponses :**
+ - `201 Created` : Commentaire ajouté.
+
+
+
+ Supprime un commentaire. L'utilisateur doit être l'auteur ou un modérateur/admin.
+
+ **Réponses :**
+ - `200 OK` : Commentaire supprimé.
+
+
+
+ Ajoute un "like" à un commentaire. Requiert l'authentification.
+
+ **Réponses :**
+ - `201 Created` : Like ajouté.
+
+
+
+ Retire un "like" d'un commentaire. Requiert l'authentification.
+
+ **Réponses :**
+ - `200 OK` : Like retiré.
+
+
+
+### ✉️ Messagerie (`/messages`)
+
+
+
+ Liste les conversations de l'utilisateur connecté. Requiert l'authentification.
+
+ **Réponses :**
+ - `200 OK` : Liste des conversations avec le dernier message et le nombre de messages non lus.
+
+
+
+ Récupère le nombre total de messages non lus pour l'utilisateur. Requiert l'authentification.
+
+ **Réponses :**
+ - `200 OK` : `{ "count": number }`.
+
+
+
+ Récupère ou crée une conversation avec un utilisateur spécifique. Requiert l'authentification.
+
+ **Réponses :**
+ - `200 OK` : Objet conversation.
+
+
+
+ Récupère les messages d'une conversation. Marque les messages comme lus. Requiert l'authentification.
+
+ **Réponses :**
+ - `200 OK` : Liste des messages.
+
+
+
+ Envoie un message. Requiert l'authentification.
+
+ **Corps de la requête :**
+ - `recipientId` (uuid) : ID du destinataire.
+ - `text` (string) : Contenu du message.
+
+ **Réponses :**
+ - `201 Created` : Message envoyé.
+
+
+
### ⭐ Favoris (`/favorites`)
diff --git a/documentation/content/docs/api.mdx b/documentation/content/docs/api.mdx
index 43a6842..7dc3898 100644
--- a/documentation/content/docs/api.mdx
+++ b/documentation/content/docs/api.mdx
@@ -29,4 +29,4 @@ Memegoat utilise une architecture de stockage d'objets compatible S3 (MinIO). Le
### Notifications (Mail)
-Le système intègre un service d'envoi d'emails (SMTP) pour les notifications critiques et la gestion des comptes.
+Le système intègre un service d'envoi d'emails (SMTP) via `@nestjs-modules/mailer` pour les notifications critiques, la validation des comptes et la réinitialisation de mots de passe.
diff --git a/documentation/content/docs/compliance.mdx b/documentation/content/docs/compliance.mdx
index 192f051..e6c51ff 100644
--- a/documentation/content/docs/compliance.mdx
+++ b/documentation/content/docs/compliance.mdx
@@ -19,7 +19,8 @@ Le projet Memegoat s'inscrit dans une démarche de respect de la vie privée et
Conformément à la section [Sécurité](/docs/security), les mesures suivantes sont appliquées :
- **Chiffrement au repos** : Utilisation de **PGP (pgcrypto)** pour les données identifiantes.
-- **Hachage aveugle** : Pour permettre les opérations sur données chiffrées sans compromettre la confidentialité.
+- **Cryptographie Post-Quantique** : Mise en œuvre de `@noble/post-quantum` pour protéger les données contre les futures capacités de calcul quantique.
+- **Hachage aveugle (Blind Indexing)** : Pour permettre les opérations d'unicité et de recherche sur données chiffrées sans compromettre la confidentialité.
- **Hachage des mots de passe** : Utilisation de l'algorithme **Argon2id**.
- **Communications sécurisées** : Utilisation de **TLS 1.3** via Caddy.
- **Suivi des Erreurs (Sentry)** : Configuration conforme avec désactivation de l'envoi des PII (Personally Identifiable Information) et masquage des données sensibles.
diff --git a/documentation/content/docs/database.mdx b/documentation/content/docs/database.mdx
index d55ecb4..6e71801 100644
--- a/documentation/content/docs/database.mdx
+++ b/documentation/content/docs/database.mdx
@@ -18,13 +18,24 @@ erDiagram
USER ||--o{ API_KEY : "genere"
USER ||--o{ AUDIT_LOG : "genere"
USER ||--o{ FAVORITE : "ajoute"
+ USER ||--o{ COMMENT : "rédige"
+ USER ||--o{ COMMENT_LIKE : "aime"
+ USER ||--o{ CONVERSATION_PARTICIPANT : "participe"
+ USER ||--o{ MESSAGE : "envoie"
CONTENT ||--o{ CONTENT_TAG : "possede"
TAG ||--o{ CONTENT_TAG : "est_lie_a"
CONTENT ||--o{ REPORT : "est_signale"
CONTENT ||--o{ FAVORITE : "est_mis_en"
+ CONTENT ||--o{ COMMENT : "reçoit"
TAG ||--o{ REPORT : "est_signale"
+ COMMENT ||--o{ COMMENT : "possède des réponses"
+ COMMENT ||--o{ COMMENT_LIKE : "est aimé par"
+
+ CONVERSATION ||--o{ CONVERSATION_PARTICIPANT : "regroupe"
+ CONVERSATION ||--o{ MESSAGE : "contient"
+
CATEGORY ||--o{ CONTENT : "catégorise"
ROLE ||--o{ USER_ROLE : "attribue_a"
@@ -45,6 +56,15 @@ erDiagram
string type
string storage_key
}
+ COMMENT {
+ string text
+ }
+ CONVERSATION {
+ timestamp created_at
+ }
+ MESSAGE {
+ string text
+ }
TAG {
string name
string slug
@@ -140,6 +160,39 @@ erDiagram
uuid content_id PK, FK
uuid tag_id PK, FK
}
+ comments {
+ uuid id PK
+ uuid content_id FK
+ uuid user_id FK
+ uuid parent_id FK
+ text text
+ timestamp created_at
+ timestamp updated_at
+ timestamp deleted_at
+ }
+ comment_likes {
+ uuid comment_id PK, FK
+ uuid user_id PK, FK
+ timestamp created_at
+ }
+ conversations {
+ uuid id PK
+ timestamp created_at
+ timestamp updated_at
+ }
+ conversation_participants {
+ uuid conversation_id PK, FK
+ uuid user_id PK, FK
+ timestamp joined_at
+ }
+ messages {
+ uuid id PK
+ uuid conversation_id FK
+ uuid sender_id FK
+ text text
+ timestamp created_at
+ timestamp read_at
+ }
roles {
uuid id PK
varchar name
@@ -225,6 +278,15 @@ erDiagram
users ||--o{ sessions : "user_id"
users ||--o{ api_keys : "user_id"
users ||--o{ audit_logs : "user_id"
+ contents ||--o{ comments : "content_id"
+ users ||--o{ comments : "user_id"
+ comments ||--o{ comments : "parent_id"
+ comments ||--o{ comment_likes : "comment_id"
+ users ||--o{ comment_likes : "user_id"
+ conversations ||--o{ conversation_participants : "conversation_id"
+ users ||--o{ conversation_participants : "user_id"
+ conversations ||--o{ messages : "conversation_id"
+ users ||--o{ messages : "sender_id"
```
### Physique (MPD)
@@ -278,6 +340,7 @@ erDiagram
#### Sécurité et Chiffrement
- **Chiffrement PGP (Native)** : Les colonnes `email` et `two_factor_secret` sont stockées au format `bytea` et chiffrées/déchiffrées via les fonctions `pgp_sym_encrypt` et `pgp_sym_decrypt` de PostgreSQL (via l'extension `pgcrypto`).
+- **Cryptographie Post-Quantique** : Utilisation de la bibliothèque `@noble/post-quantum` pour anticiper les futures menaces cryptographiques.
- **Hachage aveugle (Blind Indexing)** : La colonne `email_hash` stocke un hash (SHA-256) de l'email pour permettre les recherches d'unicité et les recherches rapides sans déchiffrer la donnée.
#### Index et Optimisations
diff --git a/documentation/content/docs/deployment.mdx b/documentation/content/docs/deployment.mdx
index ab9099a..89b20e9 100644
--- a/documentation/content/docs/deployment.mdx
+++ b/documentation/content/docs/deployment.mdx
@@ -12,10 +12,10 @@ Un conteneur **Caddy** est utilisé en tant que reverse proxy pour fournir le TL
### Pré-requis Système
-
-
+
+
-
+
### Procédure de Déploiement
diff --git a/documentation/content/docs/features.mdx b/documentation/content/docs/features.mdx
index df49bdd..ba2cdb7 100644
--- a/documentation/content/docs/features.mdx
+++ b/documentation/content/docs/features.mdx
@@ -10,7 +10,7 @@ Le projet Memegoat intègre un ensemble de fonctionnalités avancées pour garan
## 🏗️ Infrastructure & Médias
### 📤 Publication & Traitement
-Le coeur de la plateforme permet la publication sécurisée de mèmes et de GIFs avec un pipeline de traitement complet :
+Le coeur de la plateforme permet la publication sécurisée de mèmes et de GIFs avec un pipeline de traitement complet (voir le [Flux de Publication](/docs/flows#-publication-de-contenu-pipeline-médía)) :
@@ -64,6 +64,11 @@ Un système complet de gestion de profil permet aux utilisateurs de :
- Configurer la **Double Authentification (2FA)**.
- Consulter leurs sessions actives et révoquer des accès.
+### 💬 Interaction & Communauté
+Memegoat favorise l'interaction entre les utilisateurs via plusieurs fonctionnalités sociales :
+- **Système de Commentaires** : Les utilisateurs peuvent commenter les mèmes, répondre à d'autres commentaires et aimer les contributions.
+- **Messagerie Privée** : Un système de messagerie sécurisé permettant des conversations directes entre utilisateurs, avec gestion des conversations et compteurs de messages non lus.
+
Toutes les données sensibles du profil sont protégées par **chiffrement PGP** au repos.
diff --git a/documentation/content/docs/flows.mdx b/documentation/content/docs/flows.mdx
new file mode 100644
index 0000000..ed6b1fe
--- /dev/null
+++ b/documentation/content/docs/flows.mdx
@@ -0,0 +1,177 @@
+---
+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
+```
diff --git a/documentation/content/docs/index.mdx b/documentation/content/docs/index.mdx
index 1c0b9bd..396b4a4 100644
--- a/documentation/content/docs/index.mdx
+++ b/documentation/content/docs/index.mdx
@@ -18,10 +18,11 @@ graph TD
User([Utilisateur])
Caddy[Reverse Proxy: Caddy]
Frontend[Frontend: Next.js]
- Backend[Backend: NestJS]
+ Backend[Backend: NestJS 11]
DB[(Database: PostgreSQL)]
Storage[Storage: S3/MinIO]
Cache[(Cache: Redis)]
+ AV[Antivirus: ClamAV]
Monitoring[Monitoring: Sentry]
User <--> Caddy
@@ -30,6 +31,7 @@ graph TD
Backend <--> DB
Backend <--> Storage
Backend <--> Cache
+ Backend <--> AV
Backend --> Monitoring
```
@@ -43,6 +45,11 @@ Explorez les sections clés pour approfondir vos connaissances techniques :
href="/docs/features"
description="Détails des capacités techniques et du pipeline média haute performance."
/>
+
diff --git a/documentation/content/docs/stack.mdx b/documentation/content/docs/stack.mdx
index 98008e8..f539540 100644
--- a/documentation/content/docs/stack.mdx
+++ b/documentation/content/docs/stack.mdx
@@ -17,9 +17,9 @@ description: Technologies utilisées dans le projet Memegoat
### Backend
-
+
-
+
@@ -28,8 +28,9 @@ description: Technologies utilisées dans le projet Memegoat
-
-
+
+
+