diff --git a/.env.example b/.env.example index 35db1dd..62da1ef 100644 --- a/.env.example +++ b/.env.example @@ -63,3 +63,6 @@ AWS_BUCKET= AWS_USE_PATH_STYLE_ENDPOINT=false VITE_APP_NAME="${APP_NAME}" + + +WMS_ASSET_URL="https://dev.smgdev.top/api/storage" \ No newline at end of file diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php new file mode 100644 index 0000000..45a37b4 --- /dev/null +++ b/app/Http/Controllers/HomeController.php @@ -0,0 +1,17 @@ +hasMany(Items::class, 'brand_id', 'id'); + } + + public function getImageUrlAttribute() + { + return $this->image ? Storage::disk('wms')->url($this->image) : null; + } + + + public function getImageDarkUrlAttribute() + { + return $this->image ? Storage::disk('wms')->url($this->image) : null; + } +} diff --git a/app/Models/Items.php b/app/Models/Items.php new file mode 100644 index 0000000..07351b4 --- /dev/null +++ b/app/Models/Items.php @@ -0,0 +1,232 @@ +when($filters['search'] ?? false, function ($query, $search) { + return $query + ->where('number', 'iLIKE', '%' . $search . '%') + ->orWhere('name', 'iLIKE', '%' . $search . '%'); + }); + } + + public function order() + { + return $this->hasMany(SaleOrderDetail::class, 'item_id', 'id'); + } + + public function dimension() + { + return $this->hasOne(ItemDimension::class,"no","number"); + } + + public function reference() + { + return $this->hasOne(ItemReference::class,'item_id') + ->where(function($query){ + $query->whereNull("item_variant_id")->orWhere("item_variant_id",0); + }); + } + + public function variants() + { + return $this->hasMany(ItemVariant::class,"item_id")->leftJoin("stocks","item_variant_id","=","item_variants.id") + ->select("item_variants.id","item_variants.code","item_variants.display_name","item_variants.is_publish", DB::raw("SUM(quantity) as stock"),"description","item_variants.item_id") + ->groupBy("item_variants.id","item_variants.code","description","item_variants.item_id"); + } + + public function images() + { + return $this->hasMany(ItemImage::class,'item_id')->whereNull('item_variant_id'); + } + + public function itemVariants() + { + return $this->hasMany(ItemVariant::class,"item_id")->with("reference"); + } + + public function publishedItemVariants() + { + return $this->hasMany(ItemVariant::class,"item_id")->with("reference")->where('is_publish', true); + } + + public function brands() + { + return $this->belongsTo(Brand::class, 'brand_id', 'id'); + } + + public function categories() + { + return $this->belongsTo(Categories::class, 'categories_id', 'id'); + } + + public function brand() + { + return $this->belongsTo(Brand::class, 'brand_id', 'id'); + } + + public function gender() + { + return $this->belongsTo(Gender::class, 'gender_id', 'id'); + } + + public function category() + { + return $this->belongsTo(Categories::class, 'category_id', 'id'); + } + + public function discount() + { + $user = auth()->user(); + list($location_id, $is_consignment) = Cache::remember("employee_user_".$user->id, 60 * 60 * 24, function() use ($user){ + if ($user == null) + return [10, false]; + + $employee = @$user->employee; + $location_id = @$employee->location_id; + $location = @$employee->location; + $is_consignment = (boolean) @$location->is_consignment; + return [$location_id, $is_consignment]; + + }); + + return $this->hasOne(Discount::class,DB::raw("item_reference.item_id")) + ->leftJoin("discount_items","discounts.id","=","discount_id") + ->leftJoin("item_reference","item_reference.id","=","item_reference_id") + ->where("discounts.type","discount") + ->orderBy("discounts.created_at","desc") + ->where(function ($query) { + $query->whereNull("valid_at") + ->orWhereDate("valid_at", "<=", Carbon::now()); + }) + ->where(function ($query) { + $query->whereNull("expired_at") + ->orWhereDate("expired_at", ">=", Carbon::now()); + }) + ->where(function($query) use ($location_id, $is_consignment){ + if (!$is_consignment) + $query->whereNull("discounts.location_id"); + if ($location_id) + $query->orWhere("discounts.location_id", $location_id); + }) + ->select("item_id","price"); + } + + public function price() + { + + $user = auth()->user(); + list($location_id, $is_consignment) = Cache::remember("employee_user_".$user->id, 60 * 60 * 24, function() use ($user){ + + if ($user == null) + return [10, false]; + + $employee = @$user->employee; + $location_id = @$employee->location_id; + $location = @$employee->location; + $is_consignment = (boolean) @$location->is_consignment; + return [$location_id, $is_consignment]; + + }); + + return $this->hasOne(Discount::class,DB::raw("item_reference.item_id")) + ->leftJoin("discount_items","discounts.id","=","discount_id") + ->leftJoin("item_reference","item_reference.id","=","item_reference_id") + ->where("discounts.type","price") + ->orderBy("discounts.created_at","desc") + ->where(function ($query) { + $query->whereNull("valid_at") + ->orWhereDate("valid_at", "<=", Carbon::now()); + }) + ->where(function ($query) { + $query->whereNull("expired_at") + ->orWhereDate("expired_at", ">=", Carbon::now()); + }) + ->where(function($query) use ($location_id, $is_consignment){ + if (!$is_consignment) + $query->whereNull("discounts.location_id"); + if ($location_id) + $query->orWhere("discounts.location_id", $location_id); + }) + ->select("item_id","price"); + } + + public function stock() + { + return $this->hasOne(Stock::class,"item_id") + ->leftJoin("locations","locations.id","=","location_id") + ->whereNotNull("locations.display_name") + ->where("locations.display_name","<>","") + ->where("quantity",">","0") + ->groupBy("item_id") + ->select("item_id",DB::raw("SUM(quantity) as quantity")); + } + + public function attributes() + { + return $this->hasMany(ItemAttribute::class, 'item_id'); + } +} diff --git a/app/Models/Location.php b/app/Models/Location.php new file mode 100644 index 0000000..bcd9d85 --- /dev/null +++ b/app/Models/Location.php @@ -0,0 +1,88 @@ +when($filters['search'] ?? false, function ($query, $search) { + return $query + ->where('name', 'iLIKE', '%' . $search . '%') + ->orWhere('code', 'LIKE', '%' . $search . '%'); + }); + } + + public function md() + { + return $this->belongsTo(Employee::class); + } + + public function storeCategory() + { + return $this->hasMany(StoreCapacity::class, "location_id", "id") + ->selectRaw(" + store_category.id, + store_category.name, + store_capacity.max::int, + COALESCE(b.qty, 0)::int as qty, + COALESCE(b.sku, 0)::int as sku, + (CASE WHEN COALESCE(b.qty, 0) = 0 OR store_capacity.max = 0 THEN 0 ELSE (qty / max * 100) END) as percentage + ") + ->leftJoin("store_category", "store_capacity.store_category_id", "store_category.id") + ->leftJoin(DB::raw("(SELECT + c.store_category_id, + SUM(stocks.quantity) as qty, + count(distinct item_reference.number) as sku + FROM (SELECT item_dimension.no, store_category_map.store_category_id FROM store_category_map + LEFT JOIN item_dimension + ON (store_category_map.category1 = item_dimension.category1 OR store_category_map.category1 is null) + AND (store_category_map.category2 = item_dimension.category2 OR store_category_map.category2 is null) + AND (store_category_map.category3 = item_dimension.category3 OR store_category_map.category3 is null) + AND (store_category_map.category4 = item_dimension.category4 OR store_category_map.category4 is null) + GROUP BY item_dimension.no, store_category_map.store_category_id + ) c + LEFT JOIN items + ON items.number = c.no + LEFT JOIN item_reference + ON items.id = item_reference.item_id + LEFT JOIN stocks + ON stocks.item_id = item_reference.item_id AND stocks.item_variant_id = item_reference.item_variant_id + WHERE stocks.location_id = $this->id and stocks.quantity > 0 + GROUP BY c.store_category_id + ) b"), "store_capacity.store_category_id", "b.store_category_id"); + } +} diff --git a/app/Models/StoreCapacity.php b/app/Models/StoreCapacity.php new file mode 100644 index 0000000..5a5c731 --- /dev/null +++ b/app/Models/StoreCapacity.php @@ -0,0 +1,19 @@ +belongsTo(Location::class); + } +} diff --git a/app/Models/StoreCategory.php b/app/Models/StoreCategory.php new file mode 100644 index 0000000..74954e8 --- /dev/null +++ b/app/Models/StoreCategory.php @@ -0,0 +1,25 @@ +hasMany(StoreCategoryMap::class); + } + + public function locations() + { + return $this->hasMany(StoreCapacity::class); + } +} diff --git a/app/Models/StoreCategoryMap.php b/app/Models/StoreCategoryMap.php new file mode 100644 index 0000000..fd78f40 --- /dev/null +++ b/app/Models/StoreCategoryMap.php @@ -0,0 +1,15 @@ +pluck("brand"); + return Brand::whereIn("name",$ids)->orderBy('priority', 'desc') + ->where("priority",">",0) + ->orderBy('name', 'asc')->get(); + } + return Brand::orderBy('priority', 'desc')->orderBy('name', 'asc') + ->where("priority",">",0) + ->get(); + +}); + + } +} diff --git a/app/Repositories/Catalog/CategoryRepository.php b/app/Repositories/Catalog/CategoryRepository.php new file mode 100644 index 0000000..aafd7c9 --- /dev/null +++ b/app/Repositories/Catalog/CategoryRepository.php @@ -0,0 +1,17 @@ +leftJoin('item_dimension', 'item_dimension.no', 'items.number') + ->leftJoin(DB::raw("(select distinct on (item_id) item_id, percent, discounts.created_at, + case when discounts.valid_at is null then 'special-offer' else 'limited-sale' end as event + from discount_items + left join item_reference on item_reference_id = item_reference.id + left join discounts on discounts.id = discount_id + where discounts.type = 'discount' and + ( discounts.valid_at is null or discounts.valid_at <= now()) and + ( discounts.valid_at is null or discounts.expired_at >= now()) + order by item_id, discounts.created_at desc + ) as d"),"d.item_id","=","items.id") +->when(true, function($query) use ($event, $sort){ +if ($event){ + $query->orderByRaw("case when brand = 'CHAMELO' then 1 else 2 end ASC "); + +$query->orderBy("percent", "desc"); +}else{ + +/* if ($event == "special-offer"){ +$query->orderByRaw("case when brand = 'CHAMELO' then 1 else 2 end ASC "); +} */ + +if ($sort == "new"){ +\Log::info($sort); + + $query->orderByRaw("case when category1 in ('CLUBS','CLUB','COMPONENT HEAD') and brand = 'PXG' then 1 else 2 end ASC"); +}else{ + $query->orderByRaw("case when d.created_at is not null then 1 else 2 end ASC, random()"); +} + +// $query->orderByRaw("items.created_at desc NULLS LAST"); +} + +}) + ->where("is_publish", true) + ->when($search, function ($query) use ($search) { + $query->where(function ($query) use ($search) { + $query->where('number', 'ILIKE', "%$search%") + ->orWhere('name', 'ILIKE', "%$search%") + ->orWhere('alias_name', 'ILIKE', "%$search%"); + }); + }) + ->when($brand_id, function ($query) use ($brand_id) { + $query->where('brand_id', $brand_id); + }) + ->when($gender_id, function ($query) use ($gender_id) { + $query->where('gender_id', $gender_id); + }) + ->when($event, function($query) use ($event){ + $query->where('d.event', $event); + }); + + if ($category_id) { + $categories = StoreCategoryMap::where('store_category_id', $category_id)->get(); + $builder->where(function ($query) use ($categories) { + $i = 0; + foreach ($categories as $category) { + if ($i == 0) { + $query->where(function ($query) use ($category) { + $query->where('item_dimension.category1', $category->category1) + ->where('item_dimension.category2', $category->category2); + }); + } else { + $query->orWhere(function ($query) use ($category) { + $query->where('item_dimension.category1', $category->category1) + ->where('item_dimension.category2', $category->category2); + }); + } + $i++; + } + }); + } + + return $builder->paginate($limit); + } +} diff --git a/app/View/Components/Home/BrandHome.php b/app/View/Components/Home/BrandHome.php new file mode 100644 index 0000000..d42bc49 --- /dev/null +++ b/app/View/Components/Home/BrandHome.php @@ -0,0 +1,43 @@ +brands = $brandRepository->getList([]); + + if ($this->brands->count() < 9) { + // Ensure we have at least 9 brands by duplicating if necessary + while ($this->brands->count() < 9) { + $this->brands = $this->brands->concat($this->brands); + } + $this->brands = $this->brands->take(9); + } + } + + /** + * Get the view / contents that represent the component. + */ + public function render(): View|Closure|string + { + $view = 'components.home.brand-home-fashion-v1'; + if ($this->template === 'fashion-v2') { + $view = 'components.home.brand-home-fashion-v2'; + } + return view($view); + } +} diff --git a/composer.json b/composer.json index 7ee5043..319610e 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,8 @@ "require": { "php": "^8.2", "laravel/framework": "^12.0", - "laravel/tinker": "^2.10.1" + "laravel/tinker": "^2.10.1", + "spatie/laravel-activitylog": "^4.10" }, "require-dev": { "fakerphp/faker": "^1.23", @@ -75,4 +76,4 @@ }, "minimum-stability": "stable", "prefer-stable": true -} \ No newline at end of file +} diff --git a/composer.lock b/composer.lock index 1943771..89955fc 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "88970a0117c062eed55fa8728fc43833", + "content-hash": "040332991bd2bf1daab2e1f01063d4a5", "packages": [ { "name": "brick/math", @@ -3271,6 +3271,158 @@ }, "time": "2025-06-25T14:20:11+00:00" }, + { + "name": "spatie/laravel-activitylog", + "version": "4.10.2", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-activitylog.git", + "reference": "bb879775d487438ed9a99e64f09086b608990c10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-activitylog/zipball/bb879775d487438ed9a99e64f09086b608990c10", + "reference": "bb879775d487438ed9a99e64f09086b608990c10", + "shasum": "" + }, + "require": { + "illuminate/config": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "illuminate/database": "^8.69 || ^9.27 || ^10.0 || ^11.0 || ^12.0", + "illuminate/support": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.6.3" + }, + "require-dev": { + "ext-json": "*", + "orchestra/testbench": "^6.23 || ^7.0 || ^8.0 || ^9.0 || ^10.0", + "pestphp/pest": "^1.20 || ^2.0 || ^3.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\Activitylog\\ActivitylogServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\Activitylog\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + }, + { + "name": "Sebastian De Deyne", + "email": "sebastian@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + }, + { + "name": "Tom Witkowski", + "email": "dev.gummibeer@gmail.com", + "homepage": "https://gummibeer.de", + "role": "Developer" + } + ], + "description": "A very simple activity logger to monitor the users of your website or application", + "homepage": "https://github.com/spatie/activitylog", + "keywords": [ + "activity", + "laravel", + "log", + "spatie", + "user" + ], + "support": { + "issues": "https://github.com/spatie/laravel-activitylog/issues", + "source": "https://github.com/spatie/laravel-activitylog/tree/4.10.2" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-06-15T06:59:49+00:00" + }, + { + "name": "spatie/laravel-package-tools", + "version": "1.92.7", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "f09a799850b1ed765103a4f0b4355006360c49a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/f09a799850b1ed765103a4f0b4355006360c49a5", + "reference": "f09a799850b1ed765103a4f0b4355006360c49a5", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^9.28|^10.0|^11.0|^12.0", + "php": "^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "orchestra/testbench": "^7.7|^8.0|^9.0|^10.0", + "pestphp/pest": "^1.23|^2.1|^3.1", + "phpunit/php-code-coverage": "^9.0|^10.0|^11.0", + "phpunit/phpunit": "^9.5.24|^10.5|^11.5", + "spatie/pest-plugin-test-time": "^1.1|^2.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\LaravelPackageTools\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", + "keywords": [ + "laravel-package-tools", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.92.7" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-07-17T15:46:43+00:00" + }, { "name": "symfony/clock", "version": "v7.3.0", diff --git a/config/filesystems.php b/config/filesystems.php index 3d671bd..2f93910 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -13,7 +13,7 @@ return [ | */ - 'default' => env('FILESYSTEM_DISK', 'local'), + 'default' => env('FILESYSTEM_DISK', 'wms'), /* |-------------------------------------------------------------------------- @@ -47,6 +47,16 @@ return [ 'report' => false, ], + + 'wms' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('WMS_ASSET_URL'), + 'visibility' => 'public', + 'throw' => false, + 'report' => false, + ], + 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php deleted file mode 100644 index 05fb5d9..0000000 --- a/database/migrations/0001_01_01_000000_create_users_table.php +++ /dev/null @@ -1,49 +0,0 @@ -id(); - $table->string('name'); - $table->string('email')->unique(); - $table->timestamp('email_verified_at')->nullable(); - $table->string('password'); - $table->rememberToken(); - $table->timestamps(); - }); - - Schema::create('password_reset_tokens', function (Blueprint $table) { - $table->string('email')->primary(); - $table->string('token'); - $table->timestamp('created_at')->nullable(); - }); - - Schema::create('sessions', function (Blueprint $table) { - $table->string('id')->primary(); - $table->foreignId('user_id')->nullable()->index(); - $table->string('ip_address', 45)->nullable(); - $table->text('user_agent')->nullable(); - $table->longText('payload'); - $table->integer('last_activity')->index(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('users'); - Schema::dropIfExists('password_reset_tokens'); - Schema::dropIfExists('sessions'); - } -}; diff --git a/database/migrations/0001_01_01_000001_create_cache_table.php b/database/migrations/0001_01_01_000001_create_cache_table.php deleted file mode 100644 index b9c106b..0000000 --- a/database/migrations/0001_01_01_000001_create_cache_table.php +++ /dev/null @@ -1,35 +0,0 @@ -string('key')->primary(); - $table->mediumText('value'); - $table->integer('expiration'); - }); - - Schema::create('cache_locks', function (Blueprint $table) { - $table->string('key')->primary(); - $table->string('owner'); - $table->integer('expiration'); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('cache'); - Schema::dropIfExists('cache_locks'); - } -}; diff --git a/database/migrations/0001_01_01_000002_create_jobs_table.php b/database/migrations/0001_01_01_000002_create_jobs_table.php deleted file mode 100644 index 425e705..0000000 --- a/database/migrations/0001_01_01_000002_create_jobs_table.php +++ /dev/null @@ -1,57 +0,0 @@ -id(); - $table->string('queue')->index(); - $table->longText('payload'); - $table->unsignedTinyInteger('attempts'); - $table->unsignedInteger('reserved_at')->nullable(); - $table->unsignedInteger('available_at'); - $table->unsignedInteger('created_at'); - }); - - Schema::create('job_batches', function (Blueprint $table) { - $table->string('id')->primary(); - $table->string('name'); - $table->integer('total_jobs'); - $table->integer('pending_jobs'); - $table->integer('failed_jobs'); - $table->longText('failed_job_ids'); - $table->mediumText('options')->nullable(); - $table->integer('cancelled_at')->nullable(); - $table->integer('created_at'); - $table->integer('finished_at')->nullable(); - }); - - Schema::create('failed_jobs', function (Blueprint $table) { - $table->id(); - $table->string('uuid')->unique(); - $table->text('connection'); - $table->text('queue'); - $table->longText('payload'); - $table->longText('exception'); - $table->timestamp('failed_at')->useCurrent(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('jobs'); - Schema::dropIfExists('job_batches'); - Schema::dropIfExists('failed_jobs'); - } -}; diff --git a/resources/views/components/home/brand-home-fashion-v1.blade.php b/resources/views/components/home/brand-home-fashion-v1.blade.php new file mode 100644 index 0000000..2344018 --- /dev/null +++ b/resources/views/components/home/brand-home-fashion-v1.blade.php @@ -0,0 +1,44 @@ +
+
+
+ + + + + @foreach($brands as $brand) + + {{ $brand->name }} + + + @endforeach + +
+ + +
+
+
\ No newline at end of file diff --git a/resources/views/components/home/brand-home-fashion-v2.blade.php b/resources/views/components/home/brand-home-fashion-v2.blade.php new file mode 100644 index 0000000..922ac62 --- /dev/null +++ b/resources/views/components/home/brand-home-fashion-v2.blade.php @@ -0,0 +1,105 @@ +
+

Shop by brand

+
+ +
+
diff --git a/resources/views/home/fashion-v1.blade.php b/resources/views/home/fashion-v1.blade.php index bfef74d..b9b56d8 100644 --- a/resources/views/home/fashion-v1.blade.php +++ b/resources/views/home/fashion-v1.blade.php @@ -1886,87 +1886,7 @@ -
-
- - - -
-
-
+ diff --git a/resources/views/home/fashion-v2.blade.php b/resources/views/home/fashion-v2.blade.php index 3ceb865..e19355d 100644 --- a/resources/views/home/fashion-v2.blade.php +++ b/resources/views/home/fashion-v2.blade.php @@ -2170,112 +2170,7 @@ - -
-

Shop by brand

-
- -
-
+ diff --git a/routes/web.php b/routes/web.php index 7911874..a772e11 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,12 +1,15 @@ '/'], function () { +Route::group(['prefix' => '/dummy'], function () { Route::get('', [RoutingController::class, 'index'])->name('root'); Route::get('{first}/{second}/{third}', [RoutingController::class, 'thirdLevel'])->name('third'); Route::get('{first}/{second}', [RoutingController::class, 'secondLevel'])->name('second'); Route::get('{any}', [RoutingController::class, 'root'])->name('any'); }); + +Route::get('/', [HomeController::class, 'index'])->name('home'); \ No newline at end of file