# Server-Side Utilities Architecture Cette architecture respecte les principes SOLID en séparant clairement les responsabilités côté serveur et en évitant le code mort. ## Structure ``` lib/ ├── evaluation-utils.ts # Utilitaires pour les évaluations ├── evaluation-actions.ts # Actions d'évaluation ├── score-utils.ts # Utilitaires pour les scores ├── skill-file-loader.ts # Chargement des fichiers de skills ├── types.ts # Types TypeScript généraux ├── admin-types.ts # Types pour l'administration ├── utils.ts # Utilitaires généraux ├── category-icons.ts # Icônes des catégories ├── tech-colors.ts # Couleurs des technologies ├── pattern-colors.ts # Couleurs des patterns └── README.md # Ce fichier ``` ## Responsabilités ### evaluation-utils.ts - **Utilitaires** pour les évaluations côté client - **Génération de données** pour les graphiques radar ### evaluation-actions.ts - **Actions d'évaluation** côté serveur - **Gestion des profils** utilisateur ### score-utils.ts - **Calcul des scores** et niveaux de compétences - **Logique métier** pour les évaluations ### skill-file-loader.ts - **Chargement des fichiers** de compétences depuis le système de fichiers - **Parsing des données** JSON ### types.ts - **Types TypeScript** généraux de l'application - **Interfaces** pour les entités principales ### admin-types.ts - **Types pour l'administration** et les statistiques - **Interfaces** pour TeamMember, TeamStats, DirectionStats ## Services d'authentification ### AuthClient (client-side uniquement) - **`login()`** - Authentification côté client - **`getCurrentUser()`** - Récupération utilisateur côté client - **`logout()`** - Déconnexion côté client ### AuthService (server-side uniquement) - **`getUserUuidFromCookie()`** - Récupère l'UUID depuis le cookie côté serveur - **`isUserAuthenticated()`** - Vérifie l'authentification côté serveur ## Séparation client/serveur - **`clients/domains/auth-client.ts`** - Côté client uniquement (React components, hooks) - **`services/auth-service.ts`** - Côté serveur uniquement (API routes, pages) - **Pas de duplication** entre les deux services ## Utilisation ### Import direct des services ```typescript import { AuthService } from "@/services"; import { SkillsService, TeamsService } from "@/services"; import { evaluationService } from "@/services/evaluation-service"; ``` ### Utilisation dans les pages ```typescript export default async function HomePage() { const userUuid = await AuthService.getUserUuidFromCookie(); if (!userUuid) { redirect("/login"); } const [userEvaluation, skillCategories, teams] = await Promise.all([ evaluationService.getServerUserEvaluation(userUuid!), SkillsService.getSkillCategories(), TeamsService.getTeams(), ]); } ``` ## Avantages - **Séparation claire** : Chaque fichier a une seule responsabilité - **Pas de code mort** : Utilisation directe des services existants - **Maintenabilité** : Code organisé et facile à comprendre - **Réutilisabilité** : Fonctions modulaires et indépendantes - **Testabilité** : Chaque module peut être testé séparément - **Évolutivité** : Facile d'ajouter de nouvelles fonctionnalités - **Architecture logique** : L'authentification est dans les services d'auth - **Séparation client/serveur** : Pas de confusion entre les deux environnements - **Noms cohérents** : AuthService pour le serveur, AuthClient pour le client - **Imports directs** : Plus de wrapper inutile, appel direct des services - **Simplicité** : Architecture claire et directe