From 732dcbfddfca790b1b64c8c3d064842682f318bb Mon Sep 17 00:00:00 2001 From: Irfan Date: Sat, 1 Aug 2020 12:05:45 +0500 Subject: [PATCH] refactor user anime/manga reviews + update schema [ci skip] --- src/Model/Anime/AnimeReview.php | 2 +- src/Model/Manga/MangaReview.php | 2 +- .../Recommendations/RecentRecommendations.php | 4 +- .../Recommendations/UserRecommendations.php | 2 +- src/Model/Reviews/AnimeReview.php | 2 +- src/Model/Reviews/MangaReview.php | 2 +- .../Reviews/Recent/RecentAnimeReview.php | 2 +- .../Reviews/Recent/RecentMangaReview.php | 2 +- src/Model/Reviews/RecentReviews.php | 2 +- src/Model/User/Reviews/MangaReview.php | 51 -------- .../{AnimeReview.php => UserAnimeReview.php} | 31 ++--- src/Model/User/Reviews/UserMangaReview.php | 116 ++++++++++++++++++ .../{Reviews.php => Reviews/UserReviews.php} | 16 ++- src/MyAnimeList/MalClient.php | 7 +- src/Parser/Reviews/AnimeReviewParser.php | 10 +- src/Parser/Reviews/MangaReviewParser.php | 12 +- src/Parser/Reviews/ReviewerParser.php | 6 +- .../UserReviewsParser.php} | 18 +-- 18 files changed, 171 insertions(+), 116 deletions(-) delete mode 100644 src/Model/User/Reviews/MangaReview.php rename src/Model/User/Reviews/{AnimeReview.php => UserAnimeReview.php} (53%) create mode 100644 src/Model/User/Reviews/UserMangaReview.php rename src/Model/User/{Reviews.php => Reviews/UserReviews.php} (74%) rename src/Parser/User/{ReviewsParser.php => Reviews/UserReviewsParser.php} (69%) diff --git a/src/Model/Anime/AnimeReview.php b/src/Model/Anime/AnimeReview.php index a835f1ed..170feb4f 100644 --- a/src/Model/Anime/AnimeReview.php +++ b/src/Model/Anime/AnimeReview.php @@ -7,7 +7,7 @@ use Jikan\Parser\Reviews\AnimeReviewParser; /** - * Class AnimeReview + * Class UserAnimeReview * * @package Jikan\Model */ diff --git a/src/Model/Manga/MangaReview.php b/src/Model/Manga/MangaReview.php index cd58af9e..c1a06d48 100644 --- a/src/Model/Manga/MangaReview.php +++ b/src/Model/Manga/MangaReview.php @@ -7,7 +7,7 @@ use Jikan\Parser\Reviews\MangaReviewParser; /** - * Class MangaReview + * Class UserMangaReview * * @package Jikan\Model */ diff --git a/src/Model/Recommendations/RecentRecommendations.php b/src/Model/Recommendations/RecentRecommendations.php index 3b8dd55b..96d04f36 100644 --- a/src/Model/Recommendations/RecentRecommendations.php +++ b/src/Model/Recommendations/RecentRecommendations.php @@ -4,13 +4,13 @@ use Jikan\Model\Common\Collection\Pagination; use Jikan\Model\Common\Collection\Results; -use Jikan\Model\User\Reviews; +use Jikan\Model\User\UserReviews; use Jikan\Parser; /** * Class RecentRecommendations * - * @package Jikan\Model\ReviewsParser\RecentReviews + * @package Jikan\Model\UserReviewsParser\RecentReviews */ class RecentRecommendations extends Results implements Pagination { diff --git a/src/Model/Recommendations/UserRecommendations.php b/src/Model/Recommendations/UserRecommendations.php index 73412a46..fb5cdad3 100644 --- a/src/Model/Recommendations/UserRecommendations.php +++ b/src/Model/Recommendations/UserRecommendations.php @@ -9,7 +9,7 @@ /** * Class UserRecommendations * - * @package Jikan\Model\ReviewsParser\RecentReviews + * @package Jikan\Model\UserReviewsParser\RecentReviews */ class UserRecommendations extends Results implements Pagination { diff --git a/src/Model/Reviews/AnimeReview.php b/src/Model/Reviews/AnimeReview.php index 7a44f928..e4b9d2fe 100644 --- a/src/Model/Reviews/AnimeReview.php +++ b/src/Model/Reviews/AnimeReview.php @@ -5,7 +5,7 @@ use Jikan\Model\Anime\AnimeReviewScores; /** - * Class AnimeReview + * Class UserAnimeReview * * @package Jikan\Model */ diff --git a/src/Model/Reviews/MangaReview.php b/src/Model/Reviews/MangaReview.php index 6aeddc1e..51eb1e09 100644 --- a/src/Model/Reviews/MangaReview.php +++ b/src/Model/Reviews/MangaReview.php @@ -5,7 +5,7 @@ use Jikan\Model\Manga\MangaReviewScores; /** - * Class AnimeReview + * Class UserAnimeReview * * @package Jikan\Model */ diff --git a/src/Model/Reviews/Recent/RecentAnimeReview.php b/src/Model/Reviews/Recent/RecentAnimeReview.php index e7f4a795..a2e69f4e 100644 --- a/src/Model/Reviews/Recent/RecentAnimeReview.php +++ b/src/Model/Reviews/Recent/RecentAnimeReview.php @@ -8,7 +8,7 @@ use Jikan\Parser\Reviews\AnimeReviewParser; /** - * Class AnimeReview + * Class UserAnimeReview * * @package Jikan\Model */ diff --git a/src/Model/Reviews/Recent/RecentMangaReview.php b/src/Model/Reviews/Recent/RecentMangaReview.php index bbe40803..20284da3 100644 --- a/src/Model/Reviews/Recent/RecentMangaReview.php +++ b/src/Model/Reviews/Recent/RecentMangaReview.php @@ -8,7 +8,7 @@ use Jikan\Parser\Reviews\MangaReviewParser; /** - * Class MangaReview + * Class UserMangaReview * * @package Jikan\Model */ diff --git a/src/Model/Reviews/RecentReviews.php b/src/Model/Reviews/RecentReviews.php index 1027024d..c9ef08cb 100644 --- a/src/Model/Reviews/RecentReviews.php +++ b/src/Model/Reviews/RecentReviews.php @@ -10,7 +10,7 @@ /** * Class RecentReviews * - * @package Jikan\Model\ReviewsParser\RecentReviews + * @package Jikan\Model\UserReviewsParser\RecentReviews */ class RecentReviews extends Results implements Pagination { diff --git a/src/Model/User/Reviews/MangaReview.php b/src/Model/User/Reviews/MangaReview.php deleted file mode 100644 index 337c23e4..00000000 --- a/src/Model/User/Reviews/MangaReview.php +++ /dev/null @@ -1,51 +0,0 @@ -malId = $parser->getId(); - $instance->url = $parser->getUrl(); - $instance->title = $parser->getTitle(); - $instance->images = CommonImageResource::factory($parser->getImageUrl()); - $instance->type = $parser->getType(); - $instance->votes = $parser->getHelpfulCount(); - $instance->date = $parser->getDate(); - $instance->scores = $parser->getMangaScores(); - $instance->review = $parser->getContent(); - - return $instance; - } -} diff --git a/src/Model/User/Reviews/AnimeReview.php b/src/Model/User/Reviews/UserAnimeReview.php similarity index 53% rename from src/Model/User/Reviews/AnimeReview.php rename to src/Model/User/Reviews/UserAnimeReview.php index 79a74265..0c6382ac 100644 --- a/src/Model/User/Reviews/AnimeReview.php +++ b/src/Model/User/Reviews/UserAnimeReview.php @@ -3,49 +3,42 @@ namespace Jikan\Model\User\Reviews; use Jikan\Model\Common\AnimeMeta; -use Jikan\Model\Resource\CommonImageResource\CommonImageResource; -use Jikan\Parser\Anime\AnimeReviewParser; +use Jikan\Model\Reviews\AnimeReview; +use Jikan\Model\Reviews\Reviewer; +use Jikan\Parser\Reviews\AnimeReviewParser; /** - * Class AnimeReview + * Class UserAnimeReview * * @package Jikan\Model */ -class AnimeReview extends \Jikan\Model\Reviews\AnimeReview +class UserAnimeReview extends AnimeReview { /** - * @var string + * @var AnimeMeta */ - private $title; - /** - * @var CommonImageResource - */ - private $images; + private $anime; + /** - * Create an instance from an AnimeReviewParser parser - * * @param AnimeReviewParser $parser - * - * @return AnimeReview + * @return UserAnimeReview * @throws \Exception - * @throws \RuntimeException - * @throws \InvalidArgumentException */ - public static function fromParser(AnimeReviewParser $parser): AnimeReview + public static function fromParser(AnimeReviewParser $parser): UserAnimeReview { $instance = new self(); + $instance->anime = $parser->getAnime(); $instance->malId = $parser->getId(); $instance->url = $parser->getUrl(); - $instance->title = $parser->getTitle(); - $instance->images = CommonImageResource::factory($parser->getImageUrl()); $instance->type = $parser->getType(); $instance->votes = $parser->getHelpfulCount(); $instance->date = $parser->getDate(); $instance->scores = $parser->getAnimeScores(); $instance->review = $parser->getContent(); + $instance->episodesWatched = $parser->getEpisodesWatched(); return $instance; } diff --git a/src/Model/User/Reviews/UserMangaReview.php b/src/Model/User/Reviews/UserMangaReview.php new file mode 100644 index 00000000..fab80ca2 --- /dev/null +++ b/src/Model/User/Reviews/UserMangaReview.php @@ -0,0 +1,116 @@ +chaptersRead; + } + + /** + * @return MangaReviewScores + */ + public function getScores(): MangaReviewScores + { + return $this->scores; + } + + /** + * @return int + */ + public function getMalId(): int + { + return $this->malId; + } + + /** + * @return string + */ + public function getUrl(): string + { + return $this->url; + } + + /** + * @return string + */ + public function getType(): string + { + return $this->type; + } + + /** + * @return int + */ + public function getVotes(): int + { + return $this->votes; + } + + /** + * @return \DateTimeImmutable + */ + public function getDate(): \DateTimeImmutable + { + return $this->date; + } + + /** + * @return string + */ + public function getReview(): string + { + return $this->review; + } + + /** + * @return MangaMeta + */ + public function getManga(): MangaMeta + { + return $this->manga; + } + + /** + * @var MangaMeta + */ + private $manga; + + /** + * @param MangaReviewParser $parser + * @return UserAnimeReview + * @throws \Exception + */ + public static function fromParser(MangaReviewParser $parser): UserMangaReview + { + $instance = new self(); + + $instance->manga = $parser->getManga(); + $instance->malId = $parser->getId(); + $instance->url = $parser->getUrl(); + $instance->type = $parser->getType(); + $instance->votes = $parser->getHelpfulCount(); + $instance->date = $parser->getDate(); + $instance->scores = $parser->getMangaScores(); + $instance->review = $parser->getContent(); + $instance->chaptersRead = $parser->getChaptersRead(); + + return $instance; + } +} diff --git a/src/Model/User/Reviews.php b/src/Model/User/Reviews/UserReviews.php similarity index 74% rename from src/Model/User/Reviews.php rename to src/Model/User/Reviews/UserReviews.php index 6f386afe..68197db9 100644 --- a/src/Model/User/Reviews.php +++ b/src/Model/User/Reviews/UserReviews.php @@ -1,19 +1,17 @@ results = $parser->getReviews(); diff --git a/src/MyAnimeList/MalClient.php b/src/MyAnimeList/MalClient.php index 8346df44..9a92a5f6 100644 --- a/src/MyAnimeList/MalClient.php +++ b/src/MyAnimeList/MalClient.php @@ -1168,16 +1168,15 @@ public function getUsernameById(Request\User\UsernameByIdRequest $request) : Mod /** * @param Request\User\UserReviewsRequest $request - * @return Model\User\Reviews + * @return Model\User\Reviews\UserReviews * @throws BadResponseException * @throws ParserException */ - public function getUserReviews(Request\User\UserReviewsRequest $request) : Model\User\Reviews + public function getUserReviews(Request\User\UserReviewsRequest $request) : Model\User\Reviews\UserReviews { $crawler = $this->ghoutte->request('GET', $request->getPath()); try { - $parser = new Parser\User\ReviewsParser($crawler); - + $parser = new Parser\User\Reviews\UserReviewsParser($crawler); return $parser->getModel(); } catch (\Exception $e) { throw ParserException::fromRequest($request, $e); diff --git a/src/Parser/Reviews/AnimeReviewParser.php b/src/Parser/Reviews/AnimeReviewParser.php index 0befc588..c9cce376 100644 --- a/src/Parser/Reviews/AnimeReviewParser.php +++ b/src/Parser/Reviews/AnimeReviewParser.php @@ -93,7 +93,7 @@ public function getReviewedTitle(): string */ public function getReviewedUrl(): string { - // User Reviews page + // User UserReviews page $node = $this->crawler ->filterXPath('//div[12]/div[1]/div[1]/a'); @@ -101,7 +101,7 @@ public function getReviewedUrl(): string return $node->attr('href'); } - // Recent Reviews page + // Recent UserReviews page $node = $this->crawler ->filterXPath('//div[1]/div[2]/div[1]/div[1]/a'); @@ -114,7 +114,7 @@ public function getReviewedUrl(): string */ public function getReviewedImageUrl(): string { - // User Reviews page + // User UserReviews page $node = $this->crawler ->filterXPath('//div[12]/div[1]/div[1]/a/img'); @@ -122,7 +122,7 @@ public function getReviewedImageUrl(): string return Parser::parseImageQuality($node->attr('data-src')); } - // Recent Reviews page + // Recent UserReviews page $node = $this->crawler ->filterXPath('//div[1]/div[2]/div[1]/div[1]/a/img'); @@ -147,7 +147,7 @@ public function getHelpfulCount(): int return $node->text(); } - // works on Top ReviewsParser pages, the div is shifted + // works on Top UserReviewsParser pages, the div is shifted $node = $this->crawler->filterXPath('//div[1]/div[1]/div[4]/table/tr/td[2]/div/strong/span'); return $node->text(); } diff --git a/src/Parser/Reviews/MangaReviewParser.php b/src/Parser/Reviews/MangaReviewParser.php index beed8a56..9c69358c 100644 --- a/src/Parser/Reviews/MangaReviewParser.php +++ b/src/Parser/Reviews/MangaReviewParser.php @@ -87,13 +87,13 @@ public function getHelpfulCount(): int return $node->text(); } - // works on Top ReviewsParser pages, the div is shifted + // works on Top UserReviewsParser pages, the div is shifted $node = $this->crawler->filterXPath('//div[1]/div[1]/div[4]/table/tr/td[2]/div/strong/span'); if ($node->count()) { return $node->text(); } - // works on User Reviews pages + // works on User UserReviews pages $node = $this->crawler->filterXPath('//div[1]/div[1]/div[4]/table/tr/td/div/strong/span'); return $node->text(); } @@ -195,7 +195,7 @@ public function getReviewedTitle(): string */ public function getReviewedImageUrl(): string { - // User Reviews page + // User UserReviews page $node = $this->crawler ->filterXPath('//div[12]/div[1]/div[1]/a/img'); @@ -203,7 +203,7 @@ public function getReviewedImageUrl(): string return Parser::parseImageQuality($node->attr('data-src')); } - // Recent Reviews Anime page + // Recent UserReviews Anime page $node = $this->crawler ->filterXPath('//div[1]/div[2]/div[1]/div[1]/a/img'); @@ -218,7 +218,7 @@ public function getReviewedImageUrl(): string */ public function getReviewedUrl(): string { - // User Reviews page + // User UserReviews page $node = $this->crawler ->filterXPath('//div[12]/div[1]/div[1]/a'); @@ -226,7 +226,7 @@ public function getReviewedUrl(): string return $node->attr('href'); } - // Recent Reviews Anime page + // Recent UserReviews Anime page $node = $this->crawler ->filterXPath('//div[1]/div[2]/div[1]/div[1]/a'); diff --git a/src/Parser/Reviews/ReviewerParser.php b/src/Parser/Reviews/ReviewerParser.php index c914818e..7b67ec36 100644 --- a/src/Parser/Reviews/ReviewerParser.php +++ b/src/Parser/Reviews/ReviewerParser.php @@ -51,7 +51,7 @@ public function getUrl(): string return $node->attr('href'); } - // works on Top ReviewsParser pages, the div is shifted + // works on Top UserReviewsParser pages, the div is shifted $node = $this->crawler->filterXPath('//div[1]/div[1]/div[4]/table/tr/td[2]/a'); if ($node->count()) { return $node->attr('href'); @@ -70,7 +70,7 @@ public function getUsername(): string return $node->text(); } - // works on Top ReviewsParser pages, the div is shifted + // works on Top UserReviewsParser pages, the div is shifted return $this->crawler ->filterXPath('//div[1]/div[1]/div[4]/table/tr/td[2]/a') ->text(); @@ -90,7 +90,7 @@ public function getImageUrl(): string ); } - // works on Top ReviewsParser pages, the div is shifted + // works on Top UserReviewsParser pages, the div is shifted $node = $this->crawler->filterXPath('//div[1]/div[1]/div[4]/table/tr/td[1]/div/a/img'); return Parser::parseImageThumbToHQ( $node diff --git a/src/Parser/User/ReviewsParser.php b/src/Parser/User/Reviews/UserReviewsParser.php similarity index 69% rename from src/Parser/User/ReviewsParser.php rename to src/Parser/User/Reviews/UserReviewsParser.php index b8e87b57..5bae12f1 100644 --- a/src/Parser/User/ReviewsParser.php +++ b/src/Parser/User/Reviews/UserReviewsParser.php @@ -1,18 +1,18 @@ crawler = $crawler; } - public function getModel(): Model\User\Reviews + public function getModel(): Model\User\Reviews\UserReviews { - return Model\User\Reviews::fromParser($this); + return Model\User\Reviews\UserReviews::fromParser($this); } public function getReviews() : array @@ -46,12 +46,12 @@ public function getReviews() : array // Anime Review if ($crawler->filterXPath('//div[2]/div[2]/small[1]')->text() === '(Anime)') { - return Model\User\Reviews\AnimeReview::fromParser(new AnimeReviewParser($crawler)); + return Model\User\Reviews\UserAnimeReview::fromParser(new AnimeReviewParser($crawler)); } // Manga Review if ($crawler->filterXPath('//div[2]/div[2]/small[1]')->text() === '(Manga)') { - return Model\User\Reviews\MangaReview::fromParser(new MangaReviewParser($crawler)); + return Model\User\Reviews\UserMangaReview::fromParser(new MangaReviewParser($crawler)); } }); }