12 KiB
🎨 Fonctionnalité : Modification de la couleur des calendriers de groupes
📋 Vue d'ensemble
Cette fonctionnalité permet aux membres d'un groupe de personnaliser la couleur de la pastille du calendrier associé à leur groupe. Chaque groupe créé possède un calendrier automatique nommé "Groupe: {nom}", et cette couleur est visible dans tous les affichages de calendrier (agenda, vision, etc.).
✨ Fonctionnalités implémentées
1. API Backend (/app/api/groups/[groupId]/calendar/route.ts)
Nouveaux endpoints :
GET /api/groups/[groupId]/calendar
- Récupère le calendrier associé à un groupe
- Retourne l'objet calendrier avec sa couleur actuelle
PATCH /api/groups/[groupId]/calendar
- Modifie uniquement la couleur du calendrier d'un groupe
- Body :
{ "color": "#FF5733" } - Validation du format hexadécimal
- Vérification que l'utilisateur est membre du groupe
- Retourne le calendrier mis à jour
Sécurité :
- ✅ Authentification requise
- ✅ Vérification de l'appartenance au groupe via Keycloak
- ✅ Validation du format de couleur (hex :
#RRGGBBou#RGB)
2. Interface utilisateur - Page Groupes (/components/groups/groups-table.tsx)
Modifications :
-
Affichage de la pastille de couleur
- Chaque groupe affiche maintenant une pastille colorée à côté de son nom
- Couleur par défaut :
#4f46e5(indigo)
-
Nouveau bouton "Couleur du calendrier"
- Accessible via le menu actions (icône ⋯)
- Icône palette (🎨)
-
Dialog de sélection de couleur
- Palette de 16 couleurs prédéfinies
- Input manuel pour code hexadécimal
- Aperçu en temps réel de la couleur sélectionnée
- Validation avant sauvegarde
Palette de couleurs disponibles :
const colorPalette = [
"#4f46e5", // Indigo
"#0891b2", // Cyan
"#0e7490", // Teal
"#16a34a", // Green
"#65a30d", // Lime
"#ca8a04", // Amber
"#d97706", // Orange
"#dc2626", // Red
"#e11d48", // Rose
"#9333ea", // Purple
"#7c3aed", // Violet
"#2563eb", // Blue
"#0284c7", // Sky
"#059669", // Emerald
"#84cc16", // Lime
"#eab308", // Yellow
];
3. Interface utilisateur - Page Missions/Équipe (/app/missions/equipe/page.tsx)
Modifications identiques à GroupsTable :
-
Affichage de la couleur
- Icône du groupe (👥) affichée sur fond de la couleur du calendrier
- Texte en blanc pour meilleure lisibilité
-
Bouton direct dans la table
- Icône palette (🎨) directement dans les actions
- Tooltip "Couleur du calendrier"
-
Dialog de sélection
- Même interface que dans GroupsTable
- Sauvegarde avec loader pendant l'opération
4. Suppression automatique du calendrier (/app/api/groups/[groupId]/route.ts) ✨ NOUVEAU
Modifications au DELETE endpoint :
Lorsqu'un groupe est supprimé, le calendrier associé est maintenant automatiquement supprimé :
-
Récupération du nom du groupe
- Appel à Keycloak avant suppression pour obtenir le nom du groupe
-
Suppression du calendrier
- Recherche du calendrier nommé
"Groupe: {nom}" - Suppression via
prisma.calendar.deleteMany() - Logs en cas de succès ou d'échec
- Recherche du calendrier nommé
-
Suppression du groupe
- Suppression du groupe de Keycloak
- Même si la suppression du calendrier échoue, le groupe est quand même supprimé
Impact :
- ✅ Plus de calendriers orphelins dans la base
- ✅ Nettoyage automatique de la base de données
- ✅ Agenda plus propre après suppression de groupes
5. Enrichissement API groupes utilisateur (/app/api/users/[userId]/groups/route.ts) ✨ NOUVEAU
Modifications au GET endpoint :
L'API qui récupère les groupes d'un utilisateur enrichit maintenant les données avec les couleurs des calendriers :
-
Récupération des groupes
- Appel à Keycloak pour obtenir les groupes de l'utilisateur
-
Enrichissement avec couleurs
- Pour chaque groupe, recherche du calendrier associé dans Prisma
- Ajout de la propriété
calendarColorà chaque groupe - Valeur
nullsi pas de calendrier trouvé
-
Retour enrichi
- Les groupes retournés contiennent maintenant
calendarColor - Visible immédiatement dans la page Vision
- Les groupes retournés contiennent maintenant
Impact :
- ✅ La page Vision affiche les bonnes couleurs
- ✅ Pas besoin de requêtes supplémentaires côté client
- ✅ Une seule API call pour tout charger
🔄 Flux de données
Chargement initial :
1. Page charge les groupes via GET /api/groups
2. Pour chaque groupe :
└─> GET /api/groups/{groupId}/calendar
└─> Récupère la couleur du calendrier
└─> Stocke dans state local : group.calendarColor
Modification de couleur :
1. Utilisateur clique sur icône palette
2. Dialog s'ouvre avec couleur actuelle
3. Utilisateur sélectionne nouvelle couleur
4. Clic "Enregistrer"
└─> PATCH /api/groups/{groupId}/calendar { color: "#newcolor" }
└─> Vérification membre du groupe (Keycloak)
└─> Mise à jour en base de données (Prisma)
└─> Mise à jour du state local
└─> Toast de confirmation
5. Couleur visible immédiatement partout
🎯 Points d'affichage de la couleur
La couleur du calendrier de groupe est maintenant visible dans :
-
/groups- Page groupes- Table des groupes (pastille à côté du nom)
-
/missions/equipe- Page gestion équipe- Table des groupes (icône colorée)
-
/agenda- Page agenda- Liste des calendriers (pastille à gauche)
- Événements dans le calendrier (barre colorée)
-
/vision- Page visioconférences ✨ NOUVEAU- Cercle coloré autour de l'icône groupe
- Icône en blanc si couleur personnalisée, en bleu sinon
- Couleur par défaut :
#DBEAFE(bleu clair)
-
Widgets calendrier - Tous les composants calendrier
calendar-widget.tsxcalendar-client.tsxcalendar.tsx
🧪 Tests suggérés
Test 1 : Modification de couleur
- Aller sur
/groupsou/missions/equipe - Cliquer sur ⋯ → "Couleur du calendrier"
- Choisir une nouvelle couleur
- Cliquer "Enregistrer"
- ✅ Vérifier : Pastille mise à jour immédiatement
Test 2 : Validation format
- Ouvrir dialog couleur
- Entrer manuellement un code invalide :
#GGGGGG - Cliquer "Enregistrer"
- ✅ Vérifier : Message d'erreur affiché
Test 3 : Permissions
- Se connecter avec utilisateur NON membre du groupe
- Essayer de modifier la couleur
- ✅ Vérifier : Erreur 403 "Vous devez être membre du groupe"
Test 4 : Persistance
- Modifier couleur d'un groupe
- Actualiser la page
- ✅ Vérifier : Couleur conservée
- Aller sur
/agenda - ✅ Vérifier : Couleur visible dans le calendrier
Test 5 : Affichage dans Vision ✨ NOUVEAU
- Modifier la couleur d'un groupe
- Aller sur
/vision - ✅ Vérifier : Le cercle autour de l'icône du groupe a la bonne couleur
- ✅ Vérifier : L'icône est en blanc si couleur personnalisée
Test 6 : Suppression du calendrier ✨ NOUVEAU
- Créer un nouveau groupe
- Vérifier dans
/agendaque le calendrier est créé - Supprimer le groupe dans
/missions/equipe - Aller sur
/agenda - ✅ Vérifier : Le calendrier du groupe a été supprimé
- ✅ Vérifier : Aucune erreur dans la console
📁 Fichiers modifiés
Nouveaux fichiers :
app/api/groups/[groupId]/calendar/route.ts(nouveau endpoint API)
Fichiers modifiés :
1. Gestion des couleurs :
-
components/groups/groups-table.tsx- Import
Palettede lucide-react - Ajout interface
calendarColor?à Group - Ajout états
colorPickerDialog,selectedGroupForColor,selectedColor - Fonction
fetchGroups()modifiée pour charger couleurs - Fonctions
handleOpenColorPicker()ethandleSaveColor() - Palette de couleurs
colorPalette - Dialog de sélection de couleur
- Affichage pastille dans table
- Import
-
app/missions/equipe/page.tsx- Import
Palettede lucide-react - Ajout interface
calendarColor?à Group - Ajout états color picker
- Fonction
fetchData()modifiée pour charger couleurs - Fonctions
handleOpenColorPicker()ethandleSaveColor() - Palette de couleurs
- Bouton palette dans actions
- Dialog de sélection de couleur
- Affichage icône colorée
- Import
2. Affichage dans Vision : ✨ NOUVEAU
app/vision/page.tsx- Ajout
calendarColor?à interfaceGroup - Modification affichage du cercle groupe pour utiliser
group.calendarColor - Style dynamique : couleur personnalisée ou défaut
#DBEAFE - Icône blanche si couleur personnalisée, bleue sinon
- Ajout
3. Suppression automatique : ✨ NOUVEAU
app/api/groups/[groupId]/route.ts- Endpoint DELETE modifié
- Import
prismaetlogger - Récupération des détails du groupe avant suppression
- Suppression du calendrier associé via
prisma.calendar.deleteMany() - Logs détaillés
4. Enrichissement API : ✨ NOUVEAU
app/api/users/[userId]/groups/route.ts- Import
prisma - Endpoint GET enrichi
- Recherche du calendrier pour chaque groupe
- Ajout de
calendarColoraux données retournées - Gestion d'erreurs pour chaque groupe
- Import
🔮 Améliorations futures possibles
-
Color picker avancé
- Utiliser un vrai color picker (ex:
react-color) - Support HSL, RGB en plus de hex
- Utiliser un vrai color picker (ex:
-
Thèmes prédéfinis
- Palettes thématiques (pastel, vif, entreprise, etc.)
- Sauvegarde de palettes personnalisées
-
Permissions granulaires
- Seuls les admins du groupe peuvent changer la couleur
- Rôle "gestionnaire de groupe" dans Keycloak
-
Historique des couleurs
- Log des changements de couleur
- Possibilité de revenir en arrière
-
Synchronisation
- Webhook pour notifier les autres utilisateurs en temps réel
- WebSocket pour mise à jour instantanée sans refresh
📊 Impact sur les performances
- Chargement initial : +1 requête API par groupe (GET calendar)
- Modification : 1 requête PATCH, pas de refresh complet
- Cache : Les calendriers sont déjà en cache Redis (GET /api/calendars)
- Optimisation : Possibilité de batch les requêtes GET calendar en une seule
🐛 Problèmes résolus
✅ Problème 1 : Calendriers orphelins après suppression de groupe
Symptôme : Quand on supprimait un groupe, son calendrier restait dans la base de données et s'affichait dans l'agenda.
Solution : Modification du endpoint DELETE pour supprimer automatiquement le calendrier associé lors de la suppression du groupe.
Commit : Ajout de la suppression automatique dans /app/api/groups/[groupId]/route.ts
✅ Problème 2 : Couleurs non visibles dans la page Vision
Symptôme : Les couleurs de calendrier personnalisées n'apparaissaient pas dans /vision, tous les groupes avaient la même couleur bleue.
Solution :
- Enrichissement de l'API
/api/users/[userId]/groupspour inclurecalendarColor - Modification de l'interface
Groupdansvision/page.tsx - Affichage dynamique des couleurs dans l'UI
Commit : Enrichissement API et affichage dans Vision
🐛 Problèmes connus
Aucun problème connu pour le moment.
✅ Checklist de déploiement
- API créée et testée
- Interface utilisateur implémentée
- Validation des permissions
- Gestion des erreurs
- Pas d'erreurs de linting
- Tests unitaires (à ajouter)
- Tests E2E (à ajouter)
- Documentation utilisateur (à ajouter)
📞 Support
Pour toute question ou problème :
- Vérifier que l'utilisateur est bien membre du groupe
- Vérifier le format de la couleur (hex valide)
- Vérifier les logs serveur pour les erreurs Keycloak
- Vérifier que le calendrier du groupe existe en base
Date de création : 20 janvier 2026
Dernière mise à jour : 21 janvier 2026
Version : 1.2
Auteur : Senior Developer Assistant
📝 Changelog
v1.2 (21 janvier 2026)
- ✨ Ajout : Suppression automatique du calendrier lors de la suppression d'un groupe
- ✨ Ajout : Affichage des couleurs dans la page Vision (
/vision) - 🔧 Modification : Enrichissement de l'API
/api/users/[userId]/groupsavec les couleurs - 📚 Documentation : Ajout de nouveaux tests et problèmes résolus
v1.1 (20 janvier 2026)
- 🐛 Fix : Problèmes de déploiement Docker
- 📚 Documentation : Ajout du guide de déploiement
v1.0 (20 janvier 2026)
- ✨ Version initiale avec modification des couleurs de calendrier