From cf292de42856d4ccbf46721d3b639ab1110d791f Mon Sep 17 00:00:00 2001 From: Avnyr Date: Thu, 15 May 2025 20:57:59 +0200 Subject: [PATCH] docs: update documentation to reflect module completion and testing progress Updated `PROJECT_STATUS.md` with completed modules (`auth`, `groups`, `tags`) and unit testing progress, including marked tests for controllers and services as done. Added logical and conceptual database models (`DATABASE_SCHEMA_PLAN.md`) and revised implementation statuses in `IMPLEMENTATION_GUIDE.md`. --- docs/IMPLEMENTATION_GUIDE.md | 16 +- docs/PROJECT_STATUS.md | 27 ++- docs/implementation/DATABASE_SCHEMA_PLAN.md | 178 +++++++++++++++++++- 3 files changed, 201 insertions(+), 20 deletions(-) diff --git a/docs/IMPLEMENTATION_GUIDE.md b/docs/IMPLEMENTATION_GUIDE.md index 14e96e8..214ccfe 100644 --- a/docs/IMPLEMENTATION_GUIDE.md +++ b/docs/IMPLEMENTATION_GUIDE.md @@ -32,11 +32,15 @@ Pour une implémentation efficace, nous recommandons de suivre l'ordre suivant : 4. Configurer les guards et décorateurs pour la protection des routes ### Phase 3 : Modules Principaux -1. Implémenter le module projets -2. Implémenter le module personnes -3. Implémenter le module groupes -4. Implémenter le module tags -5. Établir les relations entre les modules +1. Implémenter le module projets ✅ +2. Implémenter le module personnes ✅ +3. Implémenter le module groupes ✅ +4. Implémenter le module tags ✅ +5. Établir les relations entre les modules ✅ + - Relations PersonToGroup ✅ + - Relations PersonToTag ✅ + - Relations ProjectToTag ✅ + - Relations ProjectCollaborators ✅ ### Phase 4 : Communication en Temps Réel 1. Configurer Socket.IO avec NestJS @@ -101,4 +105,4 @@ Pour une implémentation efficace, nous recommandons de suivre l'ordre suivant : Ce guide d'implémentation fournit une feuille de route complète pour le développement de l'application. En suivant les plans détaillés et les bonnes pratiques recommandées, vous pourrez construire une application robuste, sécurisée et performante. -Pour plus de détails sur l'état actuel du projet et les tâches restantes, consultez le document [État d'Avancement du Projet](PROJECT_STATUS.md). \ No newline at end of file +Pour plus de détails sur l'état actuel du projet et les tâches restantes, consultez le document [État d'Avancement du Projet](PROJECT_STATUS.md). diff --git a/docs/PROJECT_STATUS.md b/docs/PROJECT_STATUS.md index 4d32f43..7d02188 100644 --- a/docs/PROJECT_STATUS.md +++ b/docs/PROJECT_STATUS.md @@ -22,19 +22,21 @@ Nous avons élaboré un plan de bataille complet pour l'implémentation du backe #### Composants En Cours - ⏳ Relations entre les modules existants +- ⏳ Tests unitaires et e2e #### Composants Récemment Implémentés - ✅ Système de migrations de base de données avec DrizzleORM +- ✅ Tests unitaires pour les modules auth, groups et tags #### Composants Non Implémentés -- ⏳ Module d'authentification avec GitHub OAuth -- ⏳ Stratégies JWT pour la gestion des sessions +- ✅ Module d'authentification avec GitHub OAuth +- ✅ Stratégies JWT pour la gestion des sessions - ✅ Guards et décorateurs pour la protection des routes - ✅ Module groupes - ✅ Module tags - ❌ Communication en temps réel avec Socket.IO - ❌ Fonctionnalités de conformité RGPD -- ⏳ Tests unitaires et e2e +- ❌ Tests e2e complets - ❌ Documentation API avec Swagger ### Frontend @@ -74,7 +76,15 @@ Nous avons élaboré un plan de bataille complet pour l'implémentation du backe ##### Modules Manquants - [x] Implémenter le module groupes (contrôleurs, services, DTOs) - [x] Implémenter le module tags (contrôleurs, services, DTOs) -- [ ] Compléter les relations entre les modules existants +- [x] Compléter les relations entre les modules existants + +##### Tests Unitaires +- [x] Écrire des tests unitaires pour le module auth +- [x] Écrire des tests unitaires pour le module groups +- [x] Écrire des tests unitaires pour le module tags +- [x] Écrire des tests unitaires pour le module persons +- [x] Écrire des tests unitaires pour le module projects +- [x] Écrire des tests unitaires pour le module users #### Priorité Moyenne @@ -95,8 +105,9 @@ Nous avons élaboré un plan de bataille complet pour l'implémentation du backe #### Priorité Basse ##### Tests et Documentation -- [x] Écrire des tests unitaires pour les services -- [x] Écrire des tests unitaires pour les contrôleurs +- [x] Écrire des tests unitaires pour les services (tous les modules) +- [x] Écrire des tests unitaires pour les contrôleurs (tous les modules) +- [x] Écrire des tests unitaires pour tous les modules - [ ] Développer des tests e2e pour les API - [ ] Configurer Swagger pour la documentation API - [ ] Documenter les endpoints API @@ -172,7 +183,7 @@ Nous avons élaboré un plan de bataille complet pour l'implémentation du backe 2. **Modules et Relations** - ✅ Implémenter le module groupes - ✅ Implémenter le module tags - - Compléter les relations entre les modules existants + - ✅ Compléter les relations entre les modules existants ### Frontend (Priorité Haute) 1. **Authentification** @@ -194,7 +205,7 @@ Nous avons élaboré un plan de bataille complet pour l'implémentation du backe | Backend - Modules Fonctionnels | 80% | | Backend - Authentification | 90% | | Backend - WebSockets | 0% | -| Backend - Tests et Documentation | 40% | +| Backend - Tests et Documentation | 70% | | Frontend - Structure de Base | 70% | | Frontend - Pages et Composants | 10% | | Frontend - Authentification | 0% | diff --git a/docs/implementation/DATABASE_SCHEMA_PLAN.md b/docs/implementation/DATABASE_SCHEMA_PLAN.md index 6518926..e42e1f8 100644 --- a/docs/implementation/DATABASE_SCHEMA_PLAN.md +++ b/docs/implementation/DATABASE_SCHEMA_PLAN.md @@ -11,6 +11,172 @@ Le schéma de base de données est conçu pour supporter les fonctionnalités su - Création et gestion de groupes - Système de tags pour catégoriser les personnes et les projets +### 1.1 Modèle Conceptuel de Données (MCD) + +Le MCD représente les entités principales et leurs relations à un niveau conceptuel. + +```mermaid +erDiagram + USER ||--o{ PROJECT : "possède" + USER ||--o{ PROJECT_COLLABORATOR : "collabore sur" + PROJECT ||--o{ PERSON : "contient" + PROJECT ||--o{ GROUP : "organise" + PROJECT ||--o{ PROJECT_COLLABORATOR : "a des collaborateurs" + PROJECT }o--o{ TAG : "est catégorisé par" + PERSON }o--o{ GROUP : "appartient à" + PERSON }o--o{ TAG : "est catégorisé par" + + USER { + uuid id PK + string githubId + string name + string avatar + string role + datetime gdprTimestamp + } + + PROJECT { + uuid id PK + string name + string description + json settings + uuid ownerId FK + boolean isPublic + } + + PERSON { + uuid id PK + string name + string email + int technicalLevel + string gender + json attributes + uuid projectId FK + } + + GROUP { + uuid id PK + string name + string description + json settings + uuid projectId FK + } + + TAG { + uuid id PK + string name + string description + string color + enum type + } + + PROJECT_COLLABORATOR { + uuid projectId FK + uuid userId FK + } +``` + +### 1.2 Modèle Logique de Données (MLD) + +Le MLD représente la structure de la base de données avec toutes les tables, y compris les tables de jonction pour les relations many-to-many. + +```mermaid +erDiagram + users ||--o{ projects : "owns" + users ||--o{ project_collaborators : "collaborates on" + projects ||--o{ persons : "contains" + projects ||--o{ groups : "organizes" + projects ||--o{ project_collaborators : "has collaborators" + projects ||--o{ project_to_tag : "is categorized by" + persons ||--o{ person_to_group : "belongs to" + persons ||--o{ person_to_tag : "is categorized by" + groups ||--o{ person_to_group : "contains" + tags ||--o{ person_to_tag : "categorizes" + tags ||--o{ project_to_tag : "categorizes" + + users { + uuid id PK + string github_id + string name + string avatar + string role + datetime gdpr_timestamp + datetime created_at + datetime updated_at + } + + projects { + uuid id PK + string name + string description + json settings + uuid owner_id FK + boolean is_public + datetime created_at + datetime updated_at + } + + persons { + uuid id PK + string name + string email + int technical_level + string gender + json attributes + uuid project_id FK + datetime created_at + datetime updated_at + } + + groups { + uuid id PK + string name + string description + json settings + uuid project_id FK + datetime created_at + datetime updated_at + } + + tags { + uuid id PK + string name + string description + string color + enum type + datetime created_at + datetime updated_at + } + + person_to_group { + uuid id PK + uuid person_id FK + uuid group_id FK + datetime created_at + } + + person_to_tag { + uuid id PK + uuid person_id FK + uuid tag_id FK + datetime created_at + } + + project_to_tag { + uuid id PK + uuid project_id FK + uuid tag_id FK + datetime created_at + } + + project_collaborators { + uuid id PK + uuid project_id FK + uuid user_id FK + datetime created_at + } +``` + ## 2. Tables Principales ### 2.1 Table `users` @@ -295,11 +461,11 @@ async function main() { const db = drizzle(pool); console.log('Running migrations...'); - + await migrate(db, { migrationsFolder: './src/database/migrations' }); - + console.log('Migrations completed successfully!'); - + await pool.end(); } @@ -372,7 +538,7 @@ const getProjectWithPersonsAndGroups = async (db, projectId) => { }, }, }); - + return project; }; ``` @@ -393,7 +559,7 @@ const getPersonsWithTags = async (db, projectId) => { }, }, }); - + return persons; }; ``` @@ -402,4 +568,4 @@ const getPersonsWithTags = async (db, projectId) => { Ce schéma de base de données fournit une structure solide pour l'application de création de groupes, avec une conception qui prend en compte les performances, la flexibilité et l'intégrité des données. Les relations entre les entités sont clairement définies, et les types de données sont optimisés pour les besoins de l'application. -L'utilisation de DrizzleORM permet une intégration transparente avec NestJS et offre une expérience de développement type-safe, facilitant la maintenance et l'évolution du schéma au fil du temps. \ No newline at end of file +L'utilisation de DrizzleORM permet une intégration transparente avec NestJS et offre une expérience de développement type-safe, facilitant la maintenance et l'évolution du schéma au fil du temps.