"use server"; import { auth } from "@/auth"; import { db } from "@/lib/db"; import { hasPermission } from "@/lib/permissions"; import { z } from "zod"; import { revalidatePath } from "next/cache"; type ActionResult = { ok: true } | { error: string }; const vesselSchema = z.object({ name: z.string().min(1, "Vessel name is required"), }); export async function createVessel(formData: FormData): Promise { const session = await auth(); if (!session?.user || !hasPermission(session.user.role, "manage_vessels_accounts")) { return { error: "Unauthorized" }; } const parsed = vesselSchema.safeParse({ name: formData.get("name"), }); if (!parsed.success) return { error: parsed.error.errors[0]?.message ?? "Validation failed" }; await db.vessel.create({ data: { name: parsed.data.name } }); revalidatePath("/admin/vessels"); return { ok: true }; } export async function updateVessel(formData: FormData): Promise { const session = await auth(); if (!session?.user || !hasPermission(session.user.role, "manage_vessels_accounts")) { return { error: "Unauthorized" }; } const id = formData.get("id") as string; if (!id) return { error: "Vessel ID is required" }; const parsed = vesselSchema.safeParse({ name: formData.get("name"), }); if (!parsed.success) return { error: parsed.error.errors[0]?.message ?? "Validation failed" }; await db.vessel.update({ where: { id }, data: { name: parsed.data.name } }); revalidatePath("/admin/vessels"); return { ok: true }; } export async function deleteVessel(id: string): Promise { const session = await auth(); if (!session?.user || !hasPermission(session.user.role, "manage_vessels_accounts")) return { error: "Unauthorized" }; const inUse = await db.purchaseOrder.findFirst({ where: { vesselId: id } }); if (inUse) return { error: "Cannot delete: vessel is referenced in purchase orders. Remove those POs first." }; await db.vessel.delete({ where: { id } }); revalidatePath("/admin/vessels"); return { ok: true }; } export async function toggleVesselActive(vesselId: string): Promise { const session = await auth(); if (!session?.user || !hasPermission(session.user.role, "manage_vessels_accounts")) { return { error: "Unauthorized" }; } const vessel = await db.vessel.findUnique({ where: { id: vesselId }, select: { isActive: true } }); if (!vessel) return { error: "Vessel not found" }; await db.vessel.update({ where: { id: vesselId }, data: { isActive: !vessel.isActive } }); revalidatePath("/admin/vessels"); return { ok: true }; }