brief-20/docs/SPECIFICATIONS.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.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

  1. User: Utilisateurs de l'application

    • id (UUID)
    • githubId (string)
    • name (string)
    • avatar (string)
    • role (enum: USER, ADMIN)
    • gdprTimestamp (datetime)
    • createdAt (datetime)
    • updatedAt (datetime)
  2. 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)
  3. 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)
  4. 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)
  5. 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'authentification
  • GET /api/auth/github/callback: Callback OAuth GitHub
  • POST /api/auth/refresh: Rafraîchissement du token JWT
  • POST /api/auth/logout: Déconnexion
  • GET /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 utilisateur
  • PATCH /api/users/:id: Mise à jour d'un utilisateur
  • DELETE /api/users/:id: Suppression d'un utilisateur
  • GET /api/users/me/export: Export des données personnelles (RGPD)

Projets

  • GET /api/projects: Liste des projets
  • POST /api/projects: Création d'un projet
  • GET /api/projects/:id: Détails d'un projet
  • PATCH /api/projects/:id: Mise à jour d'un projet
  • DELETE /api/projects/:id: Suppression d'un projet
  • POST /api/projects/:id/collaborators: Ajout d'un collaborateur
  • DELETE /api/projects/:id/collaborators/:userId: Suppression d'un collaborateur

Personnes

  • GET /api/projects/:id/persons: Liste des personnes d'un projet
  • POST /api/projects/:id/persons: Ajout d'une personne à un projet
  • GET /api/persons/:id: Détails d'une personne
  • PATCH /api/persons/:id: Mise à jour d'une personne
  • DELETE /api/persons/:id: Suppression d'une personne
  • POST /api/persons/:id/tags: Ajout d'un tag à une personne
  • DELETE /api/persons/:id/tags/:tagId: Suppression d'un tag d'une personne

Groupes

  • GET /api/projects/:id/groups: Liste des groupes d'un projet
  • POST /api/projects/:id/groups: Création d'un groupe
  • GET /api/groups/:id: Détails d'un groupe
  • PATCH /api/groups/:id: Mise à jour d'un groupe
  • DELETE /api/groups/:id: Suppression d'un groupe
  • POST /api/groups/:id/persons: Ajout d'une personne à un groupe
  • DELETE /api/groups/:id/persons/:personId: Suppression d'une personne d'un groupe
  • POST /api/projects/:id/auto-groups: Création automatique de groupes

Tags

  • GET /api/tags: Liste des tags
  • POST /api/tags: Création d'un tag
  • GET /api/tags/:id: Détails d'un tag
  • PATCH /api/tags/:id: Mise à jour d'un tag
  • DELETE /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 projet
  • project:collaboratorAdded: Ajout d'un collaborateur à un projet
  • group:created: Création d'un groupe
  • group:updated: Mise à jour d'un groupe
  • group:personAdded: Ajout d'une personne à un groupe
  • group:personRemoved: Suppression d'une personne d'un groupe
  • notification: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:

  1. 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
  2. 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
  3. 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
  4. Phase 4 (1 semaine): Tests et optimisation

    • Tests unitaires et e2e
    • Optimisation des performances
    • Correction des bugs
  5. 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.