import { dbGlobal } from "drizzle-pkg/lib/db"; import { users } from "drizzle-pkg/lib/schema/auth"; import { count, desc, like, or } from "drizzle-orm"; export default defineWrappedResponseHandler(async (event) => { const query = getQuery(event); const page = query.page ? Number(query.page) : 1; const pageSize = query.pageSize ? Number(query.pageSize) : 10; const search = query.search as string | undefined; const offset = (page - 1) * pageSize; const searchPattern = search ? `%${search}%` : undefined; const [totalResult] = await dbGlobal .select({ total: count() }) .from(users); const list = await dbGlobal .select({ id: users.id, username: users.username, email: users.email, nickname: users.nickname, avatar: users.avatar, role: users.role, status: users.status, createdAt: users.createdAt, }) .from(users) .where( searchPattern ? or( like(users.username, searchPattern), like(users.email, searchPattern), like(users.nickname, searchPattern), ) : undefined, ) .orderBy(desc(users.createdAt)) .limit(pageSize) .offset(offset); return R.success({ list, total: totalResult?.total ?? 0, page, pageSize, totalPages: Math.ceil((totalResult?.total ?? 0) / pageSize), }); });