aboutsummaryrefslogtreecommitdiff
path: root/src/graphql/user/resolvers.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphql/user/resolvers.ts')
-rw-r--r--src/graphql/user/resolvers.ts68
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,
}
};