jikan-rest/app/Dto/AnimeSearchCommand.php
pushrbx a145f18bbd wip - major refactor
- AppServiceProvider is needs more work to wire in new services
- todo: more dtos
- todo: add unit tests
- todo: add more integration tests
2023-05-21 11:14:34 +01:00

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)]
];
}
}