Files
wr.do/lib/dto/user.ts
T
2024-08-01 19:47:34 +08:00

108 lines
2.0 KiB
TypeScript

import { User, UserRole } from "@prisma/client";
import { prisma } from "@/lib/db";
export interface UpdateUserForm
extends Omit<User, "id" | "createdAt" | "updatedAt" | "emailVerified"> {}
export const getUserByEmail = async (email: string) => {
try {
const user = await prisma.user.findUnique({
where: {
email: email,
},
select: {
name: true,
emailVerified: true,
},
});
return user;
} catch {
return null;
}
};
export const getUserById = async (id: string) => {
try {
const user = await prisma.user.findUnique({ where: { id } });
return user;
} catch {
return null;
}
};
export const getAllUsers = async (page: number, size: number) => {
try {
const [total, list] = await prisma.$transaction([
prisma.user.count(), // 获取所有用户的总数
prisma.user.findMany({
skip: (page - 1) * size,
take: size,
orderBy: {
createdAt: "desc",
},
}),
]);
return {
total,
list,
};
} catch (error) {
console.error(error);
return null;
}
};
export async function getAllUsersCount() {
try {
return await prisma.user.count();
} catch (error) {
return -1;
}
}
export const updateUser = async (userId: string, data: UpdateUserForm) => {
try {
const session = await prisma.user.update({
where: {
id: userId,
},
data,
});
return session;
} catch (error) {
return null;
}
};
export const deleteUserById = async (userId: string) => {
try {
const session = await prisma.user.delete({
where: {
id: userId,
},
});
return session;
} catch (error) {
return null;
}
};
export function checkUserStatus(user: any) {
if (!user?.id) {
throw new Response("Unauthorized", {
status: 401,
statusText: "Unauthorized",
});
}
if (user.active === 0) {
throw new Response("Forbidden", {
status: 403,
statusText: "Forbidden",
});
}
return user;
}