aboutsummaryrefslogtreecommitdiff
path: root/lib/useAnilist.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/useAnilist.js')
-rw-r--r--lib/useAnilist.js82
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,
};
}