35 lines
1.3 KiB
TypeScript
35 lines
1.3 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
import { requireRole, createUser } from '@/lib/auth';
|
|
import { db } from '@/lib/db';
|
|
|
|
export async function GET() {
|
|
try {
|
|
await requireRole('admin');
|
|
const { rows } = await db.query('SELECT id, username, role, created_at FROM users ORDER BY created_at DESC');
|
|
return NextResponse.json({ data: rows });
|
|
} catch (err: any) {
|
|
return NextResponse.json({ error: err.message || 'Failed to fetch users' }, { status: err.message === 'Unauthorized' ? 401 : 500 });
|
|
}
|
|
}
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
await requireRole('admin');
|
|
const body = await request.json();
|
|
const { username, password, role = 'user' } = body;
|
|
|
|
if (!username || !password) {
|
|
return NextResponse.json({ error: 'Username and password are required' }, { status: 400 });
|
|
}
|
|
|
|
if (role !== 'admin' && role !== 'user') {
|
|
return NextResponse.json({ error: 'Role must be admin or user' }, { status: 400 });
|
|
}
|
|
|
|
const user = await createUser(username, password, role as 'admin' | 'user');
|
|
return NextResponse.json({ ok: true, user: { id: user.id, username: user.username, role: user.role } });
|
|
} catch (err: any) {
|
|
return NextResponse.json({ error: err.message || 'Failed to create user' }, { status: err.message === 'Unauthorized' ? 401 : 500 });
|
|
}
|
|
}
|