"use server"; import { prisma } from "@/lib/prisma"; export async function getClients() { try { const clients = await prisma.user.findMany({ where: { role: { not: "ADMIN" }, OR: [ { businesses: null }, { businesses: { isActive: false } } ] }, include: { businesses: true }, orderBy: { createdAt: "desc" } }); return { success: true, data: clients }; } catch (error) { console.error("Failed to fetch clients:", error); return { success: false, error: "Erreur lors de la récupération des clients" }; } } export async function verifyUserEmail(userId: string) { try { await prisma.user.update({ where: { id: userId }, data: { emailVerified: true, verificationToken: null } }); return { success: true }; } catch (error) { console.error("Failed to verify user email:", error); return { success: false, error: "Erreur lors de la vérification de l'email" }; } } export async function scheduleUserDeletion(userId: string, reason: string, delayDays: number) { try { const user = await prisma.user.findUnique({ where: { id: userId } }); if (!user) return { success: false, error: "Utilisateur non trouvé" }; const settings = await prisma.siteSetting.findUnique({ where: { id: "singleton" } }); const deletionDate = new Date(); deletionDate.setDate(deletionDate.getDate() + delayDays); if (delayDays === 0) { // Immediate deletion await prisma.user.delete({ where: { id: userId } }); return { success: true, message: "Supprimé immédiatement" }; } await prisma.user.update({ where: { id: userId }, data: { deletedAt: new Date(), deletionScheduledAt: deletionDate, deletionReason: reason } }); // Send notification email if (settings?.deleteAccountTemplate) { const { sendEmail } = await import("@/lib/mail"); const html = settings.deleteAccountTemplate .replace(/{name}/g, user.name) .replace(/{siteName}/g, settings.siteName) .replace(/{deletionDate}/g, delayDays === 0 ? "immédiatement" : deletionDate.toLocaleDateString("fr-FR")) .replace(/{reason}/g, reason) .replace(/{reactivateUrl}/g, `${process.env.NEXT_PUBLIC_APP_URL}/auth/reactivate?id=${user.id}`); await sendEmail({ to: user.email, subject: settings.deleteAccountSubject, html }); } return { success: true }; } catch (error) { console.error("Failed to schedule user deletion:", error); return { success: false, error: "Erreur lors de la programmation de la suppression" }; } } export async function reactivateUser(userId: string, reason: string) { try { const user = await prisma.user.update({ where: { id: userId }, data: { deletedAt: null, deletionScheduledAt: null, reactivationReason: reason } }); const settings = await prisma.siteSetting.findUnique({ where: { id: "singleton" } }); // Send confirmation email if (settings?.reactivateAccountTemplate) { const { sendEmail } = await import("@/lib/mail"); const html = settings.reactivateAccountTemplate .replace(/{name}/g, user.name) .replace(/{siteName}/g, settings.siteName) .replace(/{reason}/g, reason); await sendEmail({ to: user.email, subject: settings.reactivateAccountSubject, html }); } return { success: true }; } catch (error) { console.error("Failed to reactivate user:", error); return { success: false, error: "Erreur lors de la réactivation de l'utilisateur" }; } }