$this->resolveProduct($value)); Route::bind('recipe', fn (string $value): RecipeDto => $this->resolveRecipe($value)); Route::bind('frontProduct', fn (string $value): ProductDto => $this->resolveProduct($value)); Route::bind('frontRecipe', fn (string $value): RecipeDto => $this->resolveRecipe($value)); } private function resolveProduct(string $value): ProductDto { $executor = app()->make(Executor::class); $findProductQuery = app()->make(FindProductQuery::class); $input = Uuid::isValid($value) ? new FindProductByIdInput(Uuid::fromString($value), includeTrashed: $this->isBackRequest()) : new FindProductBySlugInput($value, includeTrashed: $this->isBackRequest()); return $executor->execute($findProductQuery, $input) ?? abort(404); } private function resolveRecipe(string $value): RecipeDto { $executor = app()->make(Executor::class); $findRecipeQuery = app()->make(FindRecipeQuery::class); $input = Uuid::isValid($value) ? new FindRecipeByIdInput(Uuid::fromString($value), includeTrashed: $this->isBackRequest()) : new FindRecipeBySlugInput($value, includeTrashed: $this->isBackRequest()); return $executor->execute($findRecipeQuery, $input) ?? abort(404); } private function isBackRequest(): bool { $prefix = config('uwil-backend.routes.prefix'); $adminPrefix = is_string($prefix) ? $prefix : 'admin'; return request()->is($adminPrefix . '/*') || request()->is($adminPrefix) || request()->is('back/*') || request()->is('back') || request()->routeIs('back.*'); } }