116 lines
4.1 KiB
Markdown
116 lines
4.1 KiB
Markdown
# 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
|