From f328420869cf4f86994b4eeced2419deedfe5a19 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Wed, 5 Aug 2020 13:30:24 -0400 Subject: [PATCH] Create and delete media items via GraphQL, see #28 --- src/AnimeClient/API/Kitsu/ListItem.php | 22 ++++++++------- .../Mutations/CreateFullLibraryItem.graphql | 19 +++++++++++++ .../Kitsu/Mutations/CreateLibraryItem.graphql | 27 +++++++++++++++++++ .../Kitsu/Mutations/DeleteLibraryItem.graphql | 7 +++++ .../API/Kitsu/Queries/AnimeDetails.graphql | 5 +++- .../Kitsu/Queries/AnimeDetailsById.graphql | 19 +++---------- 6 files changed, 74 insertions(+), 25 deletions(-) create mode 100644 src/AnimeClient/API/Kitsu/Mutations/CreateFullLibraryItem.graphql create mode 100644 src/AnimeClient/API/Kitsu/Mutations/CreateLibraryItem.graphql create mode 100644 src/AnimeClient/API/Kitsu/Mutations/DeleteLibraryItem.graphql diff --git a/src/AnimeClient/API/Kitsu/ListItem.php b/src/AnimeClient/API/Kitsu/ListItem.php index 0cb0ba9b..c817e24e 100644 --- a/src/AnimeClient/API/Kitsu/ListItem.php +++ b/src/AnimeClient/API/Kitsu/ListItem.php @@ -43,6 +43,16 @@ final class ListItem extends AbstractListItem { * @throws Throwable */ public function create(array $data): Request + { + return $this->requestBuilder->mutateRequest('CreateLibraryItem', [ + 'id' => $data['id'], + 'status' => strtoupper($data['status']), + 'type' => strtoupper($data['type']), + 'userId' => $data['user_id'], + ]); + } + + public function createFull(array $data): Request { $body = [ 'data' => [ @@ -93,15 +103,9 @@ final class ListItem extends AbstractListItem { */ public function delete(string $id): Request { - $authHeader = $this->getAuthHeader(); - $request = $this->requestBuilder->newRequest('DELETE', "library-entries/{$id}"); - - if ($authHeader !== NULL) - { - $request = $request->setHeader('Authorization', $authHeader); - } - - return $request->getFullRequest(); + return $this->requestBuilder->mutateRequest('DeleteLibraryItem', [ + 'id' => $id + ]); } /** diff --git a/src/AnimeClient/API/Kitsu/Mutations/CreateFullLibraryItem.graphql b/src/AnimeClient/API/Kitsu/Mutations/CreateFullLibraryItem.graphql new file mode 100644 index 00000000..fc9a7c04 --- /dev/null +++ b/src/AnimeClient/API/Kitsu/Mutations/CreateFullLibraryItem.graphql @@ -0,0 +1,19 @@ +# Create full library item +# Flesh out a library item with data - most commonly used for syncing lists +# between APIs +mutation ( + $userId: ID! + $id: ID!, + $mediaType: media_type!, + $status: MediaListStatus, +) { + createLibraryEntry (input: { + userId: $userId + mediaId: $id + mediaType: $mediaType + status: $status + }) { + mediaId + status + } +} \ No newline at end of file diff --git a/src/AnimeClient/API/Kitsu/Mutations/CreateLibraryItem.graphql b/src/AnimeClient/API/Kitsu/Mutations/CreateLibraryItem.graphql new file mode 100644 index 00000000..a769afd6 --- /dev/null +++ b/src/AnimeClient/API/Kitsu/Mutations/CreateLibraryItem.graphql @@ -0,0 +1,27 @@ +# Create minimal library item +# This is the more common use case, when adding an anime or manga to +# the user's library. +mutation ( + $userId: ID! + $id: ID!, + $type: media_type!, + $status: LibraryEntryStatus!, +) { + createLibraryEntry (input: { + userId: $userId + mediaId: $id + mediaType: $type + status: $status + }) { + libraryEntry { + id + media { + type + } + user { + id + } + status + } + } +} \ No newline at end of file diff --git a/src/AnimeClient/API/Kitsu/Mutations/DeleteLibraryItem.graphql b/src/AnimeClient/API/Kitsu/Mutations/DeleteLibraryItem.graphql new file mode 100644 index 00000000..599133c0 --- /dev/null +++ b/src/AnimeClient/API/Kitsu/Mutations/DeleteLibraryItem.graphql @@ -0,0 +1,7 @@ +mutation ($id: ID!) { + deleteLibraryEntry(input: {id: $id}) { + libraryEntry { + id + } + } +} \ No newline at end of file diff --git a/src/AnimeClient/API/Kitsu/Queries/AnimeDetails.graphql b/src/AnimeClient/API/Kitsu/Queries/AnimeDetails.graphql index f6d1c7a3..66750d88 100644 --- a/src/AnimeClient/API/Kitsu/Queries/AnimeDetails.graphql +++ b/src/AnimeClient/API/Kitsu/Queries/AnimeDetails.graphql @@ -27,8 +27,9 @@ query ($slug: String!) { character { id names { - canonical alternatives + canonical + localized } image { original { @@ -96,7 +97,9 @@ query ($slug: String!) { subtype synopsis titles { + alternatives canonical + canonicalLocale localized } totalLength diff --git a/src/AnimeClient/API/Kitsu/Queries/AnimeDetailsById.graphql b/src/AnimeClient/API/Kitsu/Queries/AnimeDetailsById.graphql index 9fa1980a..c8706649 100644 --- a/src/AnimeClient/API/Kitsu/Queries/AnimeDetailsById.graphql +++ b/src/AnimeClient/API/Kitsu/Queries/AnimeDetailsById.graphql @@ -27,8 +27,9 @@ query ($id: ID!) { character { id names { - canonical alternatives + canonical + localized } image { original { @@ -54,20 +55,6 @@ query ($id: ID!) { episodeCount episodeLength totalLength - posterImage { - original { - height - name - url - width - } - views { - height - name - url - width - } - } season sfw slug @@ -110,7 +97,9 @@ query ($id: ID!) { subtype synopsis titles { + alternatives canonical + canonicalLocale localized } totalLength