3.7 KiB
3.7 KiB
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é clientgetCurrentUser()- Récupération utilisateur côté clientlogout()- Déconnexion côté client
AuthService (server-side uniquement)
getUserUuidFromCookie()- Récupère l'UUID depuis le cookie côté serveurisUserAuthenticated()- 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
import { AuthService } from "@/services";
import { SkillsService, TeamsService } from "@/services";
import { evaluationService } from "@/services/evaluation-service";
Utilisation dans les pages
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