"use server"; import { revalidatePath } from "next/cache"; import { prisma } from "@/lib/prisma"; import { logAdminAction } from "@/lib/audit-log"; import { requireAdmin, str } from "./_shared"; import { setFlash } from "@/lib/flash"; export async function approveReviewAction(formData: FormData): Promise { const admin = await requireAdmin(); const id = str(formData, "id"); const review = await prisma.review.update({ where: { id }, data: { isApproved: true, rejectedAt: null }, select: { product: { select: { slug: true, name: true } } }, }); await logAdminAction(admin, { action: "review.approve", entityType: "Review", entityId: id, detail: review.product.name, }); revalidatePath("/admin/bewertungen"); revalidatePath(`/honig/${review.product.slug}`); await setFlash("success", "Bewertung freigegeben — sie ist jetzt im Shop sichtbar."); } /** * Lehnt eine Bewertung ab, statt sie zu loeschen: sie verschwindet aus dem * Shop (falls sie dort war) und steht im Archiv unter "Abgelehnt", damit die * Entscheidung nachvollziehbar bleibt und sich rueckgaengig machen laesst. */ export async function rejectReviewAction(formData: FormData): Promise { const admin = await requireAdmin(); const id = str(formData, "id"); const review = await prisma.review.update({ where: { id }, data: { isApproved: false, rejectedAt: new Date() }, select: { product: { select: { slug: true, name: true } } }, }); await logAdminAction(admin, { action: "review.reject", entityType: "Review", entityId: id, detail: review.product.name, }); revalidatePath("/admin/bewertungen"); revalidatePath(`/honig/${review.product.slug}`); await setFlash("success", "Bewertung abgelehnt — sie steht jetzt im Archiv."); } export async function deleteReviewAction(formData: FormData): Promise { const admin = await requireAdmin(); const id = str(formData, "id"); const review = await prisma.review.delete({ where: { id }, select: { product: { select: { slug: true, name: true } } }, }); await logAdminAction(admin, { action: "review.delete", entityType: "Review", entityId: id, detail: review.product.name, }); revalidatePath("/admin/bewertungen"); revalidatePath(`/honig/${review.product.slug}`); await setFlash("success", "Bewertung gelöscht."); }