From 5f0302d25a80ca373f8f0f517309fece15e0c323 Mon Sep 17 00:00:00 2001 From: Rushil Perera Date: Sat, 6 Dec 2025 08:26:16 -0500 Subject: [PATCH] feat: Implement home feed GraphQL resolver --- src/graphql/resolvers/queries/home.ts | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/graphql/resolvers/queries/home.ts diff --git a/src/graphql/resolvers/queries/home.ts b/src/graphql/resolvers/queries/home.ts new file mode 100644 index 0000000..40f64e3 --- /dev/null +++ b/src/graphql/resolvers/queries/home.ts @@ -0,0 +1,36 @@ +import type { GraphQLContext } from "~/graphql/context"; + +import { GraphQLError } from "graphql"; +import { graphql } from "gql.tada"; +import { MediaFragment } from "~/types/title/mediaFragment"; +import { env } from "cloudflare:workers"; + +enum HomeCategory { + WATCHING, + PLANNING, +} + +export async function home(_parent: any, args: { category: HomeCategory, page?: number }, context: GraphQLContext) { + const { category, page = 1 } = args; + const { user, aniListToken } = context; + let statusFilters: string[] = []; + switch (category) { + case HomeCategory.WATCHING: + statusFilters = ['CURRENT']; + break; + case HomeCategory.PLANNING: + statusFilters = ['PLANNING', 'PAUSED', 'REPEATING']; + break; + } + + const stub = await env.ANILIST_DO.getByName("GLOBAL"); + const response = await stub.getTitles(user?.name, page, statusFilters, aniListToken); + + if (!response) { + throw new GraphQLError(`Failed to fetch ${category} titles`, { + extensions: { code: "INTERNAL_SERVER_ERROR" }, + }); + } + + return response; +} \ No newline at end of file