docs: restructure and enhance project dossier

- Consolidated and reordered headings for clarity and coherence.
- Updated content under functional and non-functional specifications for better readability.
- Improved sections on security, observability, and cryptography.
- Added new subsections on Green IT, accessibility, and regulatory compliance (RGPD).
- Optimized technical glossary for precision and expanded explanations.
This commit is contained in:
Mathis HERRIOT
2026-01-27 13:22:20 +01:00
parent 89587d6abc
commit bcbc93d6a3

View File

@@ -1,126 +1,82 @@
# Sommaire # Sommaire
1. [Introduction au projet](#1-introduction-au-projet) 1. [Introduction au projet](#1-introduction-au-projet)
- [Objectifs principaux](#objectifs-principaux-)
2. [Liste des compétences couvertes par le projet](#2-liste-des-compétences-couvertes-par-le-projet) 2. [Liste des compétences couvertes par le projet](#2-liste-des-compétences-couvertes-par-le-projet)
3. [Cahier des charges](#3-cahier-des-charges) 3. [Cahier des charges](#3-cahier-des-charges)
3.1 [Spécifications fonctionnelles](#31-spécifications-fonctionnelles) 3.1 [Spécifications fonctionnelles](#31-spécifications-fonctionnelles)
- [Gestion des utilisateurs et authentification (MFA, Sessions)](#gestion-des-utilisateurs-et-authentification-mfa-sessions) - [Gestion des utilisateurs et authentification](#gestion-des-utilisateurs-et-authentification-mfa-sessions)
- [Gestion et partage de contenus (Memes & GIFs)](#gestion-et-partage-de-contenus-memes--gifs) - [Gestion et partage de contenus](#gestion-et-partage-de-contenus-memes--gifs)
- [Sécurisation avancée (Cryptographie PGP & Post-Quantique)](#sécurisation-avancée-cryptographie-pgp--post-quantique) - [Sécurisation avancée](#sécurisation-avancée-cryptographie-pgp--post-quantique)
- [Panneau dAdministration et Modération](#panneau-dadministration-et-modération) - [Panneau dAdministration et Modération](#panneau-dadministration-et-modération)
- [Système de recherche par catégories et tags](#système-de-recherche-par-catégories-et-tags) - [Système de recherche par catégories et tags](#système-de-recherche-par-catégories-et-tags)
3.2 [Spécifications non fonctionnelles](#32-spécifications-non-fonctionnelles) 3.2 [Spécifications non fonctionnelles](#32-spécifications-non-fonctionnelles)
- [Performance & Réactivité (Redis, Caching)](#performance--réactivité-redis-caching) - [Performance & Réactivité](#performance--réactivité-redis-caching)
- [Sécurité Applicative (Helmet, Clamscan, Sentry)](#sécurité-applicative-helmet-clamscan-sentry) - [Observabilité et Stabilité](#observabilité-et-stabilité-sentry-throttler)
- [Scalabilité (Stockage S3/Minio)](#scalabilité-stockage-s3minio) - [Scalabilité](#scalabilité-stockage-s3minio)
- [Expérience utilisateur (UX)](#expérience-utilisateur-ux) - [Expérience utilisateur (UX)](#expérience-utilisateur-ux)
- [SEO (Search Engine Optimization)](#seo-search-engine-optimization) - [SEO (Search Engine Optimization)](#seo-search-engine-optimization)
- [Accessibilité (A11Y)](#accessibilité-a11y) - [Accessibilité (A11Y)](#accessibilité-a11y)
- [Maintenance et Extensibilité](#maintenance-et-extensibilité) - [Maintenance et Extensibilité](#maintenance-et-extensibilité)
- [Tests automatisés](#tests-automatisés) - [Tests automatisés](#tests-automatisés)
3.3 [Charte graphique](#33-charte-graphique) 3.3 [Charte graphique](#33-charte-graphique)
- [Couleurs](#couleurs) - [Couleurs](#couleurs)
- [Police décriture](#police-décriture) - [Police décriture](#police-décriture)
- [Logotype et image de marque](#logotype-et-image-de-marque) - [Logotype et image de marque](#logotype-et-image-de-marque)
3.4 [Spécifications de linfrastructure](#34-spécifications-de-linfrastructure-docker-postgresql-redis-minio) 3.4 [Spécifications de linfrastructure](#34-spécifications-de-linfrastructure-docker-postgresql-redis-minio)
4. [Réalisations](#4-réalisations) 4. [Réalisations](#4-réalisations)
4.1 [Organisation des tâches](#41-organisation-des-tâches) 4.1 [Organisation des tâches](#41-organisation-des-tâches)
- [Gestion de projet et suivi des tâches](#gestion-de-projet-et-suivi-des-tâches)
- [Gestion des versions](#gestion-des-versions-versioning)
- [Environnement de développement et Monorepo](#environnement-de-développement-et-monorepo)
- [Pipeline CI/CD](#pipeline-cicd-gitea-actions)
4.2 [Backend](#42-backend) 4.2 [Backend](#42-backend)
- [Architecture du backend (NestJS)](#architecture-du-backend-nestjs) - [Architecture du backend (NestJS)](#architecture-du-backend-nestjs)
- [Controller](#controller) - [B.1 - Installation et configuration](#b1---installation-et-configuration-de-lenvironnement)
- [Service](#service) - [B.2 - Modélisation & Base de données](#b2---modélisation--base-de-données-drizzle-orm-postgresql)
- [Module](#module) - [B.3 - Composant daccès aux données](#b3---composant-daccès-aux-données-drizzle-orm)
- [Middleware](#middleware) - [B.4 - Composants métier](#b4---composants-métier)
- [Guard](#guard) - [B.5 - Qualité et Tests](#b5---qualité-et-tests)
- [Data Transfer Object (DTO)](#data-transfer-object-dto) - [Sécurité & Cryptographie](#sécurité--cryptographie)
- [Veille technologique et de sécurité](#veille-technologique-et-de-sécurité)
- [B.1 - Installation et configuration de lenvironnement](#b1---installation-et-configuration-de-lenvironnement)
- [B.2 - Modélisation & Base de données (Drizzle ORM, PostgreSQL)](#b2---modélisation--base-de-données-drizzle-orm-postgresql)
- [Table Users](#table-users)
- [Table Contents (Memes & GIFs)](#table-contents-memes--gifs)
- [Table Categories & Tags](#table-categories--tags)
- [Table Favorites](#table-favorites)
- [Table Audit Logs & Reports](#table-audit-logs--reports)
- [Table Sessions & API Keys](#table-sessions--api-keys)
- [Table RBAC (Rôles & Permissions)](#table-rbac-rôles--permissions)
- [Table PGP (Chiffrement symétrique)](#table-pgp-chiffrement-symétrique)
- [Migration & Seeding](#migration--seeding)
- [B.3 - Composant daccès aux données (Drizzle ORM)](#b3---composant-daccès-aux-données-drizzle-orm)
- [Utilisation de Drizzle dans un Service Métier](#utilisation-de-drizzle-dans-un-service-métier)
- [Sécurité et Prévention des Injections SQL](#sécurité-et-prévention-des-injections-sql)
- [Gestion des Erreurs et Optimisation des Requêtes](#gestion-des-erreurs-et-optimisation-des-requêtes)
- [B.4 - Composants métier](#b4---composants-métier)
- [Gestion des médias (S3/Minio, Sharp, FFmpeg)](#gestion-des-médias-s3minio-sharp-ffmpeg)
- [Cycle de vie d'un contenu (Upload, Validation, Modération)](#cycle-de-vie-dun-contenu-upload-validation-modération)
- [Règles Métier et Avantages de Drizzle ORM](#règles-métier-et-avantages-de-drizzle-orm)
- [B.5 - Qualité et Tests](#b5---qualité-et-tests)
- [Tests unitaires (Jest)](#tests-unitaires-jest)
- [Assurance de Qualité et Détection Précoce des Bugs](#assurance-de-qualité-et-détection-précoce-des-bugs)
- [Maintenabilité du Code et Documentation](#maintenabilité-du-code-et-documentation)
- [Sécurité & Cryptographie](#sécurité--cryptographie)
- [JWT (JSON Web Token) & Sessions sécurisées](#jwt-json-web-token--sessions-sécurisées)
- [Hashing avec Argon2id](#hashing-avec-argon2id)
- [Data Transfer Object (DTO) & Validation (Zod/Class-validator)](#data-transfer-object-dto--validation-zodclass-validator)
- [Bibliothèque Helmet](#bibliothèque-helmet)
- [Content Security Policy (CSP)](#content-security-policy-csp)
- [X-Frame-Options](#x-frame-options)
- [Strict-Transport-Security (HSTS)](#strict-transport-security-hsts)
- [Referrer-Policy](#referrer-policy)
- [Permitted-Cross-Domain-Policies](#permitted-cross-domain-policies)
- [COEP, COOP & CORP](#coep-coop--corp)
- [CORS (Cross-Origin Resource Sharing)](#cors-cross-origin-resource-sharing)
- [SSL/TLS et Chiffrement des flux](#ssltls-et-chiffrement-des-flux)
- [Cryptographie Post-Quantique (Module ML-KEM / Kyber768)](#cryptographie-post-quantique-module-ml-kem--kyber768)
- [Chiffrement des données au repos (PGP/pgcrypto)](#chiffrement-des-données-au-repos-pgppgcrypto)
- [Antivirus applicatif (Intégration Clamscan)](#antivirus-applicatif-intégration-clamscan)
- [Veille technologique et de sécurité](#veille-technologique-et-de-sécurité)
- [OWASP Top Ten : Priorité à la sécurité applicative](#owasp-top-ten--priorité-à-la-sécurité-applicative)
- [Veille sur la sécurité Post-Quantique](#veille-sur-la-sécurité-post-quantique)
- [CERT-FR (Veille gouvernementale)](#cert-fr-veille-gouvernementale)
4.3 [Maquettage](#43-maquettage) 4.3 [Maquettage](#43-maquettage)
- [Choix de l'outil](#choix-de-loutil--pourquoi-penpot-)
- [Workflow de Design](#workflow-de-design)
4.4 [Frontend](#44-frontend) 4.4 [Frontend](#44-frontend)
- [F.1 - Stack technique (Next.js 16, React 19, Tailwind CSS 4)](#f1---stack-technique-nextjs-16-react-19-tailwind-css-4) - [F.1 - Stack technique](#f1---stack-technique-nextjs-16-react-19-tailwind-css-4)
- [F.2 - Architecture et Interfaces](#f2---architecture-et-interfaces)
- [F.2 - Architecture et Interfaces](#f2---architecture-et-interfaces) - [F.3 - Interface dynamique](#f3---interface-dynamique)
- [Approche mobile-first](#approche-mobile-first)
- [Composants UI (Radix UI, Shadcn UI)](#composants-ui-radix-ui-shadcn-ui)
- [F.3 - Interface dynamique](#f3---interface-dynamique)
- [Explorateur de contenus (Grilles, Filtres)](#explorateur-de-contenus-grilles-filtres)
- [Gestion du profil et des favoris](#gestion-du-profil-et-des-favoris)
- [Upload de fichiers et prévisualisation interactive](#upload-de-fichiers-et-prévisualisation-interactive)
- [SEO & Accessibilité](#seo--accessibilité)
- [Veille technologique frontend (React 19 & Next.js App Router)](#veille-technologique-frontend-react-19--nextjs-app-router)
4.5 [Déploiement et Infrastructure](#45-déploiement-et-infrastructure) 4.5 [Déploiement et Infrastructure](#45-déploiement-et-infrastructure)
- [Conteneurisation avec Docker et Docker Compose](#conteneurisation-avec-docker-et-docker-compose) - [Conteneurisation avec Docker](#conteneurisation-avec-docker-et-docker-compose)
- [Orchestration des services (PostgreSQL, Redis, Minio)](#orchestration-des-services-postgresql-redis-minio) - [Orchestration des services](#orchestration-des-services-postgresql-redis-minio)
5. [Conclusion](#5-conclusion) 4.6 [Écoconception et Accessibilité](#46-écoconception-green-it-et-accessibilité)
- [Remerciements](#remerciements) - [Stratégie d'Écoconception](#stratégie-décoconception)
- [Accessibilité Numérique (RGAA)](#accessibilité-numérique-rgaa)
6. [Annexes](#6-annexes) 5. [Respect de la réglementation (RGPD)](#5-respect-de-la-réglementation-rgpd)
- [Annexe 1 - Schéma de classe POO du backend](#annexe-1---schéma-de-classe-poo-du-backend) - [Registre des traitements](#registre-des-traitements)
- [Annexe 2 - Sources et ressources](#annexe-2---sources-et-ressources) - [Droits des personnes](#droits-des-personnes)
- [Annexe 3 - Glossaire technique](#annexe-3---glossaire-technique) - [Sécurité par défaut](#sécurité-par-défaut-privacy-by-design)
- [Annexe 4 - Licences et bibliothèques](#annexe-4---licences-et-bibliothèques)
6. [Conclusion](#6-conclusion)
- [Remerciements](#remerciements)
7. [Annexes](#7-annexes)
- [Annexe 1 - Schéma de classe](#annexe-1---schéma-de-classe-poo-du-backend)
- [Annexe 2 - Sources et ressources](#annexe-2---sources-et-ressources)
- [Annexe 3 - Glossaire technique](#annexe-3---glossaire-technique)
- [Annexe 4 - Licences et bibliothèques](#annexe-4---licences-et-bibliothèques)
--- ---
@@ -179,8 +135,8 @@ La découverte de contenus est propulsée par un moteur de recherche multicritè
### Performance & Réactivité (Redis, Caching) ### Performance & Réactivité (Redis, Caching)
Pour offrir une expérience fluide, Memegoat utilise **Redis** comme couche de cache pour les données hautement sollicitées. Le traitement des médias est optimisé : les images sont converties au format WebP/AVIF via **Sharp**, et les GIFs/vidéos sont transcodés par **FFmpeg**, réduisant le poids des fichiers sans compromettre la qualité. Pour offrir une expérience fluide, Memegoat utilise **Redis** comme couche de cache pour les données hautement sollicitées. Le traitement des médias est optimisé : les images sont converties au format WebP/AVIF via **Sharp**, et les GIFs/vidéos sont transcodés par **FFmpeg**, réduisant le poids des fichiers sans compromettre la qualité.
### Sécurité Applicative (Helmet, Clamscan, Sentry) ### Observabilité et Stabilité (Sentry, Throttler)
La protection est proactive : l'en-tête **Helmet** prévient les attaques XSS et Clickjacking. Chaque fichier téléversé est analysé en temps réel par un moteur antivirus (**Clamscan**) avant stockage. La stabilité est monitorée par **Sentry**, tandis que les journaux d'audit tracent les actions sensibles. La surveillance de l'application en temps réel est assurée par **Sentry**. L'intégration couvre à la fois le backend (erreurs système, performance des requêtes) et le frontend (erreurs d'interface, Core Web Vitals). L'utilisation du **Profiling Node.js** permet d'identifier précisément les goulots d'étranglement. Pour prévenir les abus et les attaques par déni de service (DoS), un système de limitation de débit (**Rate Limiting**) est implémenté via le module **Throttler**, protégeant ainsi la disponibilité des ressources.
### Scalabilité (Stockage S3/Minio) ### Scalabilité (Stockage S3/Minio)
L'architecture sépare les serveurs d'application du stockage des actifs numériques via le protocole **S3** (MinIO). Cette approche facilite la scalabilité horizontale et permet de servir les médias via un réseau de diffusion de contenu (CDN). L'architecture sépare les serveurs d'application du stockage des actifs numériques via le protocole **S3** (MinIO). Cette approche facilite la scalabilité horizontale et permet de servir les médias via un réseau de diffusion de contenu (CDN).
@@ -206,7 +162,7 @@ La robustesse repose sur une stratégie de tests rigoureuse avec **Jest**. Les s
La palette s'articule autour d'une dominante sombre (**Zinc/Black**) pour le confort visuel, avec des accents de violet électrique et d'indigo pour les éléments d'interaction, reflétant l'aspect moderne et communautaire. La palette s'articule autour d'une dominante sombre (**Zinc/Black**) pour le confort visuel, avec des accents de violet électrique et d'indigo pour les éléments d'interaction, reflétant l'aspect moderne et communautaire.
### Police décriture ### Police décriture
Le choix s'est porté sur **Geist Sans** (Vercel) pour sa lisibilité exceptionnelle, complétée par une police mono-espacée pour les éléments techniques. Le choix s'est porté sur **Ubuntu Sans** pour sa lisibilité exceptionnelle et son aspect moderne, complétée par **Ubuntu Mono** pour les éléments techniques et le code, assurant une cohérence visuelle sur tous les supports.
### Logotype et image de marque ### Logotype et image de marque
Le logotype représente une chèvre stylisée, symbole du **"G.O.A.T"**, incarnant l'ambition de devenir la référence ultime des mèmes tout en inspirant confiance par sa rigueur technique. Le logotype représente une chèvre stylisée, symbole du **"G.O.A.T"**, incarnant l'ambition de devenir la référence ultime des mèmes tout en inspirant confiance par sa rigueur technique.
@@ -231,8 +187,14 @@ Le pilotage du projet a été centralisé sur la plateforme **Gitea** (alternati
### Gestion des versions (Versioning) ### Gestion des versions (Versioning)
Le code source est géré via **Git**, en suivant une version simplifiée du modèle **GitFlow**. Cette organisation permet de séparer clairement le code en cours de développement (branche `dev`) de la version stable destinée à la production (branche `main`). Chaque nouvelle fonctionnalité est développée sur une branche isolée avant d'être intégrée après une phase de tests, garantissant ainsi l'intégrité de la branche principale. Le code source est géré via **Git**, en suivant une version simplifiée du modèle **GitFlow**. Cette organisation permet de séparer clairement le code en cours de développement (branche `dev`) de la version stable destinée à la production (branche `main`). Chaque nouvelle fonctionnalité est développée sur une branche isolée avant d'être intégrée après une phase de tests, garantissant ainsi l'intégrité de la branche principale.
### Environnement de développement ### Environnement de développement et Monorepo
Pour assurer une cohérence parfaite entre les différentes étapes du développement, l'ensemble de l'environnement a été conteneurisé avec **Docker**. Cela a permis de s'affranchir des problématiques de configuration locale ("ça marche sur ma machine") en fournissant des services standardisés (PostgreSQL, Redis, MinIO) accessibles instantanément à chaque membre du projet ou lors du déploiement. Pour assurer une cohérence parfaite et faciliter le partage de code (notamment les types TypeScript), le projet est structuré en **Monorepo** utilisant les **workspaces pnpm**. Cette architecture permet de gérer le frontend, le backend et la documentation dans un seul dépôt tout en maintenant une isolation stricte des dépendances. L'ensemble de l'environnement est conteneurisé avec **Docker**, garantissant des services standardisés (PostgreSQL, Redis, MinIO) accessibles instantanément.
### Pipeline CI/CD (Gitea Actions)
L'automatisation est au cœur du processus de qualité. Un pipeline **CI/CD** a été mis en place via **Gitea Actions (Forgejo)**. À chaque tag de version :
1. **Validation** : Linting (Biome) et tests automatisés (Jest) sont exécutés sur chaque composant.
2. **Build** : Les images Docker sont construites pour valider la compilation.
3. **Déploiement** : L'application est automatiquement déployée sur le serveur de production via Docker Compose, assurant une livraison continue et fiable.
## 4.2 Backend ## 4.2 Backend
@@ -252,7 +214,7 @@ Les services encapsulent l'intégralité de la logique métier. Ils sont inject
Le module est la brique de base de NestJS. Il permet d'organiser le code en domaines logiques et de gérer les dépendances. Memegoat utilise un `AppModule` racine qui orchestre les modules transverses (Database, Config, Cache) et les modules métier. Le module est la brique de base de NestJS. Il permet d'organiser le code en domaines logiques et de gérer les dépendances. Memegoat utilise un `AppModule` racine qui orchestre les modules transverses (Database, Config, Cache) et les modules métier.
#### Middleware #### Middleware
Les middlewares sont utilisés pour des traitements transverses sur les requêtes entrantes, comme le logging, la compression des réponses ou la gestion des en-têtes de sécurité via Helmet. Les middlewares sont utilisés pour des traitements transverses sur les requêtes entrantes. Memegoat utilise un middleware de logging (**HTTPLogger**) pour la traçabilité et un middleware de **détection de robots (Crawler Detection)** pour optimiser les ressources et sécuriser l'accès contre le scraping intensif.
#### Guard #### Guard
Les Guards sont responsables de l'autorisation. Ils déterminent si une requête donnée est autorisée à accéder à une route, en fonction des rôles de l'utilisateur (**RBAC**) ou de la validité de sa session (**JWT**). Les Guards sont responsables de l'autorisation. Ils déterminent si une requête donnée est autorisée à accéder à une route, en fonction des rôles de l'utilisateur (**RBAC**) ou de la validité de sa session (**JWT**).
@@ -330,7 +292,7 @@ Couverture des services critiques : cryptographie, authentification et validateu
Utilisation de **Biome**, un outil performant pour le linting et le formatage, garantissant un code homogène et sans erreurs. Utilisation de **Biome**, un outil performant pour le linting et le formatage, garantissant un code homogène et sans erreurs.
#### Maintenabilité du Code et Documentation #### Maintenabilité du Code et Documentation
Génération automatique de la documentation API via **Swagger (OpenAPI)**, offrant une interface interactive pour tester les endpoints. La documentation technique est maintenue via des commentaires standardisés et une architecture claire. L'utilisation de **TypeScript** assure une auto-documentation des types et des interfaces à travers l'ensemble du monorepo.
### Sécurité & Cryptographie ### Sécurité & Cryptographie
@@ -464,15 +426,77 @@ Je tiens à remercier l'équipe pédagogique pour son accompagnement tout au lon
### Annexe 3 - Glossaire technique ### Annexe 3 - Glossaire technique
* **A11Y (Accessibilité) :** Pratiques visant à rendre les services numériques utilisables par tous. * **A11Y (Accessibilité) :**
* **API (Interface de Programmation d'Application) :** Pont de communication entre frontend et backend. * **Définition :** Contraction du mot "Accessibility" (11 lettres entre le A et le Y).
* **Argon2id :** Algorithme de hachage de mots de passe de pointe. * **Explication :** Désigne l'ensemble des pratiques visant à rendre les services numériques utilisables par tous, y compris les personnes en situation de handicap (visuel, moteur, auditif, etc.). Dans Memegoat, cela se traduit par l'utilisation de composants sémantiques et le respect des normes WCAG.
* **Docker :** Technologie de conteneurisation pour isoler l'application.
* **JWT (JSON Web Token) :** Jeton sécurisé pour l'authentification des utilisateurs. * **API (Interface de Programmation d'Application) :**
* **ML-KEM (Kyber) :** Algorithme de cryptographie post-quantique. * **Définition :** Ensemble de règles et de protocoles permettant à deux logiciels de communiquer entre eux.
* **ORM (Drizzle) :** Outil de liaison entre le code et la base de données. * **Explication :** Dans ce projet, l'API NestJS sert de pont entre le frontend (Next.js) et les données stockées en base. Elle expose des points d'accès (endpoints) sécurisés pour récupérer ou modifier les mèmes et les profils utilisateurs.
* **PGP :** Standard de chiffrement asymétrique pour les données sensibles.
* **S3 (MinIO) :** Protocole de stockage de fichiers volumineux. * **Argon2id :**
* **Définition :** Algorithme de hachage de mots de passe, vainqueur de la Password Hashing Competition.
* **Explication :** Contrairement aux méthodes anciennes (MD5, SHA1), Argon2id est conçu pour être extrêmement résistant aux attaques par force brute et par GPU, en utilisant des paramètres de mémoire et de temps configurables. C'est le standard recommandé par l'ANSSI.
* **Biome :**
* **Définition :** Chaîne d'outils (toolchain) ultra-rapide pour le web.
* **Explication :** Il remplace ESLint et Prettier pour assurer le formatage et le linting du code. Son utilisation garantit une base de code propre, homogène et performante, tout en accélérant le workflow de développement.
* **CSP (Content Security Policy) :**
* **Définition :** Couche de sécurité supplémentaire qui aide à détecter et atténuer certains types d'attaques, comme le XSS.
* **Explication :** En définissant quelles sources de contenu (scripts, images) sont autorisées, Memegoat empêche l'exécution de code malveillant injecté par un tiers.
* **Docker :**
* **Définition :** Plateforme permettant de lancer des applications dans des conteneurs isolés.
* **Explication :** Docker permet d'empaqueter l'application avec toutes ses dépendances. Cela garantit que le projet fonctionnera de la même manière sur l'ordinateur du développeur, sur le serveur de test et en production.
* **Drizzle ORM :**
* **Définition :** "Object-Relational Mapping" moderne et léger pour TypeScript.
* **Explication :** Il permet d'interagir avec la base de données PostgreSQL en utilisant du code TypeScript typé. Contrairement à d'autres ORM plus lourds, Drizzle reste très proche du SQL natif, offrant ainsi de meilleures performances et une plus grande transparence.
* **JWT (JSON Web Token) :**
* **Définition :** Standard ouvert pour la création de jetons d'accès.
* **Explication :** Utilisé pour l'authentification, il permet de vérifier l'identité d'un utilisateur sans avoir à interroger la base de données à chaque requête. Memegoat utilise des jetons signés avec une rotation des "Refresh Tokens" pour une sécurité accrue.
* **ML-KEM (Kyber) :**
* **Définition :** Algorithme de mécanisme d'établissement de clé (KEM) résistant aux ordinateurs quantiques.
* **Explication :** Intégré de manière expérimentale, cet algorithme assure que les échanges de clés restent sécurisés même si un attaquant dispose d'un ordinateur quantique futur capable de casser les chiffrements traditionnels (RSA, ECC).
* **MFA (Multi-Factor Authentication) :**
* **Définition :** Méthode d'authentification nécessitant au moins deux preuves d'identité.
* **Explication :** Dans Memegoat, l'utilisateur doit fournir son mot de passe ET un code temporaire (TOTP) généré par une application mobile, doublant ainsi la protection du compte.
* **PGP (Pretty Good Privacy) :**
* **Définition :** Programme de chiffrement et de déchiffrement de données asymétrique.
* **Explication :** Utilisé pour chiffrer les données sensibles (comme les emails) directement dans la base de données. Même en cas de fuite de la base, les données restent illisibles sans la clé privée correspondante.
* **RBAC (Role-Based Access Control) :**
* **Définition :** Système de gestion des accès basé sur des rôles.
* **Explication :** Permet de définir précisément qui peut faire quoi (ex: un utilisateur peut poster, un modérateur peut supprimer n'importe quel post, un administrateur peut gérer les comptes).
* **S3 (MinIO) :**
* **Définition :** Protocole de stockage d'objets (Simple Storage Service).
* **Explication :** MinIO est une alternative open-source compatible avec Amazon S3. Il est utilisé pour stocker les fichiers médias (mèmes, GIFs) de manière performante et scalable, séparément de la base de données.
* **SSR / SSG (Next.js) :**
* **Définition :** Server-Side Rendering (rendu côté serveur) et Static Site Generation (génération de site statique).
* **Explication :** Ces techniques permettent de pré-rendre les pages HTML. Cela améliore considérablement le SEO et la vitesse de chargement initiale pour l'utilisateur.
* **NestJS :**
* **Définition :** Framework Node.js progressif pour la construction d'applications côté serveur efficaces et évolutives.
* **Explication :** Utilisé pour le backend de Memegoat, il offre une architecture modulaire et un support natif de TypeScript, ce qui facilite grandement la maintenance et le test des différents services (authentification, gestion des médias, etc.).
* **Next.js :**
* **Définition :** Framework React pour le développement web.
* **Explication :** Choisi pour le frontend, il permet de bénéficier du rendu hybride (SSR/SSG), optimisant ainsi les performances et le référencement naturel (SEO) de la plateforme.
* **TypeScript :**
* **Définition :** Sur-ensemble typé de JavaScript.
* **Explication :** Utilisé sur l'ensemble du projet (frontend et backend), il permet de détecter les erreurs dès la phase de développement grâce à un typage statique rigoureux, améliorant ainsi la robustesse globale du code.
* **Zod :**
* **Définition :** Bibliothèque de déclaration et de validation de schéma TypeScript.
* **Explication :** Elle est utilisée pour valider toutes les données entrant dans l'application (formulaires, requêtes API). Si les données ne correspondent pas au schéma attendu, elles sont rejetées immédiatement, évitant ainsi des erreurs ou des failles de sécurité.
### Annexe 4 - Licences et bibliothèques ### Annexe 4 - Licences et bibliothèques
Liste des dépendances Open-Source utilisées (voir `package.json`). Liste des dépendances Open-Source utilisées (voir `package.json`).