refactor: convert admin user management to Server Actions

- Add src/app/actions/admin.ts with updateUserRoles, deleteUser, resetUserPassword
- Update EditUserDialog, DeleteUserDialog, ResetPasswordDialog to use Server Actions
- Remove admin users API routes (PATCH/DELETE/PUT)
This commit is contained in:
2026-02-28 11:06:42 +01:00
parent 7134c069d7
commit b40f59bec6
7 changed files with 87 additions and 164 deletions

72
src/app/actions/admin.ts Normal file
View File

@@ -0,0 +1,72 @@
"use server";
import { AdminService } from "@/lib/services/admin.service";
import { ERROR_CODES } from "@/constants/errorCodes";
import { AppError } from "@/utils/errors";
import { AuthServerService } from "@/lib/services/auth-server.service";
/**
* Met à jour les rôles d'un utilisateur
*/
export async function updateUserRoles(
userId: string,
roles: string[]
): Promise<{ success: boolean; message: string }> {
try {
if (roles.length === 0) {
return { success: false, message: "L'utilisateur doit avoir au moins un rôle" };
}
await AdminService.updateUserRoles(userId, roles);
return { success: true, message: "Rôles mis à jour" };
} catch (error) {
if (error instanceof AppError) {
return { success: false, message: error.message };
}
return { success: false, message: "Erreur lors de la mise à jour des rôles" };
}
}
/**
* Supprime un utilisateur
*/
export async function deleteUser(
userId: string
): Promise<{ success: boolean; message: string }> {
try {
await AdminService.deleteUser(userId);
return { success: true, message: "Utilisateur supprimé" };
} catch (error) {
if (error instanceof AppError) {
return { success: false, message: error.message };
}
return { success: false, message: "Erreur lors de la suppression" };
}
}
/**
* Réinitialise le mot de passe d'un utilisateur
*/
export async function resetUserPassword(
userId: string,
newPassword: string
): Promise<{ success: boolean; message: string }> {
try {
if (!AuthServerService.isPasswordStrong(newPassword)) {
return {
success: false,
message: "Le mot de passe doit contenir au moins 8 caractères, une majuscule et un chiffre",
};
}
await AdminService.resetUserPassword(userId, newPassword);
return { success: true, message: "Mot de passe réinitialisé" };
} catch (error) {
if (error instanceof AppError) {
return { success: false, message: error.message };
}
return { success: false, message: "Erreur lors de la réinitialisation du mot de passe" };
}
}