Merge pull request #422 from jikan-me/bugfix/adds-reviews-dtos

Bugfix/adds reviews dtos
This commit is contained in:
Irfan (Nekomata) 2023-07-14 01:31:22 +05:00 committed by GitHub
commit ace6cf379b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 123 additions and 28 deletions

View File

@ -4,6 +4,8 @@ namespace App\Dto;
use App\Casts\ContextualBooleanCast;
use App\Casts\EnumCast;
use App\Dto\Concerns\HasPreliminaryParameter;
use App\Dto\Concerns\HasSpoilersParameter;
use App\Dto\Concerns\PreparesData;
use App\Enums\MediaReviewsSortEnum;
use App\Rules\Attributes\EnumValidation;
@ -14,22 +16,17 @@ use Spatie\LaravelData\Attributes\Validation\Numeric;
use Spatie\LaravelData\Attributes\WithCast;
use Spatie\LaravelData\Optional;
/**
* @extends LookupDataCommand<JsonResponse>
*/
final class AnimeReviewsLookupCommand extends LookupDataCommand
{
use PreparesData;
use PreparesData, HasPreliminaryParameter, HasSpoilersParameter;
#[Numeric, Min(1)]
public int|Optional $page = 1;
#[WithCast(EnumCast::class, MediaReviewsSortEnum::class), EnumValidation(MediaReviewsSortEnum::class)]
public MediaReviewsSortEnum|Optional $sort;
#[BooleanType, WithCast(ContextualBooleanCast::class)]
public bool|Optional $spoilers;
#[BooleanType, WithCast(ContextualBooleanCast::class)]
public bool|Optional $preliminary;
}

View File

@ -0,0 +1,26 @@
<?php
namespace App\Dto\Concerns;
use App\Casts\ContextualBooleanCast;
use OpenApi\Annotations as OA;
use Spatie\LaravelData\Attributes\Validation\BooleanType;
use Spatie\LaravelData\Attributes\WithCast;
use Spatie\LaravelData\Optional;
/**
* @OA\Parameter(
* name="preliminary",
* in="query",
* required=false,
* description="Any reviews left during an ongoing anime/manga, those reviews are tagged as preliminary. Preliminary reviews are not returned by default. e.g usage: `?preliminary=true`",
* @OA\Schema(type="boolean")
* ),
*/
trait HasPreliminaryParameter
{
use PreparesData;
#[BooleanType, WithCast(ContextualBooleanCast::class)]
public bool|Optional $preliminary;
}

View File

@ -0,0 +1,26 @@
<?php
namespace App\Dto\Concerns;
use App\Casts\ContextualBooleanCast;
use OpenApi\Annotations as OA;
use Spatie\LaravelData\Attributes\Validation\BooleanType;
use Spatie\LaravelData\Attributes\WithCast;
use Spatie\LaravelData\Optional;
/**
* @OA\Parameter(
* name="spoiler",
* in="query",
* required=false,
* description="Any reviews that are tagged as a spoiler. Spoiler reviews are not returned by default. e.g usage: `?spoiler=true`",
* @OA\Schema(type="boolean")
* ),
*/
trait HasSpoilersParameter
{
use PreparesData;
#[BooleanType, WithCast(ContextualBooleanCast::class)]
public bool|Optional $spoilers;
}

View File

@ -5,6 +5,8 @@ namespace App\Dto;
use App\Casts\ContextualBooleanCast;
use App\Casts\EnumCast;
use App\Dto\Concerns\HasPreliminaryParameter;
use App\Dto\Concerns\HasSpoilersParameter;
use App\Dto\Concerns\PreparesData;
use App\Enums\MediaReviewsSortEnum;
use App\Rules\Attributes\EnumValidation;
@ -20,17 +22,11 @@ use Spatie\LaravelData\Optional;
*/
final class MangaReviewsLookupCommand extends LookupDataCommand
{
use PreparesData;
use PreparesData, HasPreliminaryParameter, HasSpoilersParameter;
#[Numeric, Min(1)]
public int|Optional $page = 1;
#[WithCast(EnumCast::class, MediaReviewsSortEnum::class), EnumValidation(MediaReviewsSortEnum::class)]
public MediaReviewsSortEnum|Optional $sort;
#[BooleanType, WithCast(ContextualBooleanCast::class)]
public bool|Optional $spoilers;
#[BooleanType, WithCast(ContextualBooleanCast::class)]
public bool|Optional $preliminary;
}

View File

@ -2,6 +2,10 @@
namespace App\Dto;
use App\Dto\Concerns\HasPreliminaryParameter;
use App\Dto\Concerns\HasSpoilersParameter;
final class QueryAnimeReviewsCommand extends QueryReviewsCommand
{
use HasPreliminaryParameter, HasSpoilersParameter;
}

View File

@ -2,6 +2,10 @@
namespace App\Dto;
use App\Dto\Concerns\HasPreliminaryParameter;
use App\Dto\Concerns\HasSpoilersParameter;
final class QueryMangaReviewsCommand extends QueryReviewsCommand
{
use HasPreliminaryParameter, HasSpoilersParameter;
}

View File

