sub
This commit is contained in:
@@ -4,34 +4,46 @@ import prisma from "@/lib/prisma";
|
||||
export async function GET(req: Request) {
|
||||
const { searchParams } = new URL(req.url);
|
||||
const q = searchParams.get("q") || "";
|
||||
const users = await prisma.user.findMany({
|
||||
where: q
|
||||
? {
|
||||
OR: [
|
||||
{ nickname: { contains: q } },
|
||||
{ phone: { contains: q } },
|
||||
{ name: { contains: q } },
|
||||
],
|
||||
}
|
||||
: {},
|
||||
orderBy: { createdAt: "desc" },
|
||||
select: {
|
||||
userId: true,
|
||||
nickname: true,
|
||||
name: true,
|
||||
phone: true,
|
||||
status: true,
|
||||
authLevel: true,
|
||||
createdAt: true,
|
||||
userRoles: { select: { role: { select: { name: true } } } },
|
||||
},
|
||||
take: 100,
|
||||
});
|
||||
const page = Math.max(1, parseInt(searchParams.get("page") || "1", 10));
|
||||
const pageSize = Math.min(100, Math.max(1, parseInt(searchParams.get("pageSize") || "20", 10)));
|
||||
const where = q
|
||||
? {
|
||||
OR: [
|
||||
{ nickname: { contains: q } },
|
||||
{ phone: { contains: q } },
|
||||
{ name: { contains: q } },
|
||||
],
|
||||
}
|
||||
: {};
|
||||
|
||||
const [total, users] = await Promise.all([
|
||||
prisma.user.count({ where }),
|
||||
prisma.user.findMany({
|
||||
where,
|
||||
orderBy: { createdAt: "desc" },
|
||||
skip: (page - 1) * pageSize,
|
||||
take: pageSize,
|
||||
select: {
|
||||
userId: true,
|
||||
nickname: true,
|
||||
name: true,
|
||||
phone: true,
|
||||
status: true,
|
||||
authLevel: true,
|
||||
createdAt: true,
|
||||
points: true,
|
||||
level: true,
|
||||
grade: true,
|
||||
userRoles: { select: { role: { select: { name: true } } } },
|
||||
},
|
||||
}),
|
||||
]);
|
||||
|
||||
const items = users.map((u) => ({
|
||||
...u,
|
||||
roles: u.userRoles.map((r) => r.role.name),
|
||||
}));
|
||||
return NextResponse.json({ users: items });
|
||||
return NextResponse.json({ total, page, pageSize, users: items });
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user