ldc-ovoteam/app/Http/Resources/CommonResource.php
Jérémy Munsch ca9c0fbc4e
feat(policy): allow ProductDto and RecipeDto in policies
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.
2026-11-05 16:49:42 +01:00

46 lines
1.3 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Resources;
use App\Dto\ProductDto;
use App\Dto\RecipeDto;
use App\Models\Product;
use App\Models\Recipe;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Gate;
use Uwil\LaravelBackend\Resources\CommonResource as BaseCommonResource;
class CommonResource extends BaseCommonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
$data = parent::toArray($request);
$resource = $this->resource;
$modelClass = match (true) {
$resource instanceof Model => $resource::class,
$resource instanceof ProductDto => Product::class,
$resource instanceof RecipeDto => Recipe::class,
default => throw new \InvalidArgumentException('Resource must be an instance of ' . Model::class . ' or DTO'),
};
$data['modelClass'] = $modelClass;
$data['policies'] = Arr::wrap($data['policies'] ?? []);
$data['policies']['create'] = Gate::allows('create', $modelClass);
$data['policies']['viewAny'] = Gate::allows('viewAny', $modelClass);
return $data;
}
}