Files
Epicnabbo-Catalogus-Updated…/Updated_Cms/app/Http/Controllers/Community/WebsiteRareValuesController.php
T
Remco 7b9849c159 🆙 More fixes 🆙
2026-01-19 20:43:46 +01:00

87 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers\Community;
use App\Http\Controllers\Controller;
use App\Http\Requests\RareSearchFormRequest;
use App\Models\Community\RareValue\WebsiteRareValue;
use App\Models\Community\RareValue\WebsiteRareValueCategory;
use App\Models\Game\Furniture\Item;
use App\Services\Community\RareValues\RareValueCategoriesService;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Cache;
use Illuminate\View\View;
class WebsiteRareValuesController extends Controller
{
public function __construct(private readonly RareValueCategoriesService $valueCategoriesService) {}
public function index(): View
{
return view('rare-values', [
'categories' => $this->valueCategoriesService->fetchCategoriesByPriority(),
'categoriesNav' => $this->valueCategoriesService->fetchAllCategories(),
]);
}
public function category(int $id): View|RedirectResponse
{
$category = $this->valueCategoriesService->fetchCategoryById($id);
if (! $category instanceof \App\Models\Community\RareValue\WebsiteRareValueCategory) {
return back()->withErrors([
'message' => __('The entered category does not exist'),
]);
}
return view('rare-values', [
'categories' => $category,
'categoriesNav' => $this->valueCategoriesService->fetchAllCategories(),
]);
}
public function search(RareSearchFormRequest $request): View|RedirectResponse
{
$searchTerm = $request->string('search')->toString();
$categories = $this->valueCategoriesService->searchCategories($searchTerm);
if ($categories->isEmpty()) {
return back()->withErrors([
'message' => __('It seems like there were no rares matching your search input'),
]);
}
return view('rare-values', [
'categories' => $categories,
'categoriesNav' => WebsiteRareValueCategory::has('furniture')->get(),
]);
}
public function value(WebsiteRareValue $value): View
{
$items = Item::with(['user:id,username,look'])
->where('item_id', $value->item_id)
->get();
$itemsPerUser = $items->groupBy('user_id')->map(function ($group) {
/** @var \App\Models\Game\Furniture\Item $firstItem */
$firstItem = $group->first();
return [
'user' => $firstItem->user,
'item_count' => $group->count(),
];
});
if ((bool) setting('enable_caching')) {
Cache::remember('allItems_' . $value->id, (int) setting('cache_timer'), fn () => $items);
}
return view('value', [
'value' => $value,
'items' => $itemsPerUser,
]);
}
}