"use server"; import { revalidatePath } from "next/cache"; import { z } from "zod"; import { db } from "@/lib/db"; import { getCurrentSession } from "@/lib/session"; import { logActivity } from "@/modules/_core/activity"; import { bangEvents } from "../schema"; const addBangInput = z.object({ occurredOn: z .string() .regex(/^\d{4}-\d{2}-\d{2}$/, "Must be YYYY-MM-DD") .optional(), }); function todayString(): string { const d = new Date(); return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`; } export async function addBang(input: z.input = {}) { const parsed = addBangInput.parse(input); const { user, household } = await getCurrentSession(); const occurredOn = parsed.occurredOn ?? todayString(); const [bang] = await db .insert(bangEvents) .values({ householdId: household.id, recordedBy: user.id, occurredOn, }) .returning(); if (!bang) throw new Error("Bang was not recorded"); await logActivity({ entityType: "bangs.event", entityId: bang.id, action: "create", payload: { occurredOn }, }); revalidatePath("/"); revalidatePath("/d/[slug]", "page"); return bang; }