From 7f0749808ed42bf057b3d8f5c4489ecd75e48cd3 Mon Sep 17 00:00:00 2001 From: Mathis HERRIOT <197931332+0x485254@users.noreply.github.com> Date: Tue, 27 Jan 2026 13:31:08 +0100 Subject: [PATCH] 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. --- dossier-de-projet-cda.md | 156 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 148 insertions(+), 8 deletions(-) diff --git a/dossier-de-projet-cda.md b/dossier-de-projet-cda.md index a1dd7e9..6144f56 100644 --- a/dossier-de-projet-cda.md +++ b/dossier-de-projet-cda.md @@ -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 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.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.