import "server-only"; import { getSession } from "lib/auth/server"; import { AdminUsersQuery, AdminUsersPaginated } from "app-types/admin"; import { requireAdminPermission, requireUserListPermission, } from "lib/auth/permissions"; import pgAdminRepository from "lib/db/pg/repositories/admin-respository.pg"; export const ADMIN_USER_LIST_LIMIT = 10; export const DEFAULT_SORT_BY = "createdAt"; export const DEFAULT_SORT_DIRECTION = "desc"; /** * Require an admin session * This is a wrapper around the getSession function * that throws an error if the user is not an admin * * @deprecated Use requireAdminPermission() from lib/auth/permissions instead */ export async function requireAdminSession(): Promise< NonNullable>> > { const session = await getSession(); if (!session) { throw new Error("Unauthorized: No session found"); } // Use our new permission system internally await requireAdminPermission("access admin functions"); return session; } /** * Get paginated users using our custom repository with improved search capabilities * Only admins can list and search users */ export async function getAdminUsers( query?: AdminUsersQuery, ): Promise { // Use our new permission system await requireUserListPermission("list users in admin panel"); await getSession(); try { // Use our custom repository with improved search const result = await pgAdminRepository.getUsers({ ...query, limit: query?.limit ?? ADMIN_USER_LIST_LIMIT, offset: query?.offset ?? 0, sortBy: query?.sortBy ?? DEFAULT_SORT_BY, sortDirection: query?.sortDirection ?? DEFAULT_SORT_DIRECTION, }); return result; } catch (error) { console.error("Error getting admin users", error); throw error; } }