diff options
Diffstat (limited to 'src/graphql/user/resolvers.ts')
| -rw-r--r-- | src/graphql/user/resolvers.ts | 68 |
1 files changed, 59 insertions, 9 deletions
diff --git a/src/graphql/user/resolvers.ts b/src/graphql/user/resolvers.ts index 1e5b9ec0..66e3f1a2 100644 --- a/src/graphql/user/resolvers.ts +++ b/src/graphql/user/resolvers.ts @@ -12,6 +12,7 @@ import type { WithIndex } from '../$types'; import type { Resolvers, Badge } from './$types'; import authorisedJson from '$lib/Data/Static/authorised.json'; import type { RequestEvent } from '@sveltejs/kit'; +import { getUserPreferences, setBiography, setCSS, setPinnedBadgeWallCategories, toggleHideAWCBadges, toggleHideMissingBadges, toggleHololiveStreamPinning, togglePinnedBadgeWallCategory, type UserPreferences } from '$lib/Database/SB/User/preferences'; type Context = RequestEvent<Partial<Record<string, string>>, string | null>; @@ -30,7 +31,7 @@ const auth = async (context: Context) => { }); }; -const authenticatedOperation = async ( +const authenticatedBadgesOperation = async ( context: Context, operation: (identity: UserIdentity, authorised: boolean) => void ) => { @@ -45,29 +46,43 @@ const authenticatedOperation = async ( return await getUserBadges(identity.id); }; +const authenticatedPreferencesOperation = async ( + context: Context, + operation: (identity: UserIdentity, authorised: boolean) => Promise<UserPreferences | null> +) => { + const identity = await auth(context); + + if (identity instanceof Error) return []; + + const authorised = authorisedJson.includes(identity.id); + + return operation(identity, authorised) as Promise<UserPreferences> +}; + export const resolvers: WithIndex<Resolvers> = { Query: { User: async (_, args) => { return { id: args.id, - badges: (await getUserBadges(args.id)) as Badge[] + badges: (await getUserBadges(args.id)) as Badge[], + preferences: await getUserPreferences(args.id) }; } }, Mutation: { shadowHideBadges: async (_, args, context) => - await authenticatedOperation( + await authenticatedBadgesOperation( context, async (_, authorised) => await setShadowHidden(args.userId, authorised) ), shadowHideBadge: async (_, args, context) => - await authenticatedOperation( + await authenticatedBadgesOperation( context, async () => await setShadowHiddenBadge(args.id, args.state == null ? true : args.state) ), hideBadge: async (_, args, context) => - await authenticatedOperation(context, async (identity) => { + await authenticatedBadgesOperation(context, async (identity) => { const allBadges = await getUserBadges(identity.id); const category = args.category || ''; @@ -89,7 +104,7 @@ export const resolvers: WithIndex<Resolvers> = { ); }), updateBadge: async (_, args, context) => - await authenticatedOperation(context, async (identity) => { + await authenticatedBadgesOperation(context, async (identity) => { const badge = { post: args.post || undefined, image: args.image || undefined, @@ -108,14 +123,49 @@ export const resolvers: WithIndex<Resolvers> = { } }), deleteBadge: async (_, args, context) => - await authenticatedOperation( + await authenticatedBadgesOperation( context, async (identity) => await removeUserBadge(identity.id, args.id) ), pruneUserBadges: async (_, context) => - await authenticatedOperation( + await authenticatedBadgesOperation( context as Context, async (identity) => await removeAllUserBadges(identity.id) - ) + ), + toggleHideMissingBadges: async (_, _args, context) => + await authenticatedPreferencesOperation( + context as Context, + async (identity) => await toggleHideMissingBadges(identity.id) + ) as UserPreferences, + toggleHideAWCBadges: async (_, _args, context) => + await authenticatedPreferencesOperation( + context as Context, + async (identity) => await toggleHideAWCBadges(identity.id) + ) as UserPreferences, + setBadgeWallCSS: async (_, args, context) => + await authenticatedPreferencesOperation( + context as Context, + async (identity) => await setCSS(identity.id, args.css) + ) as UserPreferences, + togglePinnedBadgeWallCategory: async (_, args, context) => + await authenticatedPreferencesOperation( + context as Context, + async (identity) => await togglePinnedBadgeWallCategory(identity.id, args.category) + ) as UserPreferences, + setPinnedBadgeWallCategories: async (_, args, context) => + await authenticatedPreferencesOperation( + context as Context, + async (identity) => await setPinnedBadgeWallCategories(identity.id, args.categories) + ) as UserPreferences, + setBiography: async (_, args, context) => + await authenticatedPreferencesOperation( + context as Context, + async (identity) => await setBiography(identity.id, args.biography.slice(0, 3000)) + ) as UserPreferences, + togglePinnedHololiveStream: async (_, args, context) => + await authenticatedPreferencesOperation( + context as Context, + async (identity) => await toggleHololiveStreamPinning(identity.id, args.stream) + ) as UserPreferences, } }; |