- Deleted the obsolete evaluations route to streamline the API. - Added User and UserFormData interfaces to admin-client for better user management. - Updated useUsersManagement hook to utilize adminClient for fetching and creating users, improving data handling. - Cleaned up unused imports and code for better maintainability.
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é serveurservices/teams-service.ts- Service des équipes côté serveurservices/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 utilisateursaveUserEvaluation()- Sauvegarde d'une évaluationupdateSkillLevel()- Mise à jour du niveau d'une skillupdateSkillMentorStatus()- Mise à jour du statut mentorupdateSkillLearningStatus()- Mise à jour du statut d'apprentissageaddSkillToEvaluation()- Ajout d'une skill à l'évaluationremoveSkillFromEvaluation()- Suppression d'une skill
SkillsClient
loadSkillCategories()- Chargement des catégories de skillscreateSkill()- Création d'une nouvelle skill
TeamsClient
loadTeams()- Chargement des équipescreateTeam()- Création d'une équipeupdateTeam()- Mise à jour d'une équipedeleteTeam()- Suppression d'une équipe
AuthClient
login()- Authentification d'un utilisateurgetCurrentUser()- Récupération de l'utilisateur actuellogout()- Déconnexion d'un utilisateur
AdminClient
getSkills()- Récupération de toutes les skillscreateSkill()- Création d'une nouvelle skillupdateSkill()- Mise à jour d'une skilldeleteSkill()- Suppression d'une skillgetTeams()- Récupération de toutes les équipescreateTeam()- Création d'une nouvelle équipeupdateTeam()- Mise à jour d'une équipedeleteTeam()- Suppression d'une équipedeleteDirection()- Suppression d'une directiongetTeamMembers()- Récupération des membres d'une équiperemoveTeamMember()- Suppression d'un membre d'équipedeleteUser()- Suppression d'un utilisateur
Utilisation
Import direct
import {
evaluationClient,
teamsClient,
skillsClient,
authClient,
adminClient,
} from "@/clients";
Import client-side sécurisé
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