37 lines
1 KiB
TypeScript
37 lines
1 KiB
TypeScript
|
|
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;
|
||
|
|
}
|