From 4f07a27df74775e35775d34e800abfd683c5fa86 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sat, 17 Feb 2024 21:50:17 -0800 Subject: feat(badges): optionally hide missing badges --- src/routes/api/preferences/+server.ts | 18 +- src/routes/api/preferences/badges/+server.ts | 31 ++ src/routes/user/[user]/+page.svelte | 24 ++ src/routes/user/[user]/badges/+page.svelte | 454 ++++++++++++++------------- 4 files changed, 304 insertions(+), 223 deletions(-) create mode 100644 src/routes/api/preferences/badges/+server.ts (limited to 'src/routes') diff --git a/src/routes/api/preferences/+server.ts b/src/routes/api/preferences/+server.ts index a36bd236..0aaaa52e 100644 --- a/src/routes/api/preferences/+server.ts +++ b/src/routes/api/preferences/+server.ts @@ -1,4 +1,4 @@ -import { getUserPreferences } from '$lib/Database/userPreferences'; +import { getUserPreferences, toggleHideMissingBadges } from '$lib/Database/userPreferences'; export const GET = async ({ url }) => Response.json(await getUserPreferences(Number(url.searchParams.get('id') || 0)), { @@ -6,3 +6,19 @@ export const GET = async ({ url }) => 'Access-Control-Allow-Origin': 'https://due.moe' } }); + +export const PUT = async ({ url }) => { + if (url.searchParams.get('toggleHideMissingBadges') !== null) { + return Response.json(await toggleHideMissingBadges(Number(url.searchParams.get('id') || 0)), { + headers: { + 'Access-Control-Allow-Origin': 'https://due.moe' + } + }); + } + + return Response.json(await getUserPreferences(Number(url.searchParams.get('id') || 0)), { + headers: { + 'Access-Control-Allow-Origin': 'https://due.moe' + } + }); +}; diff --git a/src/routes/api/preferences/badges/+server.ts b/src/routes/api/preferences/badges/+server.ts new file mode 100644 index 00000000..24d4924b --- /dev/null +++ b/src/routes/api/preferences/badges/+server.ts @@ -0,0 +1,31 @@ +import { userIdentity } from '$lib/Data/AniList/identity'; +import { toggleHideMissingBadges } from '$lib/Database/userPreferences'; + +const unauthorised = new Response('Unauthorised', { status: 401 }); + +export const PUT = async ({ cookies }) => { + const userCookie = cookies.get('user'); + + if (!userCookie) return unauthorised; + + const user = JSON.parse(userCookie); + + return Response.json( + await toggleHideMissingBadges( + ( + await userIdentity({ + tokenType: user['token_type'], + expiresIn: user['expires_in'], + accessToken: user['access_token'], + refreshToken: user['refresh_token'] + }) + ).id + ), + { + headers: { + method: 'PUT', + 'Access-Control-Allow-Origin': 'https://due.moe' + } + } + ); +}; diff --git a/src/routes/user/[user]/+page.svelte b/src/routes/user/[user]/+page.svelte index 4103b7de..c93647f4 100644 --- a/src/routes/user/[user]/+page.svelte +++ b/src/routes/user/[user]/+page.svelte @@ -10,6 +10,7 @@ import authorisedUsers from '$lib/Data/Static/authorised.json'; import tooltip from '$lib/Tooltip/tooltip.js'; import AnimeRateLimited from '$lib/Error/AnimeRateLimited.svelte'; + import identity from '$stores/identity'; export let data; @@ -120,6 +121,29 @@ {/if} + + {#if userData && userData.id === $identity.id} + {#await fetch(root(`/api/preferences?id=${userData.id}`)) then rawPreferences} + {#await rawPreferences.json() then preferences} +

+ +

+ User Preferences + + { + if (userData) + fetch(root(`/api/preferences?id=${userData.id}&toggleHideMissingBadges`), { + method: 'PUT' + }); + }} + checked={preferences.hide_missing_badges} + /> Hide missing badges from Badge Wall +
+ {/await} + {/await} + {/if} {/if}