brief-20/docs/implementation/BACKEND_IMPLEMENTATION_PLAN.md
Avnyr f6f0888bd7 docs: add comprehensive project documentation files
Added detailed documentation files, including project overview, current status, specifications, implementation guide, and README structure. Organized content to improve navigation and streamline project understanding.
2025-05-15 17:08:53 +02:00

9.9 KiB

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

# 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