import { DrizzleClient } from "@shared/db/DrizzleClient"; import type { Transaction } from "@shared/lib/types"; import { isShuttingDown, incrementTransactions, decrementTransactions } from "./shutdown"; export const withTransaction = async ( callback: (tx: Transaction) => Promise, tx?: Transaction ): Promise => { if (tx) { return await callback(tx); } else { if (isShuttingDown()) { throw new Error("System is shutting down, no new transactions allowed."); } incrementTransactions(); try { return await DrizzleClient.transaction(async (newTx) => { return await callback(newTx); }); } finally { decrementTransactions(); } } };