diff options
| author | Fuwn <[email protected]> | 2024-10-06 03:49:02 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-10-06 03:49:02 -0700 |
| commit | ded5e5bf084ce424c05066ad9c6f418672345aac (patch) | |
| tree | b620bf9098ad4bb3139a0348cdb5270f2621ac5d /src/graphql | |
| parent | feat(badges): move badge operations to graphql (diff) | |
| download | due.moe-ded5e5bf084ce424c05066ad9c6f418672345aac.tar.xz due.moe-ded5e5bf084ce424c05066ad9c6f418672345aac.zip | |
feat(badges): use preferences graphql api
Diffstat (limited to 'src/graphql')
| -rw-r--r-- | src/graphql/user/resolvers.ts | 68 | ||||
| -rw-r--r-- | src/graphql/user/schema.graphql | 34 |
2 files changed, 86 insertions, 16 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, } }; diff --git a/src/graphql/user/schema.graphql b/src/graphql/user/schema.graphql index 1e54f866..d68e7fd9 100644 --- a/src/graphql/user/schema.graphql +++ b/src/graphql/user/schema.graphql @@ -19,23 +19,43 @@ type Mutation { ): [Badge]! deleteBadge(id: Int!): [Badge]! pruneUserBadges: [Badge]! + toggleHideMissingBadges: Preferences + toggleHideAWCBadges: Preferences + setBadgeWallCSS(css: String!): Preferences + togglePinnedBadgeWallCategory(category: String!): Preferences + setPinnedBadgeWallCategories(categories: [String!]!): Preferences + setBiography(biography: String!): Preferences + togglePinnedHololiveStream(stream: String!): Preferences } type User { id: Int! badges: [Badge]! + preferences: Preferences } type Badge { - post: String - image: String + post: String! + image: String! description: String - id: Int - time: String + id: Int! + time: String! category: String - hidden: Boolean + hidden: Boolean! source: String designer: String - shadow_hidden: Boolean - click_count: Int + shadow_hidden: Boolean! + click_count: Int! +} + +type Preferences { + created_at: String! + updated_at: String! + user_id: Int! + pinned_hololive_streams: [String]! + hide_missing_badges: Boolean! + biography: String + badge_wall_css: String! + hide_awc_badges: Boolean! + pinned_badge_wall_categories: [String]! } |