Files
Atomcms-edit/app/Http/Controllers/Community/WebsiteRareValuesController.php
T
2026-05-09 17:32:17 +02:00

109 lines
3.5 KiB
PHP
Executable File

<?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\Http\Request;
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(),
'statistics' => $this->valueCategoriesService->getRareStatistics(),
]);
}
public function category(int $id, Request $request): View|RedirectResponse
{
$category = $this->valueCategoriesService->fetchCategoryById($id);
if (! $category instanceof WebsiteRareValueCategory) {
return redirect()->back()->withErrors([
'message' => __('The entered category does not exist'),
]);
}
// Get sort parameters
$sortBy = $request->get('sort', 'name');
$sortOrder = $request->get('order', 'asc');
// Validate sort parameters
$allowedSorts = ['name', 'credit_value', 'currency_value', 'created_at'];
$allowedOrders = ['asc', 'desc'];
if (! in_array($sortBy, $allowedSorts)) {
$sortBy = 'name';
}
if (! in_array($sortOrder, $allowedOrders)) {
$sortOrder = 'asc';
}
return view('rare-values', [
'category' => $category,
'categoriesNav' => $this->valueCategoriesService->fetchAllCategories(),
'statistics' => $this->valueCategoriesService->getRareStatistics(),
'sortBy' => $sortBy,
'sortOrder' => $sortOrder,
]);
}
public function search(RareSearchFormRequest $request): View|RedirectResponse
{
$searchTerm = $request->input('search');
$categories = $this->valueCategoriesService->searchCategories($searchTerm);
if ($categories->isEmpty()) {
return redirect()->back()->withErrors([
'message' => __('It seems like there were no rares matching your search input'),
]);
}
return view('rare-values', [
'categories' => $categories,
'categoriesNav' => $this->valueCategoriesService->fetchAllCategories(),
'statistics' => $this->valueCategoriesService->getRareStatistics(),
'searchTerm' => $searchTerm,
]);
}
public function value(WebsiteRareValue $value): View
{
$cacheKey = "rare_value_items_{$value->id}";
$items = Cache::remember($cacheKey, 300, fn () => Item::with(['user:id,username,look'])
->where('item_id', $value->item_id)
->get());
$itemsPerUser = $items->groupBy('user_id')->map(fn ($group) => [
'user' => $group->first()->user,
'item_count' => $group->count(),
]);
// Get total count
$totalItems = $items->count();
return view('value', [
'value' => $value,
'items' => $itemsPerUser,
'totalItems' => $totalItems,
]);
}
}