"use server"; import { revalidatePath } from "next/cache"; import { requireStaff } from "@/lib/admin/guard"; import { formPositiveBigInt } from "@/lib/form-data"; import { prisma } from "@/lib/prisma"; export async function createEmailTemplate(formData: FormData): Promise { await requireStaff(); const name = String(formData.get("name") ?? "") .normalize("NFC") .trim() .slice(0, 255); const subject = String(formData.get("subject") ?? "") .normalize("NFC") .trim() .slice(0, 255); const body = String(formData.get("body") ?? "").normalize("NFC"); const variablesRaw = String(formData.get("variables") ?? "") .normalize("NFC") .trim(); const isActive = formData.get("isActive") != null; if (!name || !subject || !body) return; await prisma.emailTemplates.create({ data: { name, subject, body, variables: variablesRaw || null, isActive, }, }); revalidatePath("/admin/email-templates"); } export async function updateEmailTemplate(formData: FormData): Promise { await requireStaff(); const raw = String(formData.get("id") ?? "").normalize("NFC"); if (!raw) return; let id: bigint; try { id = BigInt(raw); } catch { return; } const subject = String(formData.get("subject") ?? "") .normalize("NFC") .trim() .slice(0, 255); const body = String(formData.get("body") ?? "").normalize("NFC"); const variablesRaw = String(formData.get("variables") ?? "") .normalize("NFC") .trim(); const isActive = formData.get("isActive") != null; if (!subject || !body) return; await prisma.emailTemplates.update({ where: { id }, data: { subject, body, variables: variablesRaw || null, isActive, }, }); revalidatePath("/admin/email-templates"); } export async function deleteEmailTemplate(formData: FormData): Promise { await requireStaff(); const id = formPositiveBigInt(formData, "id"); if (!id) return; await prisma.emailTemplates.delete({ where: { id } }); revalidatePath("/admin/email-templates"); }