2023-02-14 10:10:10 +01:00
|
|
|
import type { Password, User } from '@prisma/client';
|
|
|
|
|
import bcrypt from 'bcryptjs';
|
2023-02-11 03:14:14 +01:00
|
|
|
|
2023-02-14 10:10:10 +01:00
|
|
|
import { prisma } from '~/db.server';
|
2023-02-11 03:14:14 +01:00
|
|
|
|
2023-02-14 10:10:10 +01:00
|
|
|
export type { User } from '@prisma/client';
|
2023-02-11 03:14:14 +01:00
|
|
|
|
2023-02-14 10:10:10 +01:00
|
|
|
export async function getUserById(id: User['id']) {
|
2023-02-11 03:14:14 +01:00
|
|
|
return prisma.user.findUnique({ where: { id } });
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-14 10:10:10 +01:00
|
|
|
export async function getUserByEmail(email: User['email']) {
|
2023-02-11 03:14:14 +01:00
|
|
|
return prisma.user.findUnique({ where: { email } });
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-14 10:10:10 +01:00
|
|
|
export async function createUser(email: User['email'], password: string) {
|
2023-02-11 03:14:14 +01:00
|
|
|
const hashedPassword = await bcrypt.hash(password, 10);
|
|
|
|
|
|
|
|
|
|
return prisma.user.create({
|
|
|
|
|
data: {
|
|
|
|
|
email,
|
|
|
|
|
password: {
|
|
|
|
|
create: {
|
2023-02-14 10:10:10 +01:00
|
|
|
hash: hashedPassword
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-02-11 03:14:14 +01:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-23 01:20:18 +01:00
|
|
|
export async function updateUserEmail(id: User['id'], email: string) {
|
|
|
|
|
return prisma.user.update({
|
|
|
|
|
where: { id },
|
|
|
|
|
data: { email }
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function updateUserPassword(id: User['id'], password: string) {
|
|
|
|
|
const hashedPassword = await bcrypt.hash(password, 10);
|
|
|
|
|
|
|
|
|
|
return prisma.user.update({
|
|
|
|
|
where: { id },
|
|
|
|
|
data: {
|
|
|
|
|
password: {
|
|
|
|
|
update: {
|
|
|
|
|
hash: hashedPassword
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-14 10:10:10 +01:00
|
|
|
export async function deleteUserByEmail(email: User['email']) {
|
2023-02-11 03:14:14 +01:00
|
|
|
return prisma.user.delete({ where: { email } });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function verifyLogin(
|
2023-02-14 10:10:10 +01:00
|
|
|
email: User['email'],
|
|
|
|
|
password: Password['hash']
|
2023-02-11 03:14:14 +01:00
|
|
|
) {
|
|
|
|
|
const userWithPassword = await prisma.user.findUnique({
|
|
|
|
|
where: { email },
|
|
|
|
|
include: {
|
2023-02-14 10:10:10 +01:00
|
|
|
password: true
|
|
|
|
|
}
|
2023-02-11 03:14:14 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!userWithPassword || !userWithPassword.password) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const isValid = await bcrypt.compare(
|
|
|
|
|
password,
|
|
|
|
|
userWithPassword.password.hash
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (!isValid) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const { password: _password, ...userWithoutPassword } = userWithPassword;
|
|
|
|
|
|
|
|
|
|
return userWithoutPassword;
|
|
|
|
|
}
|