docs: expand project dossier with advanced CRUD flows and architecture details

- Added comprehensive sections on business workflows, CRUD operations, and security features.
- Enhanced documentation with detailed data validation, media handling, and lifecycle management.
- Incorporated diagrams for authentication, media upload, content moderation, and caching strategies.
- Reorganized and updated sections to align with newly introduced content and flow improvements.
This commit is contained in:
Mathis HERRIOT
2026-01-27 13:31:08 +01:00
parent bcbc93d6a3
commit 7f0749808e

View File

@@ -43,7 +43,8 @@
- [B.2 - Modélisation & Base de données](#b2---modélisation--base-de-données-drizzle-orm-postgresql)
- [B.3 - Composant daccès aux données](#b3---composant-daccès-aux-données-drizzle-orm)
- [B.4 - Composants métier](#b4---composants-métier)
- [B.5 - Qualité et Tests](#b5---qualité-et-tests)
- [B.5 - Flux métier et CRUD](#b5---flux-métier-et-crud)
- [B.6 - Qualité et Tests](#b6---qualité-et-tests)
- [Sécurité & Cryptographie](#sécurité--cryptographie)
- [Veille technologique et de sécurité](#veille-technologique-et-de-sécurité)
@@ -270,20 +271,159 @@ Le backend intègre une gestion centralisée des exceptions de base de données,
### B.4 - Composants métier
#### Validation des données (Zod & DTO)
Toutes les données entrantes (corps de requête, paramètres d'URL) sont validées à l'aide de schémas **Zod**. Ce choix garantit :
- Un typage strict partagé entre le frontend et le backend.
- L'élimination des données malformées avant qu'elles n'atteignent la logique métier.
- Une documentation automatique des interfaces.
#### Gestion des médias (S3/Minio, Sharp, FFmpeg)
Le pipeline de traitement inclut :
1. **Réception sécurisée** en mémoire.
2. **Scan antivirus** systématique (ClamAV).
3. **Optimisation** : Images via **Sharp** (WebP), GIFs/Vidéos via **FFmpeg**.
4. **Stockage persistant** sur MinIO (S3).
1. **Réception sécurisée** en mémoire (Stream-based processing).
2. **Scan antivirus** systématique (ClamAV) avant toute écriture disque.
3. **Optimisation** : Images via **Sharp** (WebP/AVIF), GIFs/Vidéos via **FFmpeg** pour un compromis idéal qualité/poids.
4. **Stockage persistant** sur MinIO (S3) avec URLs signées pour la sécurité.
#### Cycle de vie d'un contenu (Upload, Validation, Modération)
Encadrement strict : de l'upload au statut "actif" ou "suspendu" suite à un signalement, garantissant la qualité des contenus de la plateforme.
Encadrement strict : de l'upload au statut "actif" ou "suspendu" suite à un signalement. L'utilisation du **Soft Delete** garantit la conformité RGPD tout en permettant un audit en cas de litige.
#### Règles Métier et Avantages de Drizzle ORM
L'utilisation de Drizzle permet d'implémenter les contraintes métier (unicité, intégrité) de manière fluide et performante.
L'utilisation de Drizzle permet d'implémenter les contraintes métier (unicité, intégrité) de manière fluide. Les transactions sont utilisées pour garantir l'atomicité des opérations complexes (ex: upload média + insertion DB).
### B.5 - Qualité et Tests
### B.5 - Flux métier et CRUD
Cette section détaille les interactions dynamiques entre les composants du système pour les fonctionnalités clés.
#### 1. Inscription et Authentification
Le choix de **Argon2id** pour le hachage des mots de passe offre la meilleure résistance connue contre les attaques par force brute et par GPU/ASIC. L'authentification est sécurisée par des sessions **Iron Session** (basées sur des cookies HttpOnly chiffrés) et un support natif du **MFA (TOTP)**.
```mermaid
sequenceDiagram
participant U as Utilisateur
participant F as Frontend (Next.js)
participant B as Backend (NestJS)
participant D as Base de Données (PostgreSQL)
participant S as Session (Iron Session)
Note over U, S: Processus d'Inscription
U->>F: Saisie (username, email, password)
F->>B: POST /auth/register
B->>B: Hachage du mot de passe (Argon2id)
B->>B: Calcul du Blind Index (Email Hash)
B->>D: INSERT INTO users (Email chiffré PGP)
D-->>B: Confirmation
B-->>F: Compte créé avec succès
Note over U, S: Processus de Connexion
U->>F: Login/Password
F->>B: POST /auth/login
B->>D: SELECT user WHERE email_hash = ?
D-->>B: Données utilisateur (Password Haché)
B->>B: Vérification Argon2id
alt MFA Activé
B-->>F: 200 OK (Require MFA)
U->>F: Saisie du code TOTP
F->>B: POST /auth/verify-2fa
B->>B: Validation du secret chiffré PGP
end
B->>S: Création de la session chiffrée
S-->>F: Cookie Set-Cookie (HttpOnly, Secure)
F-->>U: Redirection vers le Dashboard
```
#### 2. Publication de Contenu (CRUD Create)
Le flux de publication privilégie la sécurité (scan antivirus) et la performance utilisateur (traitement asynchrone possible, bien qu'actuellement synchrone pour garantir la disponibilité immédiate).
```mermaid
sequenceDiagram
participant U as Utilisateur
participant F as Frontend
participant B as Backend
participant AV as ClamAV (Antivirus)
participant P as Processeur (Sharp/FFmpeg)
participant S3 as Stockage S3 (MinIO)
participant D as Base de Données
U->>F: Upload du média (Meme/GIF)
F->>B: POST /contents/upload (Multipart)
B->>B: Validation du type MIME & Taille
B->>AV: Scan binaire du fichier
AV-->>B: Résultat Clean
par Traitement d'optimisation
B->>P: Sharp (Resize & WebP)
P-->>B: Buffer optimisé
and Upload S3
B->>S3: Upload vers le bucket "memes"
S3-->>B: Key / ETag
end
B->>D: INSERT INTO contents (S3 Key, Metadata)
D-->>B: ID Contenu
B-->>F: 201 Created (Redirection vers le contenu)
```
#### 3. Système de Signalement et Modération
La modération est un flux métier critique. Nous utilisons un système de signalement par les utilisateurs qui alimente une file d'attente pour les modérateurs/administrateurs.
```mermaid
sequenceDiagram
participant U as Utilisateur
participant B as Backend
participant D as Base de Données
participant A as Admin/Modérateur
U->>B: POST /reports (ContenuID, Motif)
B->>D: INSERT INTO reports (Status: PENDING)
D-->>B: OK
Note over A, D: Interface de Modération
A->>B: GET /reports (Filter: PENDING)
B->>D: SELECT reports JOIN contents
D-->>B: Liste des signalements
B-->>A: Affichage du Dashboard Admin
A->>B: PATCH /reports/:id (Status: RESOLVED)
B->>D: UPDATE contents SET status = 'BLOCKED' (ou Soft Delete)
D-->>B: OK
B-->>A: Action confirmée
```
#### 4. Recherche et Exploration (CRUD Read)
L'optimisation des lectures est cruciale pour une plateforme de médias. Nous utilisons une stratégie de **mise en cache agressive** via Redis pour les flux publics (tendances, nouveautés) afin de réduire la charge sur la base de données PostgreSQL.
```mermaid
sequenceDiagram
participant U as Utilisateur
participant F as Frontend
participant B as Backend
participant R as Cache (Redis)
participant D as Base de Données
U->>F: Navigation vers "Explore"
F->>B: GET /contents/explore?sort=trend
B->>R: Recherche de la clé cache (URL hash)
alt Cache HIT (Données présentes)
R-->>B: Retourne le JSON mis en cache
else Cache MISS (Données absentes ou expirées)
B->>D: SELECT contents (filtres, pagination)
D-->>B: Résultats de la requête
B->>R: Stockage du résultat (SET with TTL)
end
B-->>F: Envoi du flux de données
F-->>U: Affichage fluide de la grille
```
#### 5. Suppression et Droit à l'oubli (CRUD Delete)
Conformément au RGPD, l'utilisateur dispose d'un droit à l'effacement. Pour concilier ce droit avec la nécessité de maintenir l'intégrité des données et de prévenir les abus, nous utilisons le **Soft Delete**.
- **Fonctionnement** : Une colonne `deleted_at` est mise à jour. Les requêtes de lecture standard ignorent ces enregistrements.
- **Action physique** : Les médias associés sur S3 peuvent être supprimés après un délai de rétention de sécurité, garantissant une suppression effective des fichiers volumineux.
### B.6 - Qualité et Tests
#### Tests unitaires (Jest)
Couverture des services critiques : cryptographie, authentification et validateurs métier.