import { eq } from "drizzle-orm"; import { db } from "./database"; import { users } from "./schema"; export type UserUpdate = { id: string | bigint, username: string globalName: string }; export type NewUser = typeof users.$inferInsert; export async function findUser (userData: UserUpdate) { let user = await db.query.users.findFirst({ where: () => eq(users.discordId, BigInt(userData.id)) }) as NewUser; if (!user) { // upsert the user user = await db.insert(users).values({ discordId: BigInt(userData.id), username: userData.username, displayName: userData.globalName, } as NewUser).returning() as NewUser; } else if ( user.username !== userData.username || user.displayName !== userData.globalName ) { await db.update(users).set({ username: userData.username, displayName: userData.globalName }).where(eq(users.discordId, BigInt(userData.id))) } return user; }