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

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é 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

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