import { sql, type SQL } from "drizzle-orm"; export const tenantContextSetting = "app.organization_id" as const; export type TenantTransaction = { execute(query: SQL): Promise; }; export type TransactionalDatabase = { transaction(callback: (transaction: TenantTransaction) => Promise): Promise; }; export async function withTenant( database: TransactionalDatabase, organizationId: string, callback: (transaction: TenantTransaction) => Promise, ): Promise { if (!organizationId.trim()) throw new Error("organizationId is required"); return database.transaction(async (transaction) => { await transaction.execute(sql`select set_config(${tenantContextSetting}, ${organizationId}, true)`); return callback(transaction); }); }