refactor: revew all design of services, clients, deadcode, ...

This commit is contained in:
Julien Froidefond
2025-08-24 22:03:15 +02:00
parent f4dcc89c11
commit 6fba622003
63 changed files with 969 additions and 1846 deletions

View File

@@ -0,0 +1,86 @@
import { BaseHttpClient } from "../base/http-client";
export interface Skill {
id: string;
name: string;
description: string;
icon: string;
categoryId: string;
category: string;
usageCount: number;
}
export interface Team {
id: string;
name: string;
direction: string;
memberCount: number;
}
export interface TeamMember {
id: string;
firstName: string;
lastName: string;
fullName: string;
joinedAt: string;
}
export class AdminClient extends BaseHttpClient {
// Skills Management
async getSkills(): Promise<Skill[]> {
return await this.get<Skill[]>(`/admin/skills`);
}
async createSkill(
skillData: Omit<Skill, "id" | "usageCount">
): Promise<Skill> {
return await this.post<Skill>(`/admin/skills`, skillData);
}
async updateSkill(skillData: Skill): Promise<Skill> {
return await this.put<Skill>(`/admin/skills`, skillData);
}
async deleteSkill(skillId: string): Promise<void> {
await this.delete(`/admin/skills?id=${skillId}`);
}
// Teams Management
async getTeams(): Promise<Team[]> {
return await this.get<Team[]>(`/admin/teams`);
}
async createTeam(teamData: Omit<Team, "id" | "memberCount">): Promise<Team> {
return await this.post<Team>(`/admin/teams`, teamData);
}
async updateTeam(teamData: Team): Promise<Team> {
return await this.put<Team>(`/admin/teams`, teamData);
}
async deleteTeam(teamId: string): Promise<void> {
await this.delete(`/admin/teams?id=${teamId}`);
}
async deleteDirection(direction: string): Promise<void> {
await this.delete(
`/admin/teams?direction=${encodeURIComponent(direction)}`
);
}
// Team Members
async getTeamMembers(teamId: string): Promise<TeamMember[]> {
return await this.get<TeamMember[]>(`/admin/teams/${teamId}/members`);
}
async removeTeamMember(teamId: string, memberId: string): Promise<void> {
await this.delete(`/admin/teams/${teamId}/members`, {
memberId,
});
}
// User Management
async deleteUser(userId: string): Promise<void> {
await this.delete(`/admin/users/${userId}`);
}
}

View File

@@ -0,0 +1,33 @@
import { BaseHttpClient } from "../base/http-client";
import { UserProfile } from "../../lib/types";
export class AuthClient extends BaseHttpClient {
/**
* Authentifie un utilisateur et créé le cookie
*/
async login(
profile: UserProfile
): Promise<{ user: UserProfile & { uuid: string }; userUuid: string }> {
return await this.post("/auth", profile);
}
/**
* Récupère l'utilisateur actuel depuis le cookie
*/
async getCurrentUser(): Promise<UserProfile | null> {
try {
const response = await this.get<{ user: UserProfile }>("/auth");
return response.user;
} catch (error) {
console.error("Failed to get current user:", error);
return null;
}
}
/**
* Déconnecte l'utilisateur (supprime le cookie)
*/
async logout(): Promise<void> {
await this.delete("/auth");
}
}

View File

@@ -0,0 +1,26 @@
import { BaseHttpClient } from "../base/http-client";
import { SkillCategory } from "../../lib/types";
export class SkillsClient extends BaseHttpClient {
/**
* Crée une nouvelle skill
*/
async createSkill(
categoryId: string,
skill: {
id: string;
name: string;
description: string;
icon?: string;
links: string[];
}
): Promise<boolean> {
try {
await this.post(`/skills/${categoryId}`, skill);
return true;
} catch (error) {
console.error("Erreur lors de la création de la skill:", error);
return false;
}
}
}