import { json } from '@sveltejs/kit'; import type { RequestHandler } from './$types'; import { requireAdmin } from '$lib/server/admin/auth.js'; import { createLocalUser, deleteUser, listUsers, updateUser } from '$lib/server/users.js'; export const GET: RequestHandler = async (event) => { requireAdmin((await event.locals.auth())?.user); return json(listUsers()); }; export const PATCH: RequestHandler = async (event) => { requireAdmin((await event.locals.auth())?.user); const body = await event.request.json(); const { id, username, full_name, email } = body as { id?: string; username?: string; full_name?: string; email?: string | null; }; if (!id?.trim() || !username?.trim() || !full_name?.trim()) { return json({ error: 'id, username and full_name required' }, { status: 400 }); } updateUser({ id: id.trim(), username, fullName: full_name, email }); return json({ ok: true }); }; export const POST: RequestHandler = async (event) => { requireAdmin((await event.locals.auth())?.user); const body = await event.request.json(); const { username, full_name, email, password } = body as { username?: string; full_name?: string; email?: string | null; password?: string; }; if (!username?.trim() || !full_name?.trim() || !password?.trim()) { return json({ error: 'username, full_name and password required' }, { status: 400 }); } try { const user = await createLocalUser({ username: username.trim(), fullName: full_name.trim(), email, password }); return json(user); } catch (error) { return json( { error: error instanceof Error ? error.message : 'Failed to create user' }, { status: 400 } ); } }; export const DELETE: RequestHandler = async (event) => { requireAdmin((await event.locals.auth())?.user); const id = event.url.searchParams.get('id')?.trim(); if (!id) return json({ error: 'id required' }, { status: 400 }); deleteUser(id); return json({ ok: true }); };