diff --git a/src/controllers/auth/anilist/getUser.ts b/src/controllers/auth/anilist/getUser.ts index 6e03812..5624a0d 100644 --- a/src/controllers/auth/anilist/getUser.ts +++ b/src/controllers/auth/anilist/getUser.ts @@ -8,7 +8,7 @@ export async function getUser(aniListToken: string): Promise { let data; try { - data = await stub.getUser(aniListToken); + data = await stub.getUserProfile(aniListToken); } catch (e: any) { if (e.message.includes("401")) { return null; diff --git a/src/libs/anilist/anilist-do.ts b/src/libs/anilist/anilist-do.ts index edeb72e..22c1117 100644 --- a/src/libs/anilist/anilist-do.ts +++ b/src/libs/anilist/anilist-do.ts @@ -10,6 +10,7 @@ import { GetTitleQuery, GetTrendingTitlesQuery, GetUpcomingTitlesQuery, + GetUserProfileQuery, GetUserQuery, MarkEpisodeAsWatchedMutation, MarkTitleAsWatchedMutation, @@ -215,7 +216,25 @@ export class AnilistDurableObject extends DurableObject { } async getUser(token: string): Promise { - const data = await this.fetchFromAnilist(GetUserQuery, { token }, token); + const storageKey = `user:${token}`; + // 1 month + const TTL = 60 * 60 * 24 * 30 * 1000; + return this.handleCachedRequest( + storageKey, + async () => { + const data = await this.fetchFromAnilist(GetUserQuery, {}, token); + return data?.Viewer; + }, + TTL, + ); + } + + async getUserProfile(token: string): Promise { + const data = await this.fetchFromAnilist( + GetUserProfileQuery, + { token }, + token, + ); return data?.Viewer; } diff --git a/src/libs/anilist/queries.ts b/src/libs/anilist/queries.ts index ec8af6a..08dd640 100644 --- a/src/libs/anilist/queries.ts +++ b/src/libs/anilist/queries.ts @@ -98,6 +98,15 @@ export const MarkTitleAsWatchedMutation = graphql(` export const GetUserQuery = graphql(` query GetUser { + Viewer { + id + name + } + } +`); + +export const GetUserProfileQuery = graphql(` + query GetUserProfile { Viewer { id name