4.1 KiB
4.1 KiB
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