Files

18 lines
730 B
TypeScript

import { commitTransaction, createLocalReq, initTransaction, killTransaction, type Payload, type PayloadRequest } from "payload";
import { acquireBookingDayLock } from "./lock";
export async function withBookingTransaction<T>(payload: Payload, key: string, action: (req: PayloadRequest) => Promise<T>): Promise<T> {
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;
}
}