Files
stripstream/src/app/actions/admin.ts

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" };
}
}