"use server"; import { revalidatePath } from "next/cache"; import { prisma } from "@/lib/prisma"; import { logAdminAction } from "@/lib/audit-log"; import { shippingTierSchema } from "@/lib/validation"; import { requireAdmin, fail, str } from "./_shared"; import { succeed } from "@/lib/flash"; function parseShippingTierForm(formData: FormData) { const rawMax = str(formData, "maxQuantity"); return shippingTierSchema.safeParse({ minQuantity: str(formData, "minQuantity"), maxQuantity: rawMax === "" ? undefined : rawMax, priceCents: str(formData, "priceCents"), }); } export async function createShippingTierAction(formData: FormData): Promise { const admin = await requireAdmin(); const parsed = parseShippingTierForm(formData); if (!parsed.success) { return fail("/admin/versand/neu", parsed.error.issues[0]?.message ?? "Ungültige Eingabe."); } const tier = await prisma.shippingTier.create({ data: { minQuantity: parsed.data.minQuantity, maxQuantity: parsed.data.maxQuantity ?? null, priceCents: parsed.data.priceCents, }, }); await logAdminAction(admin, { action: "shipping_tier.create", entityType: "ShippingTier", entityId: tier.id, detail: `ab ${tier.minQuantity} Stück: ${tier.priceCents} Cent`, }); revalidatePath("/admin/versand"); revalidatePath("/warenkorb"); revalidatePath("/versand-zahlung"); return succeed("/admin/versand", "Versandstufe angelegt."); } export async function updateShippingTierAction(formData: FormData): Promise { const admin = await requireAdmin(); const id = str(formData, "id"); const parsed = parseShippingTierForm(formData); if (!parsed.success) { return fail(`/admin/versand/${id}`, parsed.error.issues[0]?.message ?? "Ungültige Eingabe."); } await prisma.shippingTier.update({ where: { id }, data: { minQuantity: parsed.data.minQuantity, maxQuantity: parsed.data.maxQuantity ?? null, priceCents: parsed.data.priceCents, }, }); await logAdminAction(admin, { action: "shipping_tier.update", entityType: "ShippingTier", entityId: id }); revalidatePath("/admin/versand"); revalidatePath("/warenkorb"); revalidatePath("/versand-zahlung"); return succeed("/admin/versand", "Versandstufe gespeichert."); } export async function deleteShippingTierAction(formData: FormData): Promise { const admin = await requireAdmin(); const id = str(formData, "id"); await prisma.shippingTier.delete({ where: { id } }); await logAdminAction(admin, { action: "shipping_tier.delete", entityType: "ShippingTier", entityId: id }); revalidatePath("/admin/versand"); revalidatePath("/warenkorb"); revalidatePath("/versand-zahlung"); return succeed("/admin/versand", "Versandstufe gelöscht."); }