36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
import { json, type RequestHandler } from '@sveltejs/kit';
|
|
import { getSessionUser, SESSION_COOKIE, upsertUser } from '$lib/server/auth';
|
|
|
|
export const GET: RequestHandler = async ({ cookies }) => {
|
|
const user = getSessionUser(cookies.get(SESSION_COOKIE));
|
|
return json({ user });
|
|
};
|
|
|
|
export const PUT: RequestHandler = async ({ cookies, request }) => {
|
|
const user = getSessionUser(cookies.get(SESSION_COOKIE));
|
|
if (!user) return json({ error: 'authentication required' }, { status: 401 });
|
|
|
|
let payload: { display_name?: string };
|
|
try {
|
|
payload = await request.json();
|
|
} catch {
|
|
return json({ error: 'invalid json' }, { status: 400 });
|
|
}
|
|
|
|
const newName = (payload.display_name ?? '').toString().trim();
|
|
if (newName.length > 80) {
|
|
return json({ error: 'display_name must be ≤80 chars' }, { status: 400 });
|
|
}
|
|
|
|
upsertUser({
|
|
id: user.id,
|
|
username: user.username,
|
|
global_name: user.global_name,
|
|
avatar: user.avatar,
|
|
email: user.email,
|
|
display_name: newName || null
|
|
} as any);
|
|
|
|
return json({ user: { ...user, display_name: newName || null } });
|
|
};
|