100 lines
3.1 KiB
PHP
100 lines
3.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Http\Requests\Front\Recipes;
|
|
|
|
use Domain\Models\ValueObjects\Products\ProductCategory;
|
|
use Domain\Models\ValueObjects\Recipes\ConsumptionTime;
|
|
use Domain\Models\ValueObjects\Recipes\Inspiration;
|
|
use Domain\Models\ValueObjects\Recipes\Season;
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
|
|
class IndexRecipeRequest extends FormRequest
|
|
{
|
|
/** @return \Domain\Models\ValueObjects\Products\ProductCategory[] */
|
|
public function getCategories(): array
|
|
{
|
|
return array_map(
|
|
function ($category) {
|
|
if (! is_string($category)) {
|
|
throw new \InvalidArgumentException('Category must be a string');
|
|
}
|
|
|
|
return ProductCategory::from($category);
|
|
},
|
|
$this->array('category'),
|
|
);
|
|
}
|
|
|
|
/** @return \Domain\Models\ValueObjects\Recipes\ConsumptionTime[] */
|
|
public function getConsumptionTimes(): array
|
|
{
|
|
return array_map(
|
|
function ($time) {
|
|
if (! is_string($time)) {
|
|
throw new \InvalidArgumentException('Consumption time must be a string');
|
|
}
|
|
|
|
return ConsumptionTime::from($time);
|
|
},
|
|
$this->array('consumption_time'),
|
|
);
|
|
}
|
|
|
|
/** @return \Domain\Models\ValueObjects\Recipes\Inspiration[] */
|
|
public function getInspirations(): array
|
|
{
|
|
return array_map(
|
|
function ($inspiration) {
|
|
if (! is_string($inspiration)) {
|
|
throw new \InvalidArgumentException('Inspiration must be a string');
|
|
}
|
|
|
|
return Inspiration::from($inspiration);
|
|
},
|
|
$this->array('inspiration'),
|
|
);
|
|
}
|
|
|
|
/** @return \Domain\Models\ValueObjects\Recipes\Season[] */
|
|
public function getSeasons(): array
|
|
{
|
|
return array_map(
|
|
function ($season) {
|
|
if (! is_string($season)) {
|
|
throw new \InvalidArgumentException('Season must be a string');
|
|
}
|
|
|
|
return Season::from($season);
|
|
},
|
|
$this->array('season'),
|
|
);
|
|
}
|
|
|
|
public function getSearchValue(): ?string
|
|
{
|
|
return $this->has('search') && ! empty($this->string('search')->value()) ?
|
|
$this->string('search')->value() : null;
|
|
}
|
|
|
|
/**
|
|
* Get the validation rules that apply to the request.
|
|
*
|
|
* @return array<string, \Illuminate\Validation\Rule|array<mixed>|string>
|
|
*/
|
|
public function rules(): array
|
|
{
|
|
return [
|
|
'search' => ['nullable', 'string'],
|
|
'category' => ['nullable', 'array'],
|
|
'category.*' => ['string'],
|
|
'consumption_time' => ['nullable', 'array'],
|
|
'consumption_time.*' => ['string'],
|
|
'inspiration' => ['nullable', 'array'],
|
|
'inspiration.*' => ['string'],
|
|
'season' => ['nullable', 'array'],
|
|
'season.*' => ['string'],
|
|
];
|
|
}
|
|
}
|