From b365d89a11adf40d37b78292f121b890e960d0e8 Mon Sep 17 00:00:00 2001 From: Factiven Date: Thu, 13 Apr 2023 16:03:57 +0700 Subject: update 2nd --- lib/useAnilist.js | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 77 insertions(+), 5 deletions(-) (limited to 'lib/useAnilist.js') diff --git a/lib/useAnilist.js b/lib/useAnilist.js index b95293f..12317f8 100644 --- a/lib/useAnilist.js +++ b/lib/useAnilist.js @@ -4,6 +4,8 @@ export function useAniList(session) { const [media, setMedia] = useState([]); // const [aniAdvanceSearch, setAniAdvanceSearch] = useState([]); + // Queries + const queryMedia = ` query ($username: String) { MediaListCollection(userName: $username, type: ANIME) { @@ -62,6 +64,29 @@ export function useAniList(session) { } `; + // Mutations + + const completeQuery = ` + mutation($mediaId: Int ) { + SaveMediaListEntry(mediaId: $mediaId, status: COMPLETED) { + id + mediaId + status + } + } + `; + + const progressWatched = ` + mutation($mediaId: Int, $progress: Int) { + SaveMediaListEntry(mediaId: $mediaId, progress: $progress) { + id + mediaId + progress + status + } + } + `; + const username = session?.user?.name; const accessToken = session?.user?.token; @@ -89,9 +114,55 @@ export function useAniList(session) { fetchData(); }, [queryMedia, username, accessToken]); - // useEffect(() => { - // async function fetchData() {} - // }); + async function markComplete(mediaId) { + if (!accessToken) return; + const response = await fetch("https://graphql.anilist.co/", { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${accessToken}`, + }, + body: JSON.stringify({ + query: completeQuery, + variables: { + mediaId: mediaId, + }, + }), + }); + if (response.ok) { + const data = await response.json(); + console.log({ Complete: data }); + } else if (response.status === 401) { + console.log("Unauthorized"); + } else if (response.status === 400) { + console.log("validation error"); + } + } + + async function markProgress(mediaId, progress) { + if (!accessToken) return; + const response = await fetch("https://graphql.anilist.co/", { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${accessToken}`, + }, + body: JSON.stringify({ + query: progressWatched, + variables: { + mediaId: mediaId, + progress: progress, + }, + }), + }); + if (response.ok) { + console.log("Progress Updated"); + } else if (response.status === 401) { + console.log("Unauthorized"); + } else if (response.status === 400) { + console.log("validation error"); + } + } async function aniAdvanceSearch( search, @@ -123,14 +194,15 @@ export function useAniList(session) { }); const datas = await response.json(); - console.log(search); + // console.log(search); const data = datas.data.Page; return data; } return { media, - // updateMediaEntry, + markComplete, aniAdvanceSearch, + markProgress, }; } -- cgit v1.2.3