# Plan d'Implémentation du Backend Ce document détaille le plan d'implémentation du backend pour l'application de création de groupes, basé sur les spécifications du cahier des charges. ## 1. Structure des Dossiers ``` backend/ ├── src/ │ ├── main.ts # Point d'entrée de l'application │ ├── app.module.ts # Module principal │ ├── config/ # Configuration de l'application │ │ ├── app.config.ts # Configuration générale │ │ ├── database.config.ts # Configuration de la base de données │ │ ├── auth.config.ts # Configuration de l'authentification │ │ └── env.validation.ts # Validation des variables d'environnement │ ├── common/ # Utilitaires partagés │ │ ├── decorators/ # Décorateurs personnalisés │ │ ├── filters/ # Filtres d'exception │ │ ├── guards/ # Guards d'authentification et d'autorisation │ │ ├── interceptors/ # Intercepteurs │ │ ├── pipes/ # Pipes de validation │ │ └── utils/ # Fonctions utilitaires │ ├── modules/ # Modules fonctionnels │ │ ├── auth/ # Module d'authentification │ │ │ ├── controllers/ # Contrôleurs d'authentification │ │ │ ├── services/ # Services d'authentification │ │ │ ├── guards/ # Guards spécifiques à l'authentification │ │ │ ├── strategies/ # Stratégies d'authentification (GitHub OAuth) │ │ │ └── auth.module.ts # Module d'authentification │ │ ├── users/ # Module de gestion des utilisateurs │ │ │ ├── controllers/ # Contrôleurs utilisateurs │ │ │ ├── services/ # Services utilisateurs │ │ │ ├── dto/ # Objets de transfert de données │ │ │ └── users.module.ts # Module utilisateurs │ │ ├── projects/ # Module de gestion des projets │ │ │ ├── controllers/ # Contrôleurs projets │ │ │ ├── services/ # Services projets │ │ │ ├── dto/ # Objets de transfert de données │ │ │ └── projects.module.ts # Module projets │ │ ├── persons/ # Module de gestion des personnes │ │ │ ├── controllers/ # Contrôleurs personnes │ │ │ ├── services/ # Services personnes │ │ │ ├── dto/ # Objets de transfert de données │ │ │ └── persons.module.ts # Module personnes │ │ ├── groups/ # Module de gestion des groupes │ │ │ ├── controllers/ # Contrôleurs groupes │ │ │ ├── services/ # Services groupes │ │ │ ├── dto/ # Objets de transfert de données │ │ │ └── groups.module.ts # Module groupes │ │ ├── tags/ # Module de gestion des tags │ │ │ ├── controllers/ # Contrôleurs tags │ │ │ ├── services/ # Services tags │ │ │ ├── dto/ # Objets de transfert de données │ │ │ └── tags.module.ts # Module tags │ │ └── websockets/ # Module de gestion des WebSockets │ │ ├── gateways/ # Gateways WebSocket │ │ ├── events/ # Définitions des événements │ │ └── websockets.module.ts # Module WebSockets │ └── database/ # Configuration de la base de données │ ├── migrations/ # Migrations de base de données │ ├── schema/ # Schéma de base de données (DrizzleORM) │ └── database.module.ts # Module de base de données ├── test/ # Tests │ ├── e2e/ # Tests end-to-end │ └── unit/ # Tests unitaires └── .env.example # Exemple de fichier d'environnement ``` ## 2. Dépendances à Ajouter ```bash # Dépendances principales pnpm add @nestjs/config @nestjs/passport passport passport-github2 @nestjs/jwt pnpm add @nestjs/websockets @nestjs/platform-socket.io socket.io pnpm add drizzle-orm pg pnpm add @node-rs/argon2 jose pnpm add class-validator class-transformer pnpm add zod zod-validation-error pnpm add uuid # Dépendances de développement pnpm add -D drizzle-kit pnpm add -D @types/passport-github2 @types/socket.io @types/pg @types/uuid ``` ## 3. Configuration de l'Environnement Créer un fichier `.env.example` avec les variables suivantes : ``` # Application PORT=3000 NODE_ENV=development API_PREFIX=api # Database DATABASE_URL=postgres://postgres:postgres@localhost:5432/groupmaker # Authentication GITHUB_CLIENT_ID=your_github_client_id GITHUB_CLIENT_SECRET=your_github_client_secret GITHUB_CALLBACK_URL=http://localhost:3000/api/auth/github/callback # JWT JWT_ACCESS_SECRET=your_access_token_secret JWT_REFRESH_SECRET=your_refresh_token_secret JWT_ACCESS_EXPIRATION=15m JWT_REFRESH_EXPIRATION=7d # CORS CORS_ORIGIN=http://localhost:3000 ``` ## 4. Étapes d'Implémentation ### 4.1 Configuration de Base 1. **Configuration de l'Application** - Mettre à jour `main.ts` pour inclure la configuration CORS, les préfixes d'API, et les pipes de validation globaux - Créer un module de configuration pour charger les variables d'environnement avec validation 2. **Configuration de la Base de Données** - Configurer DrizzleORM avec PostgreSQL - Définir le schéma de base de données selon le modèle de données spécifié - Mettre en place les migrations de base de données ### 4.2 Authentification et Autorisation 1. **Authentification GitHub OAuth** - Implémenter la stratégie d'authentification GitHub - Créer les endpoints d'authentification (login, callback, refresh, logout) - Mettre en place la gestion des JWT (génération, validation, rafraîchissement) 2. **Autorisation RBAC** - Implémenter les guards pour la vérification des rôles - Créer des décorateurs pour les rôles et les permissions - Mettre en place la logique de vérification des autorisations ### 4.3 Modules Fonctionnels 1. **Module Utilisateurs** - Implémenter les opérations CRUD pour les utilisateurs - Gérer les profils utilisateurs et les préférences - Implémenter la logique de consentement RGPD 2. **Module Projets** - Implémenter les opérations CRUD pour les projets - Gérer les relations avec les utilisateurs, les personnes et les groupes - Implémenter la logique de partage de projets 3. **Module Personnes** - Implémenter les opérations CRUD pour les personnes - Gérer les attributs des personnes (niveau technique, genre, âge, etc.) - Implémenter la logique d'association avec les tags 4. **Module Groupes** - Implémenter les opérations CRUD pour les groupes - Développer les algorithmes de création automatique de groupes équilibrés - Gérer les relations avec les personnes 5. **Module Tags** - Implémenter les opérations CRUD pour les tags - Gérer les types de tags (PROJECT, PERSON) - Implémenter la logique d'association avec les projets et les personnes ### 4.4 Communication en Temps Réel 1. **WebSockets avec SocketIO** - Configurer les gateways WebSocket - Implémenter les événements pour les mises à jour en temps réel - Gérer les salles pour les projets collaboratifs ### 4.5 Sécurité et Conformité RGPD 1. **Sécurité** - Implémenter le hachage des mots de passe avec @node-rs/argon2 - Mettre en place des protections contre les attaques courantes (CSRF, XSS, injections SQL) - Configurer le rate limiting pour prévenir les attaques par force brute 2. **Conformité RGPD** - Implémenter les fonctionnalités d'export des données personnelles - Mettre en place la logique de suppression de compte - Gérer les consentements utilisateurs et leur renouvellement ### 4.6 Tests et Documentation 1. **Tests** - Écrire des tests unitaires pour les services et les contrôleurs - Développer des tests e2e pour les API - Mettre en place des tests d'intégration pour les modules critiques 2. **Documentation** - Générer la documentation API avec Swagger - Documenter les endpoints, les modèles de données et les paramètres - Fournir des exemples d'utilisation des API ## 5. Calendrier d'Implémentation 1. **Semaine 1: Configuration et Base de Données** - Configuration de l'environnement - Mise en place de la base de données avec DrizzleORM - Définition du schéma et création des migrations 2. **Semaine 2: Authentification et Utilisateurs** - Implémentation de l'authentification GitHub OAuth - Développement du module utilisateurs - Mise en place de la gestion des JWT 3. **Semaine 3: Modules Principaux** - Développement des modules projets, personnes et groupes - Implémentation des opérations CRUD - Mise en place des relations entre entités 4. **Semaine 4: Fonctionnalités Avancées** - Implémentation des WebSockets pour la communication en temps réel - Développement des algorithmes de création de groupes - Mise en place des fonctionnalités de sécurité et de conformité RGPD 5. **Semaine 5: Tests et Finalisation** - Écriture des tests unitaires et e2e - Documentation de l'API - Optimisation des performances et correction des bugs