Feat: Updating routes and controllers to use the updated Services coming from boboko/core

This commit is contained in:
2026-08-29 00:17:34 +03:00
parent defe1dab12
commit c7cd1138fe
9 changed files with 48 additions and 22 deletions
+9 -4
View File
@@ -2,18 +2,23 @@
namespace App\Http\Controllers;
use Lunar\Models\Collection;
use Illuminate\Http\Response;
use Modules\Core\Catalog\DTOs\ProductFilters;
use Modules\Core\Catalog\Services\CollectionService;
use Modules\Core\Catalog\Services\ProductService;
class CategoryController extends Controller
{
public function __construct(
private readonly ProductService $products,
private readonly CollectionService $collections,
) {}
public function show(string $locale, Collection $collection)
public function show(string $locale, int $collection)
{
$collectionData = $this->collections->getById($collection);
abort_if($collectionData === null, Response::HTTP_NOT_FOUND);
$perPage = 12;
$page = (int) request('page', 1);
@@ -22,7 +27,7 @@ public function show(string $locale, Collection $collection)
// real LengthAwarePaginator of plain arrays (already localized/flattened),
// not Product models.
$products = $this->products->list(
filters: new ProductFilters(collectionId: $collection->id),
filters: new ProductFilters(collectionId: $collectionData['id']),
perPage: $perPage,
page: $page,
)->through(fn (array $product) => [
@@ -33,7 +38,7 @@ public function show(string $locale, Collection $collection)
]);
return view('category.show', [
'collection' => $collection,
'collection' => $collectionData,
'products' => $products,
]);
}
+1 -7
View File
@@ -3,7 +3,6 @@
namespace App\Http\Controllers;
use Illuminate\Http\Response;
use Lunar\Models\Collection;
use Modules\Core\Catalog\Services\ProductService;
class ProductController extends Controller
@@ -16,7 +15,6 @@ public function show(string $locale, int $id)
abort_if($product === null, Response::HTTP_NOT_FOUND);
$collection = $product['collections'][0] ?? null;
$collectionModel = $collection !== null ? Collection::find($collection['id']) : null;
$variantsData = collect($product['variants'])
->map(fn (array $variant) => [
@@ -30,12 +28,8 @@ public function show(string $locale, int $id)
$firstVariant = $product['variants'][0] ?? null;
$option = $firstVariant['options'][0]['option'] ?? null;
// temp categories here
$categories = Collection::orderBy('_lft')->get();
return view('product.show', [
'categories' => $categories,
'collection' => $collectionModel,
'collection' => $collection,
'product' => $product,
'option' => $option,
'variantsData' => $variantsData,
+16
View File
@@ -6,9 +6,14 @@
use App\Models\Staff;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
use Illuminate\View\View as ViewInstance;
use Lunar\Facades\ModelManifest;
use Lunar\Facades\Telemetry;
use Modules\Core\Catalog\DTOs\CollectionFilters;
use Modules\Core\Catalog\Enums\CollectionSort;
use Modules\Core\Catalog\Services\CollectionService;
class AppServiceProvider extends ServiceProvider
{
@@ -16,6 +21,17 @@ public function boot(): void
{
Telemetry::optOut();
// header.blade.php's category dropdown — root collections only, resolved
// per-request so the composer runs after `locale` middleware has already
// set App::getLocale(), which CollectionService's name resolution depends on.
View::composer('components.header', function (ViewInstance $view) {
$view->with('categories', app(CollectionService::class)->list(
filters: new CollectionFilters(rootOnly: true),
perPage: 100,
sort: CollectionSort::Position,
)->items());
});
if ($this->app->environment('production')) {
URL::forceScheme('https');
}
+1
View File
@@ -54,6 +54,7 @@
*/
'cart_lines' => [
Lunar\Pipelines\CartLine\GetUnitPrice::class,
Modules\Core\Cart\Pipelines\ZeroSavedForLaterPrice::class,
],
],
+1 -1
View File
@@ -44,5 +44,5 @@
| Determines whether the cart sholud be soft deleted when the user logs out.
|
*/
'delete_on_forget' => true,
'delete_on_forget' => false,
];
+4 -4
View File
@@ -1,17 +1,17 @@
@extends('layouts.app')
@section('title', $collection->translateAttribute('name') . ' — ' . config('app.name'))
@section('description', strip_tags($collection->translateAttribute('description') ?? ''))
@section('title', $collection['name'] . ' — ' . config('app.name'))
@section('description', strip_tags($collection['description'] ?? ''))
@section('content')
<div class="max-w-7xl mx-auto px-4 sm:px-8 py-12">
<div class="flex items-end justify-between gap-6 flex-wrap mb-10">
<h1 class="font-display font-extrabold text-h1">{{ $collection->translateAttribute('name') }}</h1>
<h1 class="font-display font-extrabold text-h1">{{ $collection['name'] }}</h1>
<x-breadcrumb :items="[
['label' => __('storefront.nav.home'), 'href' => route('home')],
['label' => $collection->translateAttribute('name')],
['label' => $collection['name']],
]" />
</div>
+4 -4
View File
@@ -18,11 +18,11 @@
</svg>
</a>
<div class="nav-dropdown">
{{-- @foreach($categories as $category)
<a href="/category/{{ $category->id }}">
{{ $category->translateAttribute('name') }}
@foreach($categories ?? [] as $category)
<a href="{{ route('category.show', ['id' => $category['id']]) }}">
{{ $category['name'] }}
</a>
@endforeach --}}
@endforeach
</div>
</div>
+1 -1
View File
@@ -8,7 +8,7 @@
<x-breadcrumb class="mb-14 justify-end" :items="[
$collection
? ['label' => $collection->translateAttribute('name'), 'href' => route('category.show', ['collection' => $collection])]
? ['label' => $collection['name'], 'href' => route('category.show', ['id' => $collection['id']])]
: ['label' => __('storefront.nav.products'), 'href' => '/products'],
['label' => $product['name']],
]" />
+11 -1
View File
@@ -7,6 +7,16 @@
use App\Http\Controllers\ProductController;
use Illuminate\Support\Facades\Route;
// Bare `/` has no {locale} segment to prefix-match against, so it's declared outside
// the group below purely to give `locale` middleware a route to run on — the group's
// `Route::prefix('{locale}')` requires a non-empty first segment, so `/` would
// otherwise 404 before the middleware (which already redirects an empty/unrecognized
// locale segment to the resolved default) ever gets a chance to run. Middleware runs
// before controller parameter binding, so this never actually reaches
// HomeController::index()'s required $locale argument — the middleware always
// redirects a request with no matching locale segment first.
Route::get('/', [HomeController::class, 'index'])->middleware('locale');
Route::prefix('{locale}')
->middleware('locale')
->group(function () {
@@ -16,7 +26,7 @@
'product.show',
);
Route::get('/category/{collection}', [CategoryController::class, 'show'])->name(
Route::get('/category/{id}', [CategoryController::class, 'show'])->name(
'category.show',
);