diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 1110e94..60f30ef 100755 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -107,6 +107,16 @@ class Handler extends ExceptionHandler ], 400); } + if ($e instanceof ValidationException) { + return response() + ->json([ + 'status' => 400, + 'type' => 'BadRequestException', + 'message' => $e->getMessage(), + 'error' => null + ], 400); + } + // BadResponseException from Jikan PHP API // This is basically the response MyAnimeList returns to Jikan if ($e instanceof BadResponseException) { diff --git a/app/Helpers/ScraperHelper.php b/app/Helpers/ScraperHelper.php new file mode 100644 index 0000000..2962df3 --- /dev/null +++ b/app/Helpers/ScraperHelper.php @@ -0,0 +1,22 @@ +serialize($response, 'json'), + true + ); + } +} diff --git a/app/Http/Controllers/V4DB/MangaController.php b/app/Http/Controllers/V4DB/MangaController.php index 2b79387..ec17a2f 100644 --- a/app/Http/Controllers/V4DB/MangaController.php +++ b/app/Http/Controllers/V4DB/MangaController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\V4DB; +use App\Helpers\ScraperHelper; use App\Http\HttpHelper; use App\Http\HttpResponse; use App\Http\QueryBuilder\Scraper\Query; @@ -711,6 +712,16 @@ class MangaController extends Controller */ public function reviews(Request $request, int $id) { + $validation = $this->validate($request, [ + 'page' => 'nullable|numeric', + 'sort' => 'nullable|string' + ]); + + $page = $request->get('page') ?? 1; + $spoilers = $request->get('spoilers') ?? false; + $preliminary = $request->get('preliminary') ?? false; + $sort = $request->get('sort'); + $results = DB::table($this->getRouteTable($request)) ->where('request_hash', $this->fingerprint) ->get(); @@ -720,21 +731,18 @@ class MangaController extends Controller || $this->isExpired($request, $results) ) { - $response = (new ScraperHandler( - 'MangaReviews', - MangaReviewsRequest::class, - (new QueryResolver()) - ->setNewQuery(new Query('id', $id)) - ->setNewQuery(new Query('page', $request->get('page') ?? 1)) - ->setNewQuery(new Query( - 'sort', - $request->get('sort') ?? Constants::REVIEWS_SORT_MOST_VOTED, - new ValidationTypeEnum([Constants::REVIEWS_SORT_MOST_VOTED, Constants::REVIEWS_SORT_NEWEST, Constants::REVIEWS_SORT_OLDEST]), - new BadRequestException('Invalid sort for reviews. Please refer to the documentation: https://docs.api.jikan.moe/') - )) - ->setNewQuery(new Query('spoilers', $request->get('spoilers') ?? false)) - ->setNewQuery(new Query('preliminary', $request->get('preliminary') ?? false)) - ))->getSerializedJSON(); + $response = ScraperHelper::getSerializedJSON( + app('JikanParser') + ->getMangaReviews( + new MangaReviewsRequest( + $id, + $page, + in_array($sort, [Constants::REVIEWS_SORT_MOST_VOTED, Constants::REVIEWS_SORT_NEWEST, Constants::REVIEWS_SORT_OLDEST]) ? $sort : Constants::REVIEWS_SORT_MOST_VOTED, + $spoilers, + $preliminary + ) + ) + ); $results = $this->updateCache($request, $results, $response); } diff --git a/app/Http/QueryBuilder/Scraper/Query.php b/app/Http/QueryBuilder/Scraper/Query.php deleted file mode 100644 index 1826f19..0000000 --- a/app/Http/QueryBuilder/Scraper/Query.php +++ /dev/null @@ -1,53 +0,0 @@ -name = $name; - - if ($validation !== null && !$validation->validate($value)) { - throw $exceptionOnValidationFail ?? new BadRequestException("Invalid value supplied for {$name}. Please refer to the documentation: https://docs.api.jikan.moe/"); - } - - $this->value = $value; - } - - /** - * @return string - */ - public function getName(): string - { - return $this->name; - } - - /** - * @return mixed - */ - public function getValue(): mixed - { - return $this->value; - } -} diff --git a/app/Http/QueryBuilder/Scraper/QueryResolver.php b/app/Http/QueryBuilder/Scraper/QueryResolver.php deleted file mode 100644 index a069111..0000000 --- a/app/Http/QueryBuilder/Scraper/QueryResolver.php +++ /dev/null @@ -1,33 +0,0 @@ -queries[] = $query; - return $this; - } - - /** - * @return array - */ - public function getQueryValuesAsArray(): array - { - $values = []; - foreach ($this->queries as $query) { - $values[] = $query->getValue(); - } - return $values; - } -} diff --git a/app/Http/QueryBuilder/Scraper/ScraperHandler.php b/app/Http/QueryBuilder/Scraper/ScraperHandler.php deleted file mode 100644 index 48de3e5..0000000 --- a/app/Http/QueryBuilder/Scraper/ScraperHandler.php +++ /dev/null @@ -1,43 +0,0 @@ -response = app('JikanParser') - ->$getterFuncName( - new $requestResolverClassName( - ...$queryResolver->getQueryValuesAsArray() - ) - ); - } - - - /** - * @return array - */ - public function getSerializedJSON(): array - { - return \json_decode( - SerializerFactory::createV4() - ->serialize($this->response, 'json'), - true - ); - } -} diff --git a/app/Http/Validation/Validation.php b/app/Http/Validation/Validation.php deleted file mode 100644 index fd755a3..0000000 --- a/app/Http/Validation/Validation.php +++ /dev/null @@ -1,18 +0,0 @@ -criteria = $criteria; - } -} diff --git a/app/Http/Validation/ValidationInterface.php b/app/Http/Validation/ValidationInterface.php deleted file mode 100644 index 4e43638..0000000 --- a/app/Http/Validation/ValidationInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -criteria); - } -}