backend/config/sql/users.ts
creations 8a9499be85
All checks were successful
Code quality checks / biome (push) Successful in 8s
re-order alot, move to bun redis, generalized
2025-05-18 09:53:23 -04:00

38 lines
1.2 KiB
TypeScript

import { logger } from "@creations.works/logger";
import { type ReservedSQL, sql } from "bun";
export const order: number = 1;
export async function createTable(reservation?: ReservedSQL): Promise<void> {
let selfReservation = false;
const activeReservation: ReservedSQL = reservation ?? (await sql.reserve());
if (!reservation) {
selfReservation = true;
}
try {
await activeReservation`
CREATE TABLE IF NOT EXISTS users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
authorization_token UUID NOT NULL UNIQUE DEFAULT gen_random_uuid(),
username VARCHAR(20) NOT NULL UNIQUE,
email VARCHAR(254) NOT NULL UNIQUE,
email_verified boolean NOT NULL DEFAULT false,
password TEXT NOT NULL,
avatar boolean NOT NULL DEFAULT false,
roles TEXT[] NOT NULL DEFAULT ARRAY['user'],
timezone VARCHAR(64) DEFAULT NULL,
invited_by UUID REFERENCES users(id) ON DELETE SET NULL,
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
last_seen TIMESTAMPTZ DEFAULT NOW() NOT NULL
);`;
} catch (error) {
logger.error(["Could not create the users table:", error as Error]);
throw error;
} finally {
if (selfReservation) {
activeReservation.release();
}
}
}