Added detailed documentation files, including project overview, current status, specifications, implementation guide, and README structure. Organized content to improve navigation and streamline project understanding.
9.6 KiB
Cahier des Charges - Application de Création de Groupes
Note: Ce document est une copie du fichier cdc.md original, renommé en SPECIFICATIONS.md pour une meilleure organisation de la documentation.
Introduction
Ce document présente le cahier des charges pour le développement d'une application web dédiée à la création et à la gestion de groupes. L'application permettra aux utilisateurs de créer des groupes selon différents critères et de conserver un historique des groupes précédemment créés.
Objectifs du Projet
- Développer une application permettant la création de groupes selon différents critères
- Maintenir un historique des groupes créés pour éviter les duplications
- Offrir une interface intuitive et responsive
- Assurer la sécurité des données utilisateurs
- Respecter les normes RGPD
Fonctionnalités Principales
Gestion des Utilisateurs
- Authentification via OAuth2.0 avec GitHub
- Gestion des sessions utilisateur avec JWT
- Gestion des autorisations basée sur les rôles (RBAC)
- Profil utilisateur personnalisable
- Tableau de bord personnel avec statistiques d'utilisation
- Export des données personnelles (RGPD)
Création et Gestion de Groupes
- Création de projets de groupe avec liste de personnes
- Attribution de tags aux personnes
- Définition d'échelles de niveau personnalisées
- Interface de création manuelle de groupes
- Assistant à la création automatique de groupes équilibrés
- Collaboration en temps réel entre utilisateurs
Administration
- Tableau de bord administrateur
- Gestion des tags globaux
- Surveillance de l'activité des utilisateurs
- Gestion des rôles et permissions
Spécifications Techniques
Architecture
L'application suivra une architecture monorepo avec séparation claire entre le frontend et le backend:
- Backend: NestJS avec PostgreSQL et DrizzleORM
- Frontend: Next.js avec ShadcnUI et SWR
- Authentification: OAuth2.0 + OIDC via GitHub
- Communication en temps réel: Socket.IO
- Déploiement: Docker et Gitea Actions
Modèle de Données
Entités Principales
-
User: Utilisateurs de l'application
- id (UUID)
- githubId (string)
- name (string)
- avatar (string)
- role (enum: USER, ADMIN)
- gdprTimestamp (datetime)
- createdAt (datetime)
- updatedAt (datetime)
-
Project: Projets de création de groupes
- id (UUID)
- name (string)
- description (text)
- settings (JSON)
- userId (UUID, foreign key)
- isPublic (boolean)
- createdAt (datetime)
- updatedAt (datetime)
-
Person: Personnes à placer dans les groupes
- id (UUID)
- name (string)
- email (string)
- technicalLevel (integer)
- gender (string)
- attributes (JSON)
- projectId (UUID, foreign key)
- createdAt (datetime)
- updatedAt (datetime)
-
Group: Groupes créés dans le cadre d'un projet
- id (UUID)
- name (string)
- description (text)
- settings (JSON)
- projectId (UUID, foreign key)
- createdAt (datetime)
- updatedAt (datetime)
-
Tag: Étiquettes pour catégoriser les personnes et les projets
- id (UUID)
- name (string)
- description (text)
- color (string)
- type (enum: PROJECT, PERSON)
- createdAt (datetime)
- updatedAt (datetime)
Relations
- ProjectCollaborators: Relation many-to-many entre Project et User
- PersonToGroup: Relation many-to-many entre Person et Group
- PersonToTag: Relation many-to-many entre Person et Tag
- ProjectToTag: Relation many-to-many entre Project et Tag
API REST
L'API REST suivra les principes RESTful avec les endpoints suivants:
Authentification
GET /api/auth/github
: Redirection vers GitHub pour l'authentificationGET /api/auth/github/callback
: Callback OAuth GitHubPOST /api/auth/refresh
: Rafraîchissement du token JWTPOST /api/auth/logout
: DéconnexionGET /api/auth/profile
: Récupération du profil utilisateur
Utilisateurs
GET /api/users
: Liste des utilisateurs (admin)GET /api/users/:id
: Détails d'un utilisateurPATCH /api/users/:id
: Mise à jour d'un utilisateurDELETE /api/users/:id
: Suppression d'un utilisateurGET /api/users/me/export
: Export des données personnelles (RGPD)
Projets
GET /api/projects
: Liste des projetsPOST /api/projects
: Création d'un projetGET /api/projects/:id
: Détails d'un projetPATCH /api/projects/:id
: Mise à jour d'un projetDELETE /api/projects/:id
: Suppression d'un projetPOST /api/projects/:id/collaborators
: Ajout d'un collaborateurDELETE /api/projects/:id/collaborators/:userId
: Suppression d'un collaborateur
Personnes
GET /api/projects/:id/persons
: Liste des personnes d'un projetPOST /api/projects/:id/persons
: Ajout d'une personne à un projetGET /api/persons/:id
: Détails d'une personnePATCH /api/persons/:id
: Mise à jour d'une personneDELETE /api/persons/:id
: Suppression d'une personnePOST /api/persons/:id/tags
: Ajout d'un tag à une personneDELETE /api/persons/:id/tags/:tagId
: Suppression d'un tag d'une personne
Groupes
GET /api/projects/:id/groups
: Liste des groupes d'un projetPOST /api/projects/:id/groups
: Création d'un groupeGET /api/groups/:id
: Détails d'un groupePATCH /api/groups/:id
: Mise à jour d'un groupeDELETE /api/groups/:id
: Suppression d'un groupePOST /api/groups/:id/persons
: Ajout d'une personne à un groupeDELETE /api/groups/:id/persons/:personId
: Suppression d'une personne d'un groupePOST /api/projects/:id/auto-groups
: Création automatique de groupes
Tags
GET /api/tags
: Liste des tagsPOST /api/tags
: Création d'un tagGET /api/tags/:id
: Détails d'un tagPATCH /api/tags/:id
: Mise à jour d'un tagDELETE /api/tags/:id
: Suppression d'un tag
WebSockets
L'application utilisera Socket.IO pour la communication en temps réel avec les événements suivants:
project:updated
: Mise à jour d'un projetproject:collaboratorAdded
: Ajout d'un collaborateur à un projetgroup:created
: Création d'un groupegroup:updated
: Mise à jour d'un groupegroup:personAdded
: Ajout d'une personne à un groupegroup:personRemoved
: Suppression d'une personne d'un groupenotification:new
: Nouvelle notification
Interface Utilisateur
L'interface utilisateur sera développée avec Next.js et ShadcnUI, offrant une expérience responsive et intuitive:
Pages Principales
- Page d'accueil: Présentation de l'application
- Tableau de bord: Vue d'ensemble des projets et activités récentes
- Page de projet: Détails d'un projet avec liste des personnes et groupes
- Éditeur de groupe: Interface drag-and-drop pour la création manuelle de groupes
- Assistant de groupe: Interface pour la création automatique de groupes équilibrés
- Profil utilisateur: Gestion des informations personnelles et préférences
Composants UI
- Barre de navigation responsive
- Sidebar pour la navigation entre les sections
- Modals pour les formulaires de création et d'édition
- Tableaux interactifs avec tri et filtrage
- Interface drag-and-drop pour la gestion des groupes
- Notifications en temps réel
- Thème clair/sombre
Sécurité et Conformité
Sécurité
- Authentification sécurisée via OAuth2.0
- Tokens JWT avec durée de vie limitée
- Protection CSRF
- Validation des entrées utilisateur
- Protection contre les injections SQL
- Rate limiting pour prévenir les attaques par force brute
Conformité RGPD
- Minimisation des données collectées
- Finalité claire de la collecte de données
- Mise en œuvre des droits des utilisateurs (accès, rectification, effacement, portabilité)
- Renouvellement du consentement utilisateur tous les 13 mois
Performance
Objectifs
- Temps de chargement initial < 2 secondes (95ème percentile)
- Temps de réponse API < 300ms (95ème percentile)
- Disponibilité > 99.9%
- Support de 1000 utilisateurs simultanés minimum
Optimisations
- Utilisation efficiente des index pour les requêtes fréquentes
- Mise en cache des requêtes fréquentes
- Optimisation des requêtes N+1
- Monitoring et alerting automatique
Livrables
- Code source complet de l'application (backend et frontend)
- Documentation technique
- Documentation utilisateur
- Scripts de déploiement Docker
- Configuration CI/CD
Calendrier
Le développement de l'application sera réalisé en plusieurs phases:
-
Phase 1 (2 semaines): Configuration et base de données
- Mise en place de l'environnement de développement
- Implémentation du schéma de base de données
- Configuration de l'authentification
-
Phase 2 (3 semaines): Développement des fonctionnalités de base
- Implémentation des modules backend
- Développement des pages frontend principales
- Intégration de l'authentification
-
Phase 3 (2 semaines): Fonctionnalités avancées
- Implémentation de la communication en temps réel
- Développement de l'assistant de création de groupes
- Mise en place des fonctionnalités de collaboration
-
Phase 4 (1 semaine): Tests et optimisation
- Tests unitaires et e2e
- Optimisation des performances
- Correction des bugs
-
Phase 5 (1 semaine): Déploiement et documentation
- Configuration du déploiement Docker
- Mise en place du CI/CD
- Finalisation de la documentation
Conclusion
Ce cahier des charges définit les spécifications techniques et fonctionnelles pour le développement de l'application de création de groupes. L'application offrira une solution complète pour la gestion de groupes, avec une interface intuitive et des fonctionnalités avancées de collaboration en temps réel.