diff options
Diffstat (limited to 'lib/useAnilist.js')
| -rw-r--r-- | lib/useAnilist.js | 82 |
1 files changed, 77 insertions, 5 deletions
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, }; } |