Openstatus www.openstatus.dev
at main 63 lines 1.4 kB view raw
1import type { AdapterUser } from "next-auth/adapters"; 2import * as randomWordSlugs from "random-word-slugs"; 3 4import { db, eq } from "@openstatus/db"; 5import { user, usersToWorkspaces, workspace } from "@openstatus/db/src/schema"; 6 7export async function createUser(data: AdapterUser) { 8 const newUser = await db 9 .insert(user) 10 .values({ 11 email: data.email, 12 photoUrl: data.image, 13 name: data.name, 14 firstName: data.firstName, 15 lastName: data.lastName, 16 }) 17 .returning() 18 .get(); 19 20 let slug: string | undefined = undefined; 21 22 while (!slug) { 23 slug = randomWordSlugs.generateSlug(2); 24 const slugAlreadyExists = await db 25 .select() 26 .from(workspace) 27 .where(eq(workspace.slug, slug)) 28 .get(); 29 30 if (slugAlreadyExists) { 31 console.warn(`slug already exists: '${slug} - recreating new one'`); 32 slug = undefined; 33 } 34 } 35 36 const newWorkspace = await db 37 .insert(workspace) 38 .values({ slug, name: "" }) 39 .returning({ id: workspace.id }) 40 .get(); 41 42 await db 43 .insert(usersToWorkspaces) 44 .values({ 45 userId: newUser.id, 46 workspaceId: newWorkspace.id, 47 role: "owner", 48 }) 49 .returning() 50 .get(); 51 52 return newUser; 53} 54 55export async function getUser(id: string) { 56 const _user = await db 57 .select() 58 .from(user) 59 .where(eq(user.id, Number(id))) 60 .get(); 61 62 return _user || null; 63}