mirror of
https://github.com/jikan-me/jikan-rest.git
synced 2025-02-20 11:23:35 +08:00
- AppServiceProvider is needs more work to wire in new services - todo: more dtos - todo: add unit tests - todo: add more integration tests
51 lines
1.6 KiB
PHP
51 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Dto;
|
|
|
|
use App\Contracts\DataRequest;
|
|
use App\Enums\AnimeOrderByEnum;
|
|
use App\Enums\AnimeRatingEnum;
|
|
use App\Enums\AnimeStatusEnum;
|
|
use App\Http\Resources\V4\AnimeCollection;
|
|
use Spatie\Enum\Laravel\Rules\EnumRule;
|
|
use Spatie\LaravelData\Attributes\MapInputName;
|
|
use Spatie\LaravelData\Attributes\MapOutputName;
|
|
use Spatie\LaravelData\Attributes\Validation\IntegerType;
|
|
use Spatie\LaravelData\Attributes\Validation\Min;
|
|
use Spatie\LaravelData\Attributes\Validation\Prohibits;
|
|
use Spatie\LaravelData\Attributes\Validation\StringType;
|
|
use Spatie\LaravelData\Attributes\WithCast;
|
|
use App\Casts\EnumCast;
|
|
use Spatie\LaravelData\Optional;
|
|
|
|
/**
|
|
* @implements DataRequest<AnimeCollection>
|
|
*/
|
|
final class AnimeSearchCommand extends MediaSearchCommand implements DataRequest
|
|
{
|
|
#[WithCast(EnumCast::class, AnimeStatusEnum::class)]
|
|
public AnimeStatusEnum|Optional $status;
|
|
|
|
#[WithCast(EnumCast::class, AnimeRatingEnum::class)]
|
|
public AnimeRatingEnum|Optional $rating;
|
|
|
|
#[IntegerType, Min(1)]
|
|
public int|Optional $producer;
|
|
|
|
#[Prohibits("producer"), StringType]
|
|
public string|Optional $producers;
|
|
|
|
#[MapInputName("order_by"), MapOutputName("order_by"), WithCast(EnumCast::class, AnimeOrderByEnum::class)]
|
|
public AnimeOrderByEnum|Optional $orderBy;
|
|
|
|
public static function rules(): array
|
|
{
|
|
return [
|
|
...parent::rules(),
|
|
"status" => [new EnumRule(AnimeStatusEnum::class)],
|
|
"rating" => [new EnumRule(AnimeRatingEnum::class)],
|
|
"order_by" => [new EnumRule(AnimeOrderByEnum::class)]
|
|
];
|
|
}
|
|
}
|