import { commitTransaction, createLocalReq, initTransaction, killTransaction, type Payload, type PayloadRequest } from "payload"; import { acquireBookingDayLock } from "./lock"; export async function withBookingTransaction(payload: Payload, key: string, action: (req: PayloadRequest) => Promise): Promise { const req = await createLocalReq({}, payload); try { if (!await initTransaction(req)) throw new Error("Booking transaction unavailable"); await acquireBookingDayLock(req, "booking-calendar"); await acquireBookingDayLock(req, key); const result = await action(req); await commitTransaction(req); return result; } catch (error) { await killTransaction(req); throw error; } }