aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-10-05 19:38:02 -0700
committerFuwn <[email protected]>2024-10-05 19:40:08 -0700
commit37e76927cc72baad03c2ef200351aafeb4ea1e7e (patch)
treef755d58ada1f3a37e3041ef75c231a847bb639b5 /src
parentfix(feeds): oauth refresh url (diff)
downloaddue.moe-37e76927cc72baad03c2ef200351aafeb4ea1e7e.tar.xz
due.moe-37e76927cc72baad03c2ef200351aafeb4ea1e7e.zip
feat(graphql): add subtitles
Diffstat (limited to 'src')
-rw-r--r--src/graphql/anime/index.ts4
-rw-r--r--src/graphql/anime/resolvers.ts22
-rw-r--r--src/graphql/anime/schema.graphql29
-rw-r--r--src/graphql/server.ts3
4 files changed, 57 insertions, 1 deletions
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<Resolvers> = {
+ 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;