fix: harden booking and meeting flows
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user