refactor: remove legacy evaluation route and update user management interfaces

- Deleted the obsolete evaluations route to streamline the API.
- Added User and UserFormData interfaces to admin-client for better user management.
- Updated useUsersManagement hook to utilize adminClient for fetching and creating users, improving data handling.
- Cleaned up unused imports and code for better maintainability.
This commit is contained in:
Julien Froidefond
2025-08-25 08:30:34 +02:00
parent 26496e7473
commit dc06f00342
5 changed files with 27 additions and 97 deletions

View File

@@ -1,73 +0,0 @@
import { NextRequest, NextResponse } from "next/server";
import { cookies } from "next/headers";
import { evaluationService } from "@/services/evaluation-service";
import { userService } from "@/services/user-service";
import { UserEvaluation, UserProfile } from "@/lib/types";
export async function GET(request: NextRequest) {
try {
const cookieStore = await cookies();
const userUuid = cookieStore.get("peakSkills_userId")?.value;
// Support pour l'ancien mode avec paramètres (pour la compatibilité)
if (!userUuid) {
const { searchParams } = new URL(request.url);
const firstName = searchParams.get("firstName");
const lastName = searchParams.get("lastName");
const teamId = searchParams.get("teamId");
if (!firstName || !lastName || !teamId) {
return NextResponse.json(
{ error: "Utilisateur non authentifié" },
{ status: 401 }
);
}
const profile: UserProfile = { firstName, lastName, teamId };
const evaluation = await evaluationService.loadUserEvaluation(profile);
return NextResponse.json({ evaluation });
}
// Mode authentifié par cookie UUID
const userProfile = await userService.getUserByUuid(userUuid);
if (!userProfile) {
return NextResponse.json(
{ error: "Utilisateur non trouvé" },
{ status: 404 }
);
}
const evaluation = await evaluationService.loadUserEvaluation(userProfile);
return NextResponse.json({ evaluation });
} catch (error) {
console.error("Erreur lors du chargement de l'évaluation:", error);
return NextResponse.json(
{ error: "Erreur interne du serveur" },
{ status: 500 }
);
}
}
export async function POST(request: NextRequest) {
try {
const body = await request.json();
const evaluation: UserEvaluation = body.evaluation;
if (!evaluation || !evaluation.profile) {
return NextResponse.json(
{ error: "Évaluation invalide" },
{ status: 400 }
);
}
await evaluationService.saveUserEvaluation(evaluation);
return NextResponse.json({ success: true });
} catch (error) {
console.error("Erreur lors de la sauvegarde de l'évaluation:", error);
return NextResponse.json(
{ error: "Erreur interne du serveur" },
{ status: 500 }
);
}
}

View File

@@ -2,7 +2,6 @@ import { NextRequest, NextResponse } from "next/server";
import { cookies } from "next/headers"; import { cookies } from "next/headers";
import { evaluationService } from "@/services/evaluation-service"; import { evaluationService } from "@/services/evaluation-service";
import { userService } from "@/services/user-service"; import { userService } from "@/services/user-service";
import { UserProfile, SkillLevel } from "@/lib/types";
const COOKIE_NAME = "peakSkills_userId"; const COOKIE_NAME = "peakSkills_userId";

View File

@@ -1,6 +1,5 @@
import { NextResponse } from "next/server"; import { NextResponse } from "next/server";
import { SkillsService } from "@/services"; import { SkillsService } from "@/services";
import { SkillCategory } from "@/lib/types";
export async function GET() { export async function GET() {
try { try {

View File

@@ -25,6 +25,20 @@ export interface TeamMember {
joinedAt: string; joinedAt: string;
} }
export interface UserFormData {
firstName: string;
lastName: string;
teamId: string;
}
export interface User {
uuid: string;
firstName: string;
lastName: string;
teamName?: string;
hasEvaluations: boolean;
}
export class AdminClient extends BaseHttpClient { export class AdminClient extends BaseHttpClient {
// Skills Management // Skills Management
async getSkills(): Promise<Skill[]> { async getSkills(): Promise<Skill[]> {
@@ -80,6 +94,14 @@ export class AdminClient extends BaseHttpClient {
} }
// User Management // User Management
async getUsers(): Promise<User[]> {
return await this.get<User[]>(`/admin/users`);
}
async createUser(userData: UserFormData): Promise<User> {
return await this.post<User>(`/admin/users`, userData);
}
async deleteUser(userId: string): Promise<void> { async deleteUser(userId: string): Promise<void> {
await this.delete(`/admin/users/${userId}`); await this.delete(`/admin/users/${userId}`);
} }

View File

@@ -1,20 +1,8 @@
import { useState, useEffect } from "react"; import { useState, useEffect } from "react";
import { useToast } from "@/hooks/use-toast"; import { useToast } from "@/hooks/use-toast";
import { Team } from "@/lib/types"; import { Team } from "@/lib/types";
import { adminClient } from "@/clients";
interface User { import { User, UserFormData } from "@/clients/domains/admin-client";
uuid: string;
firstName: string;
lastName: string;
teamName?: string;
hasEvaluations: boolean;
}
interface UserFormData {
firstName: string;
lastName: string;
teamId: string;
}
export function useUsersManagement(teams: Team[]) { export function useUsersManagement(teams: Team[]) {
const [users, setUsers] = useState<User[]>([]); const [users, setUsers] = useState<User[]>([]);
@@ -34,11 +22,7 @@ export function useUsersManagement(teams: Team[]) {
setIsLoading(true); setIsLoading(true);
setError(null); setError(null);
try { try {
const response = await fetch("/api/admin/users"); const usersData = await adminClient.getUsers();
if (!response.ok) {
throw new Error("Erreur lors de la récupération des utilisateurs");
}
const usersData = await response.json();
setUsers(usersData); setUsers(usersData);
} catch (err: any) { } catch (err: any) {
setError(err.message || "Erreur lors du chargement des utilisateurs"); setError(err.message || "Erreur lors du chargement des utilisateurs");
@@ -68,7 +52,7 @@ export function useUsersManagement(teams: Team[]) {
try { try {
setIsSubmitting(true); setIsSubmitting(true);
// TODO: Implémenter la création d'utilisateur await adminClient.createUser(userFormData);
toast({ toast({
title: "Succès", title: "Succès",
description: "Utilisateur créé avec succès", description: "Utilisateur créé avec succès",
@@ -112,8 +96,7 @@ export function useUsersManagement(teams: Team[]) {
setDeletingUserId(user.uuid); setDeletingUserId(user.uuid);
try { try {
// TODO: Implémenter la suppression d'utilisateur await adminClient.deleteUser(user.uuid);
// await adminClient.deleteUser(user.uuid);
// Mettre à jour la liste locale // Mettre à jour la liste locale
setUsers((prev) => prev.filter((u) => u.uuid !== user.uuid)); setUsers((prev) => prev.filter((u) => u.uuid !== user.uuid));