Updated ProductPolicy and RecipePolicy to accept ProductDto in addition to Product. This change enhances the flexibility of the policies by allowing DTOs to be used for authorization checks. refactor(provider): simplify service provider bindings Refactored AppServiceProvider to simplify the binding of ProductDirectory and RecipeDirectory. Removed unnecessary dependencies and improved clarity. feat(route): update route bindings for front-end Changed route bindings for products and recipes to use frontProduct and frontRecipe. This improves clarity and consistency in route handling. fix(breadcrumbs): update breadcrumb checks for DTOs Updated breadcrumb generation to check for ProductDto and RecipeDto instead of their model counterparts. This ensures breadcrumbs function correctly with the new DTO structure. refactor(types): remove FilePath type and update schemas Removed the FilePath type definition and updated related schemas to use string directly. This simplifies type handling for file paths. style(entities): standardize naming conventions Updated naming conventions in Product and Recipe entities to use snake_case for consistency across the codebase. feat(frontend): update product and recipe pages for new DTO structure Modified front-end components to accommodate changes in the product and recipe data structures, ensuring compatibility with the new DTOs.
54 lines
1.4 KiB
PHP
54 lines
1.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Cqs\Queries\Recipes;
|
|
|
|
use App\Contracts\Query;
|
|
use App\Contracts\QueryInput;
|
|
use App\Dto\RecipeDto;
|
|
use App\Lib\PublicS3Disk;
|
|
use App\Models\Recipe;
|
|
use Webmozart\Assert\Assert;
|
|
|
|
/**
|
|
* @phpcs:disable Generic.Files.LineLength
|
|
*
|
|
* @implements \App\Contracts\Query<\App\Cqs\Queries\Recipes\FindRecipeByIdInput|\App\Cqs\Queries\Recipes\FindRecipeBySlugInput, \App\Dto\RecipeDto|null>
|
|
*
|
|
* @phpcs:enable
|
|
*/
|
|
final readonly class FindRecipeQuery implements Query
|
|
{
|
|
public function __construct(
|
|
private PublicS3Disk $publicS3Disk,
|
|
) {
|
|
}
|
|
|
|
#[\Override]
|
|
public function __invoke(QueryInput $input): ?RecipeDto
|
|
{
|
|
Assert::true(
|
|
$input instanceof FindRecipeByIdInput || $input instanceof FindRecipeBySlugInput,
|
|
'Input must be an instance of FindRecipeByIdInput or FindRecipeBySlugInput.'
|
|
);
|
|
|
|
$query = Recipe::query();
|
|
|
|
if ($input->includeTrashed) {
|
|
$query->withTrashed();
|
|
}
|
|
|
|
/** @var Recipe|null $recipe */
|
|
$recipe = match (true) {
|
|
$input instanceof FindRecipeByIdInput => $query->where('id', (string) $input->id)->first(),
|
|
$input instanceof FindRecipeBySlugInput => $query->where('slug', $input->slug)->first(),
|
|
};
|
|
|
|
if ($recipe === null) {
|
|
return null;
|
|
}
|
|
|
|
return RecipeDto::fromModel($recipe, $this->publicS3Disk);
|
|
}
|
|
}
|