From 37e76927cc72baad03c2ef200351aafeb4ea1e7e Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sat, 5 Oct 2024 19:38:02 -0700 Subject: feat(graphql): add subtitles --- src/graphql/anime/index.ts | 4 ++++ src/graphql/anime/resolvers.ts | 22 ++++++++++++++++++++++ src/graphql/anime/schema.graphql | 29 +++++++++++++++++++++++++++++ src/graphql/server.ts | 3 ++- 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/graphql/anime/index.ts create mode 100644 src/graphql/anime/resolvers.ts create mode 100644 src/graphql/anime/schema.graphql (limited to 'src/graphql') diff --git a/src/graphql/anime/index.ts b/src/graphql/anime/index.ts new file mode 100644 index 00000000..925a7ece --- /dev/null +++ b/src/graphql/anime/index.ts @@ -0,0 +1,4 @@ +import typeDefs from './schema.graphql?raw'; +import { resolvers } from './resolvers'; + +export default { typeDefs, resolvers }; diff --git a/src/graphql/anime/resolvers.ts b/src/graphql/anime/resolvers.ts new file mode 100644 index 00000000..7d04082d --- /dev/null +++ b/src/graphql/anime/resolvers.ts @@ -0,0 +1,22 @@ +import type { WithIndex } from '../$types'; +import type { Resolvers } from './$types'; + +export const resolvers: WithIndex = { + Query: { + Anime: async (_, args) => { + const timezone = args.timezone || 'Asia/Tokyo'; + + return { + subtitles: { + timezone, + schedule: Object.fromEntries( + Object.entries( + (await (await fetch(`https://subsplease.org/api/?f=schedule&tz=${timezone}`)).json()) + .schedule + ).map(([key, value]) => [key.toLowerCase(), value]) + ) + } + }; + } + } +}; diff --git a/src/graphql/anime/schema.graphql b/src/graphql/anime/schema.graphql new file mode 100644 index 00000000..d5774966 --- /dev/null +++ b/src/graphql/anime/schema.graphql @@ -0,0 +1,29 @@ +type Query { + Anime(timezone: String): Anime! +} + +type Anime { + subtitles: Subtitles +} + +type Subtitles { + timezone: String + schedule: SubtitleSchedule +} + +type SubtitleSchedule { + monday: [Subtitle] + tuesday: [Subtitle] + wednesday: [Subtitle] + thursday: [Subtitle] + friday: [Subtitle] + saturday: [Subtitle] + sunday: [Subtitle] +} + +type Subtitle { + title: String + page: String + image_url: String + time: String +} diff --git a/src/graphql/server.ts b/src/graphql/server.ts index 2d74d878..2dc183dc 100644 --- a/src/graphql/server.ts +++ b/src/graphql/server.ts @@ -1,7 +1,8 @@ import { createSchema, createServer } from 'sveltekit-graphql'; import userModule from './user'; +import animeModule from './anime'; -const schema = createSchema([userModule]); +const schema = createSchema([userModule, animeModule]); const server = createServer(schema); export default server; -- cgit v1.2.3