boredgame/src/server/users.ts

56 lines
1 KiB
TypeScript

import { auth } from '$lib/server/lucia';
import prisma from '$lib/prisma';
import type { User } from '@prisma/client';
import { add_user_to_role } from './roles';
export function create_user(user: User) {
return prisma.user.create({
data: {
username: user.username
}
});
}
export async function find_or_create_user(user: User) {
const existing_user = await prisma.user.findUnique({
where: {
username: user.username
}
});
if (existing_user) {
return existing_user;
} else {
const new_user = await create_user(user);
add_user_to_role(new_user.id, 'user');
return new_user;
}
}
export async function find_user_with_roles(user_id: string) {
const user_with_roles = await prisma.user.findUnique({
where: {
id: user_id
},
include: {
roles: {
select: {
role: {
select: {
name: true
}
}
}
}
}
});
if (!user_with_roles) {
throw new Error('User not found');
}
const user = {
...user_with_roles,
roles: user_with_roles.roles.map((user_role) => user_role.role.name)
};
return user;
}