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:
@@ -43,7 +43,8 @@
|
|||||||
- [B.2 - Modélisation & Base de données](#b2---modélisation--base-de-données-drizzle-orm-postgresql)
|
- [B.2 - Modélisation & Base de données](#b2---modélisation--base-de-données-drizzle-orm-postgresql)
|
||||||
- [B.3 - Composant d’accès aux données](#b3---composant-daccès-aux-données-drizzle-orm)
|
- [B.3 - Composant d’accès aux données](#b3---composant-daccès-aux-données-drizzle-orm)
|
||||||
- [B.4 - Composants métier](#b4---composants-métier)
|
- [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)
|
- [Sécurité & Cryptographie](#sécurité--cryptographie)
|
||||||
- [Veille technologique et de sécurité](#veille-technologique-et-de-sécurité)
|
- [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
|
### 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)
|
#### Gestion des médias (S3/Minio, Sharp, FFmpeg)
|
||||||
Le pipeline de traitement inclut :
|
Le pipeline de traitement inclut :
|
||||||
1. **Réception sécurisée** en mémoire.
|
1. **Réception sécurisée** en mémoire (Stream-based processing).
|
||||||
2. **Scan antivirus** systématique (ClamAV).
|
2. **Scan antivirus** systématique (ClamAV) avant toute écriture disque.
|
||||||
3. **Optimisation** : Images via **Sharp** (WebP), GIFs/Vidéos via **FFmpeg**.
|
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).
|
4. **Stockage persistant** sur MinIO (S3) avec URLs signées pour la sécurité.
|
||||||
|
|
||||||
#### Cycle de vie d'un contenu (Upload, Validation, Modération)
|
#### 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
|
#### 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)
|
#### Tests unitaires (Jest)
|
||||||
Couverture des services critiques : cryptographie, authentification et validateurs métier.
|
Couverture des services critiques : cryptographie, authentification et validateurs métier.
|
||||||
|
|||||||
Reference in New Issue
Block a user