mirror of
https://github.com/nicotsx/zerobyte.git
synced 2026-06-04 06:28:45 -04:00
89 lines
1.6 KiB
TypeScript
89 lines
1.6 KiB
TypeScript
import { db, sqlite } from "~/server/db/db";
|
|
import { member, organization, sessionsTable, usersTable } from "~/server/db/schema";
|
|
|
|
type MembershipRole = "owner" | "admin" | "member";
|
|
|
|
export function randomId() {
|
|
return Bun.randomUUIDv7();
|
|
}
|
|
|
|
export function randomSlug(prefix: string) {
|
|
return `${prefix}-${Math.random().toString(36).slice(2, 8)}`;
|
|
}
|
|
|
|
export function escapeSqlLiteral(value: string) {
|
|
return value.replaceAll("'", "''");
|
|
}
|
|
|
|
export function dropTrigger(name: string) {
|
|
sqlite.exec(`DROP TRIGGER IF EXISTS ${name};`);
|
|
}
|
|
|
|
export async function createUser(email: string) {
|
|
const id = randomId();
|
|
|
|
await db.insert(usersTable).values({
|
|
id,
|
|
email,
|
|
name: email.split("@")[0],
|
|
username: randomSlug("user"),
|
|
});
|
|
|
|
return id;
|
|
}
|
|
|
|
export async function createOrganization(name: string) {
|
|
const id = randomId();
|
|
|
|
await db.insert(organization).values({
|
|
id,
|
|
name,
|
|
slug: randomSlug("org"),
|
|
createdAt: new Date(),
|
|
});
|
|
|
|
return id;
|
|
}
|
|
|
|
export async function createMembership({
|
|
userId,
|
|
organizationId,
|
|
role,
|
|
}: {
|
|
userId: string;
|
|
organizationId: string;
|
|
role: MembershipRole;
|
|
}) {
|
|
const id = randomId();
|
|
|
|
await db.insert(member).values({
|
|
id,
|
|
userId,
|
|
organizationId,
|
|
role,
|
|
createdAt: new Date(),
|
|
});
|
|
|
|
return id;
|
|
}
|
|
|
|
export async function createSession({
|
|
userId,
|
|
activeOrganizationId = null,
|
|
}: {
|
|
userId: string;
|
|
activeOrganizationId?: string | null;
|
|
}) {
|
|
const id = randomId();
|
|
|
|
await db.insert(sessionsTable).values({
|
|
id,
|
|
userId,
|
|
token: randomSlug("token"),
|
|
expiresAt: new Date(Date.now() + 60_000),
|
|
activeOrganizationId,
|
|
});
|
|
|
|
return id;
|
|
}
|