# API Clients Architecture Cette architecture respecte les principes SOLID en séparant les responsabilités par domaine métier et en évitant le code mort. ## Structure ``` clients/ ├── base/ │ └── http-client.ts # Classe de base avec logique HTTP commune ├── domains/ │ ├── evaluation-client.ts # Client pour les évaluations (lecture + modification) │ ├── teams-client.ts # Client pour la gestion des équipes (lecture + CRUD) │ ├── skills-client.ts # Client pour les compétences (lecture + création) │ ├── auth-client.ts # Client pour l'authentification (login, logout, getCurrentUser) │ └── admin-client.ts # Client pour la gestion admin (skills, teams, users) ├── index.ts # Exports publics de tous les clients ├── client.ts # Wrapper client-side sécurisé └── README.md # Ce fichier ``` ## Services associés - **`services/auth-service.ts`** - Service d'authentification côté client (renommé depuis auth-utils) - **`services/evaluation-service.ts`** - Service d'évaluation côté serveur - **`services/teams-service.ts`** - Service des équipes côté serveur - **`services/skills-service.ts`** - Service des compétences côté serveur ## Principes - **Single Responsibility** : Chaque client gère un seul domaine métier - **Open/Closed** : Facile d'étendre sans modifier le code existant - **Liskov Substitution** : Tous les clients héritent de BaseHttpClient - **Interface Segregation** : Chaque client expose uniquement ses méthodes - **Dependency Inversion** : Dépend de l'abstraction BaseHttpClient ## Clients par responsabilité ### EvaluationClient - **`loadUserEvaluation()`** - Chargement d'une évaluation utilisateur - **`saveUserEvaluation()`** - Sauvegarde d'une évaluation - **`updateSkillLevel()`** - Mise à jour du niveau d'une skill - **`updateSkillMentorStatus()`** - Mise à jour du statut mentor - **`updateSkillLearningStatus()`** - Mise à jour du statut d'apprentissage - **`addSkillToEvaluation()`** - Ajout d'une skill à l'évaluation - **`removeSkillFromEvaluation()`** - Suppression d'une skill ### SkillsClient - **`loadSkillCategories()`** - Chargement des catégories de skills - **`createSkill()`** - Création d'une nouvelle skill ### TeamsClient - **`loadTeams()`** - Chargement des équipes - **`createTeam()`** - Création d'une équipe - **`updateTeam()`** - Mise à jour d'une équipe - **`deleteTeam()`** - Suppression d'une équipe ### AuthClient - **`login()`** - Authentification d'un utilisateur - **`getCurrentUser()`** - Récupération de l'utilisateur actuel - **`logout()`** - Déconnexion d'un utilisateur ### AdminClient - **`getSkills()`** - Récupération de toutes les skills - **`createSkill()`** - Création d'une nouvelle skill - **`updateSkill()`** - Mise à jour d'une skill - **`deleteSkill()`** - Suppression d'une skill - **`getTeams()`** - Récupération de toutes les équipes - **`createTeam()`** - Création d'une nouvelle équipe - **`updateTeam()`** - Mise à jour d'une équipe - **`deleteTeam()`** - Suppression d'une équipe - **`deleteDirection()`** - Suppression d'une direction - **`getTeamMembers()`** - Récupération des membres d'une équipe - **`removeTeamMember()`** - Suppression d'un membre d'équipe - **`deleteUser()`** - Suppression d'un utilisateur ## Utilisation ### Import direct ```typescript import { evaluationClient, teamsClient, skillsClient, authClient, adminClient, } from "@/clients"; ``` ### Import client-side sécurisé ```typescript import { evaluationClient, teamsClient, skillsClient, authClient, adminClient, } from "@/services/client"; ``` ## Avantages - **Code mort supprimé** : Plus de méthodes dupliquées - **Architecture simple** : Chaque client gère son domaine complet - **Performance** : Seules les méthodes nécessaires sont importées - **Maintenabilité** : Architecture claire et logique - **Testabilité** : Chaque client peut être testé indépendamment - **Séparation claire** : Client HTTP vs services métier