aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-01-23 21:38:21 -0800
committerFuwn <[email protected]>2026-01-23 21:38:21 -0800
commitf676b792dd0a19d40609ddbd42f65423a6c9adb6 (patch)
tree5add35d5a0a684db3a1de85002da7261f091bc26
parentfix: Add null guards and improve error messaging for user lookups (diff)
downloaddue.moe-f676b792dd0a19d40609ddbd42f65423a6c9adb6.tar.xz
due.moe-f676b792dd0a19d40609ddbd42f65423a6c9adb6.zip
fix(graphql): Resolve resolver type mismatches and improve error handling
-rw-r--r--src/graphql/user/resolvers.ts36
1 files changed, 27 insertions, 9 deletions
diff --git a/src/graphql/user/resolvers.ts b/src/graphql/user/resolvers.ts
index 0cdd01dd..123f4589 100644
--- a/src/graphql/user/resolvers.ts
+++ b/src/graphql/user/resolvers.ts
@@ -6,7 +6,8 @@ import {
removeUserBadge,
setShadowHidden,
setShadowHiddenBadge,
- updateUserBadge
+ updateUserBadge,
+ type Badge as DatabaseBadge
} from '$lib/Database/SB/User/badges';
import type { WithIndex } from '../$types';
import type { Resolvers, Badge } from './$types';
@@ -26,6 +27,21 @@ import privilegedUser from '$lib/Utility/privilegedUser';
type Context = RequestEvent<Partial<Record<string, string>>, string | null>;
+const toGraphQLBadges = (databaseBadges: DatabaseBadge[]): Badge[] =>
+ databaseBadges.map((databaseBadge) => ({
+ id: databaseBadge.id ?? 0,
+ post: databaseBadge.post ?? '',
+ image: databaseBadge.image ?? '',
+ time: databaseBadge.time ?? new Date().toISOString(),
+ hidden: databaseBadge.hidden ?? false,
+ shadow_hidden: databaseBadge.shadow_hidden ?? false,
+ click_count: databaseBadge.click_count ?? 0,
+ category: databaseBadge.category ?? null,
+ description: databaseBadge.description ?? null,
+ source: databaseBadge.source ?? null,
+ designer: databaseBadge.designer ?? null
+ }));
+
const auth = async (context: Context) => {
const userCookie = context.cookies.get('user');
@@ -47,18 +63,19 @@ const authenticatedBadgesOperation = async (
) => {
const identity = await auth(context);
- if (identity instanceof Error) return [];
+ if (identity instanceof Error) throw new Error('Unauthorized');
const authorised = privilegedUser(identity.id);
await operation(identity, authorised);
- const badges = await getUserBadges(identity.id);
+ const databaseBadges = await getUserBadges(identity.id);
+ const badges = toGraphQLBadges(databaseBadges);
return {
id: identity.id,
badges,
- preferences: {},
+ preferences: null,
badgesCount: badges.length
};
};
@@ -69,7 +86,7 @@ const authenticatedPreferencesOperation = async (
) => {
const identity = await auth(context);
- if (identity instanceof Error) return [];
+ if (identity instanceof Error) throw new Error('Unauthorized');
const authorised = privilegedUser(identity.id);
@@ -86,7 +103,8 @@ export const resolvers: WithIndex<Resolvers> = {
User: async (_, args) => {
if (!args.id) return null;
- const badges = await getUserBadges(args.id);
+ const databaseBadges = await getUserBadges(args.id);
+ const badges = toGraphQLBadges(databaseBadges);
return {
id: args.id,
@@ -96,11 +114,11 @@ export const resolvers: WithIndex<Resolvers> = {
};
},
badges: async (_, args) => {
- if (!args.id) return null;
+ if (!args.id) return [];
- const badges = await getUserBadges(args.id, args.page || 0, args.size || 0);
+ const databaseBadges = await getUserBadges(args.id, args.page || 0, args.size || 0);
- return badges;
+ return toGraphQLBadges(databaseBadges);
}
},
Mutation: {