99 lines
2.7 KiB
TypeScript
99 lines
2.7 KiB
TypeScript
"use server";
|
|
|
|
import { AdminService } from "@/lib/services/admin.service";
|
|
import type { AdminUserData } from "@/lib/services/admin.service";
|
|
import { AppError } from "@/utils/errors";
|
|
import { AuthServerService } from "@/lib/services/auth-server.service";
|
|
|
|
export interface AdminStatsData {
|
|
totalUsers: number;
|
|
totalAdmins: number;
|
|
usersWithKomga: number;
|
|
usersWithPreferences: number;
|
|
}
|
|
|
|
export async function getAdminDashboardData(): Promise<{
|
|
success: boolean;
|
|
users?: AdminUserData[];
|
|
stats?: AdminStatsData;
|
|
message?: string;
|
|
}> {
|
|
try {
|
|
const [users, stats] = await Promise.all([AdminService.getAllUsers(), AdminService.getUserStats()]);
|
|
|
|
return { success: true, users, stats };
|
|
} catch (error) {
|
|
if (error instanceof AppError) {
|
|
return { success: false, message: error.message };
|
|
}
|
|
|
|
return { success: false, message: "Erreur lors de la récupération des données admin" };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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" };
|
|
}
|
|
}
|