@ -8,6 +8,8 @@ use App\Casts\EnumCast;
use App\Concerns\HasRequestFingerprint;
use App\Contracts\DataRequest;
use App\Dto\Concerns\HasPageParameter;
use App\Dto\Concerns\HasPreliminaryParameter;
use App\Dto\Concerns\HasSpoilersParameter;
use App\Dto\Concerns\PreparesData;
use App\Enums\MediaReviewsSortEnum;
use App\Http\Resources\V4\ResultsResource;
@ -22,14 +24,8 @@ use Spatie\LaravelData\Optional;
*/
abstract class QueryReviewsCommand extends Data implements DataRequest
{
use HasRequestFingerprint, HasPageParameter, PreparesData;
use HasRequestFingerprint, HasPageParameter, HasPreliminaryParameter, HasSpoilersParameter, PreparesData;
#[WithCast(EnumCast::class, MediaReviewsSortEnum::class), EnumValidation(MediaReviewsSortEnum::class)]
public MediaReviewsSortEnum|Optional $sort;
#[BooleanType, WithCast(ContextualBooleanCast::class)]
public bool|Optional $spoilers;
#[BooleanType, WithCast(ContextualBooleanCast::class)]
public bool|Optional $preliminary;
}

View File

@ -6,6 +6,8 @@ use App\Casts\ContextualBooleanCast;
use App\Casts\EnumCast;
use App\Concerns\HasRequestFingerprint;
use App\Contracts\DataRequest;
use App\Dto\Concerns\HasPreliminaryParameter;
use App\Dto\Concerns\HasSpoilersParameter;
use App\Dto\Concerns\PreparesData;
use App\Enums\TopAnimeFilterEnum;
use App\Enums\TopReviewsTypeEnum;
@ -19,14 +21,8 @@ use Spatie\LaravelData\Optional;
*/
final class QueryTopReviewsCommand extends QueryTopItemsCommand implements DataRequest
{
use HasRequestFingerprint, PreparesData;
use HasRequestFingerprint, HasPreliminaryParameter, HasSpoilersParameter, PreparesData;
#[WithCast(EnumCast::class, TopAnimeFilterEnum::class), EnumValidation(TopReviewsTypeEnum::class)]
public TopReviewsTypeEnum|Optional $type;
#[WithCast(ContextualBooleanCast::class)]
public bool|Optional $spoilers;
#[WithCast(ContextualBooleanCast::class)]
public bool|Optional $preliminary;
}

View File

@ -668,6 +668,8 @@ class AnimeController extends Controller
* ),
*
* @OA\Parameter(ref="#/components/parameters/page"),
* @OA\Parameter(ref="#/components/parameters/preliminary"),
* @OA\Parameter(ref="#/components/parameters/spoiler"),
*
* @OA\Response(
* response="200",

View File

@ -386,6 +386,8 @@ class MangaController extends Controller
* ),
*
* @OA\Parameter(ref="#/components/parameters/page"),
* @OA\Parameter(ref="#/components/parameters/preliminary"),
* @OA\Parameter(ref="#/components/parameters/spoiler"),
*
* @OA\Response(
* response="200",

View File

@ -14,6 +14,8 @@ class ReviewsController extends Controller
* tags={"reviews"},
*
* @OA\Parameter(ref="#/components/parameters/page"),
* @OA\Parameter(ref="#/components/parameters/preliminary"),
* @OA\Parameter(ref="#/components/parameters/spoiler"),
*
*
* @OA\Response(
@ -67,6 +69,8 @@ class ReviewsController extends Controller
* tags={"reviews"},
*
* @OA\Parameter(ref="#/components/parameters/page"),
* @OA\Parameter(ref="#/components/parameters/preliminary"),
* @OA\Parameter(ref="#/components/parameters/spoiler"),
*
* @OA\Response(
* response="200",

View File

@ -582,6 +582,12 @@
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/preliminary"
},
{
"$ref": "#/components/parameters/spoiler"
}
],
"responses": {
@ -1594,6 +1600,12 @@
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/preliminary"
},
{
"$ref": "#/components/parameters/spoiler"
}
],
"responses": {
@ -2209,6 +2221,12 @@
"parameters": [
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/preliminary"
},
{
"$ref": "#/components/parameters/spoiler"
}
],
"responses": {
@ -2235,6 +2253,12 @@
"parameters": [
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/preliminary"
},
{
"$ref": "#/components/parameters/spoiler"
}
],
"responses": {
@ -9022,6 +9046,15 @@
"type": "integer"
}
},
"preliminary": {
"name": "preliminary",
"in": "query",
"description": "Any reviews left during an ongoing anime/manga, those reviews are tagged as preliminary. Preliminary reviews are not returned by default. e.g usage: `?preliminary=true`",
"required": false,
"schema": {
"type": "boolean"
}
},
"sfw": {
"name": "sfw",
"in": "query",
@ -9031,6 +9064,15 @@
"type": "boolean"
}
},
"spoiler": {
"name": "spoiler",
"in": "query",
"description": "Any reviews that are tagged as a spoiler. Spoiler reviews are not returned by default. e.g usage: `?spoiler=true`",
"required": false,
"schema": {
"type": "boolean"
}
},
"unapproved": {
"name": "unapproved",
"in": "query",