Files
peakskills/clients/README.md
2025-08-24 22:03:15 +02:00

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