← back to Norma
app/api/users/route.ts
37 lines
// GET /api/users — list of staff/admin/intern users for assignment dropdowns.
// Admin-only. Returns id, name (display_name fallback to username), role.
import { NextRequest, NextResponse } from 'next/server';
import { query } from '@/lib/db';
import { requireRole } from '@/lib/require-role';
export const runtime = 'nodejs';
export const dynamic = 'force-dynamic';
export async function GET(request: NextRequest) {
const auth = requireRole(request, 'admin', 'staff');
if (auth instanceof NextResponse) return auth;
const result = await query<{
id: string;
username: string;
display_name: string | null;
role: string;
}>(
`SELECT id, username, display_name, role
FROM tier_credentials
WHERE role IN ('admin', 'staff', 'intern')
ORDER BY COALESCE(display_name, username) ASC`,
);
return NextResponse.json({
users: result.rows.map(r => ({
id: r.id,
username: r.username,
name: r.display_name || r.username,
email: r.username.includes('@') ? r.username : null,
role: r.role,
})),
});
}