/home/techb158/balavpn.abdallabala.com/src/app/api/admin/users
Edit: /home/techb158/balavpn.abdallabala.com/src/app/api/admin/users/route.js (2377B)
const { prisma } = require("../../../../lib/prisma");
const { jsonResponse, errorResponse } = require("../../../../lib/http");
const { requireSuperUser } = require("../../../../lib/request-context");
export async function GET(request) {
try {
const actor = await requireSuperUser(request);
const { searchParams } = new URL(request.url);
const query = searchParams.get("q") || "";
const page = parseInt(searchParams.get("page") || "1", 10);
const limit = Math.min(parseInt(searchParams.get("limit") || "50", 10), 100);
const skip = (page - 1) * limit;
// Super Admin: only see members of their assigned organizations
if (actor.platformRole === "SUPER_ADMIN") {
const assignedOrgIds = (await prisma.organizationAccess.findMany({
where: { userId: actor.id },
select: { organizationId: true }
})).map(a => a.organizationId);
const membershipWhere = { organizationId: { in: assignedOrgIds } };
const [users, total] = await Promise.all([
prisma.user.findMany({
where: {
...(query ? { OR: [{ email: { contains: query, mode: "insensitive" } }, { displayName: { contains: query, mode: "insensitive" } }] } : {}),
memberships: { some: membershipWhere }
},
select: { id: true, email: true, displayName: true, platformRole: true, emailVerifiedAt: true, lastLoginAt: true, createdAt: true }
}),
prisma.user.count({
where: {
...(query ? { OR: [{ email: { contains: query, mode: "insensitive" } }, { displayName: { contains: query, mode: "insensitive" } }] } : {}),
memberships: { some: membershipWhere }
}
})
]);
return jsonResponse({ users, total, page, limit });
}
// Super Owner: see all users
const where = query
? { OR: [{ email: { contains: query, mode: "insensitive" } }, { displayName: { contains: query, mode: "insensitive" } }] }
: {};
const [users, total] = await Promise.all([
prisma.user.findMany({
where,
select: { id: true, email: true, displayName: true, platformRole: true, emailVerifiedAt: true, lastLoginAt: true, createdAt: true }
}),
prisma.user.count({ where })
]);
return jsonResponse({ users, total, page, limit });
} catch (error) {
return errorResponse(error);
}
}