Added detailed documentation files, including project overview, current status, specifications, implementation guide, and README structure. Organized content to improve navigation and streamline project understanding.
223 lines
9.9 KiB
Markdown
223 lines
9.9 KiB
Markdown
# 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 |