import { logger } from "@helpers/logger"; import { type ReservedSQL, sql } from "bun"; export async function createTable(reservation?: ReservedSQL): Promise { let selfReservation: boolean = false; if (!reservation) { reservation = await sql.reserve(); selfReservation = true; } try { await reservation` CREATE TABLE IF NOT EXISTS invites ( id TEXT PRIMARY KEY NOT NULL UNIQUE, created_by UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL, expiration TIMESTAMPTZ DEFAULT NULL, uses INTEGER DEFAULT 0, max_uses INTEGER DEFAULT 1, role TEXT NOT NULL DEFAULT 'user' );`; } catch (error) { logger.error(["Could not create the invites table:", error as Error]); throw error; } finally { if (selfReservation) { reservation.release(); } } } export async function drop( cascade: boolean, reservation?: ReservedSQL, ): Promise { let selfReservation: boolean = false; if (!reservation) { reservation = await sql.reserve(); selfReservation = true; } try { await reservation`DROP TABLE IF EXISTS invites ${cascade ? "CASCADE" : ""};`; } catch (error) { logger.error(["Could not drop the invites table:", error as Error]); throw error; } finally { if (selfReservation) { reservation.release(); } } }