import { Schema } from "effect"; import { userIdentity } from "$lib/Data/AniList/identity"; import { getUserPreferences, setBiography, setCSS, setPinnedBadgeWallCategories, toggleHideAWCBadges, toggleHideMissingBadges, togglePinnedBadgeWallCategory, } from "$lib/Database/SB/User/preferences"; import { decodeAuthCookieOrThrow } from "$lib/Effect/authCookie"; import { decodeRequestJsonOrThrow } from "$lib/Effect/requestBody"; import { appOriginHeaders } from "$lib/Utility/appOrigin"; const unauthorised = new Response("Unauthorised", { status: 401 }); const authenticatedUserId = async (cookies: { get: (name: string) => string | undefined; }) => { const userCookie = cookies.get("user"); if (!userCookie) return null; return (await userIdentity(decodeAuthCookieOrThrow(userCookie))).id; }; export const GET = async ({ url }) => { const requestedUserId = Number(url.searchParams.get("id") || 0); const preferences = await getUserPreferences(requestedUserId); return Response.json(preferences ? preferences : {}, { headers: appOriginHeaders(), }); }; export const PUT = async ({ url, cookies, request }) => { const userId = await authenticatedUserId(cookies); if (!userId) return unauthorised; if (url.searchParams.get("toggleHideMissingBadges") !== null) return Response.json(await toggleHideMissingBadges(userId), { headers: appOriginHeaders(), }); if (url.searchParams.get("toggleHideAWCBadges") !== null) return Response.json(await toggleHideAWCBadges(userId), { headers: appOriginHeaders(), }); if (url.searchParams.get("badgeWallCSS") !== null) return Response.json(await setCSS(userId, await request.text()), { headers: appOriginHeaders(), }); if (url.searchParams.get("toggleCategory") !== null) return Response.json( await togglePinnedBadgeWallCategory( userId, url.searchParams.get("toggleCategory") || "", ), { headers: appOriginHeaders(), }, ); if (url.searchParams.get("setCategories") !== null) return Response.json( await setPinnedBadgeWallCategories(userId, [ ...(await decodeRequestJsonOrThrow( request, Schema.Array(Schema.String), )), ]), { headers: appOriginHeaders(), }, ); if (url.searchParams.get("biography") !== null) return Response.json( await setBiography(userId, (await request.text()).slice(0, 3000)), { headers: appOriginHeaders(), }, ); return Response.json( await getUserPreferences(Number(url.searchParams.get("id") || 0)), { headers: appOriginHeaders(), }, ); };