From 4fd98957cb6257b2a6ff011dd4403386c0b1dae0 Mon Sep 17 00:00:00 2001 From: kusowl Date: Tue, 27 Jan 2026 13:49:42 +0530 Subject: [PATCH] feature(guest access to explore page) - guest users can access explore page - deal interactions are seen to customer and guest users - guest users redirected to login page for interactions --- .../Controllers/ExplorePageController.php | 7 +++-- resources/js/interaction.js | 10 ++++++- resources/js/report-deal.js | 4 +++ .../dashboard/user/listing-card.blade.php | 27 ++++++++++++++---- .../components/explore/profile-menu.blade.php | 28 +++++++++++++------ resources/views/components/layout.blade.php | 2 ++ resources/views/explore.blade.php | 10 ++++--- routes/web.php | 4 +-- routes/web/interaction.php | 6 ++-- 9 files changed, 72 insertions(+), 26 deletions(-) diff --git a/app/Http/Controllers/ExplorePageController.php b/app/Http/Controllers/ExplorePageController.php index fe8164a..bd34b7f 100644 --- a/app/Http/Controllers/ExplorePageController.php +++ b/app/Http/Controllers/ExplorePageController.php @@ -67,10 +67,10 @@ protected function profileLink(): string { $user = Auth::user(); - return match ($user->role) { + return match ($user->role ?? null) { UserTypes::Broker->value => route('broker.profile.show', $user), UserTypes::User->value => route('customer.profile.show', $user), - default => '' + default => route('login.create') }; } @@ -81,6 +81,9 @@ protected function categories(): Collection protected function recentSearches(): Collection { + if (!Auth::check()) { + return collect(); + } return Auth::user()->recentSearches()->latest()->select(['id','query'])->get(); } } diff --git a/resources/js/interaction.js b/resources/js/interaction.js index f0d2e46..228cbbb 100644 --- a/resources/js/interaction.js +++ b/resources/js/interaction.js @@ -18,9 +18,13 @@ export async function like(button) { showToast(response.data.message) } catch (e) { + if (e.response.status === 401){ + window.location.href = '/login/create'; + return; + } showToast('Something went wrong!') // Revert the states - toggleState(button, !isLiked, activeClasses); + toggleState(button, isLiked, activeClasses); console.error(e); } } @@ -38,6 +42,10 @@ export async function favorite(button) { showToast(response.data.message) } catch (e) { + if (e.response.status === 401){ + window.location.href = '/login/create'; + return; + } showToast(e.response.data.message) toggleState(button, isFavorite, activeClasses); console.error(e); diff --git a/resources/js/report-deal.js b/resources/js/report-deal.js index 67094b7..0ca04d2 100644 --- a/resources/js/report-deal.js +++ b/resources/js/report-deal.js @@ -7,6 +7,10 @@ const reportForm = document.getElementById('report-form'); export function showReportModal(dealId, dealTitle) { // Clear the fields + if (!reportForm || !reportModal) { + window.location.href = '/login/create'; + return; + } reportForm.reset(); const oldErrors = reportForm.querySelectorAll('.text-red-500'); oldErrors.forEach(error => error.remove()); diff --git a/resources/views/components/dashboard/user/listing-card.blade.php b/resources/views/components/dashboard/user/listing-card.blade.php index 7da308e..69ed5ef 100644 --- a/resources/views/components/dashboard/user/listing-card.blade.php +++ b/resources/views/components/dashboard/user/listing-card.blade.php @@ -1,18 +1,31 @@ @props(['deal' => '', 'broker' => '']) - +
{{$deal->category->name}} - + + {{-- Show this to guest or customer --}} + @if(!auth()->check() || (auth()->check() && auth()->user()->isCustomer())) + + @endif

{{$deal->title}}

{{$deal->description}}

- - + @guest + +

Contact Broker

+ +
+ @endguest + @auth + + @endauth
@@ -20,12 +33,14 @@ - +
@if(filled($deal->link)) - +

View Deal

diff --git a/resources/views/components/explore/profile-menu.blade.php b/resources/views/components/explore/profile-menu.blade.php index 676afd6..9b9dc6e 100644 --- a/resources/views/components/explore/profile-menu.blade.php +++ b/resources/views/components/explore/profile-menu.blade.php @@ -1,5 +1,6 @@ @props(['profileLink' => ''])
+ @auth
-
- @csrf - @method('delete') - - - + @endauth + @guest + +

Login

- + @endguest + + @auth +
+ @csrf + @method('delete') + + + + +
+ @endauth
diff --git a/resources/views/components/layout.blade.php b/resources/views/components/layout.blade.php index afce737..7bb929b 100644 --- a/resources/views/components/layout.blade.php +++ b/resources/views/components/layout.blade.php @@ -1,3 +1,4 @@ + @props(['title' => '']) @php $pageTitle = config('app.name', 'Laravel'); @@ -11,6 +12,7 @@ + {{ $pageTitle }} diff --git a/resources/views/explore.blade.php b/resources/views/explore.blade.php index 55fc2ab..315a5e1 100644 --- a/resources/views/explore.blade.php +++ b/resources/views/explore.blade.php @@ -20,14 +20,16 @@ @endsession
- + - + - - + @auth + + + @endauth diff --git a/routes/web.php b/routes/web.php index ac22608..9c22ff1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -12,9 +12,9 @@ require __DIR__.'/web/customer.php'; Route::get('/', HomeController::class)->name('home'); -Route::middleware('auth')->group(function () { +Route::get('/explore', ExplorePageController::class)->name('explore'); - Route::get('/explore', ExplorePageController::class)->name('explore'); +Route::middleware('auth')->group(function () { Route::view('/admin/dashboard', 'dashboards.admin.index') ->middleware(HasRole::class.':'.UserTypes::Admin->value) diff --git a/routes/web/interaction.php b/routes/web/interaction.php index 98f300f..adacf0d 100644 --- a/routes/web/interaction.php +++ b/routes/web/interaction.php @@ -1,19 +1,21 @@ group(function () { Route::post('/like/{deal}', [InteractionController::class, 'togglesState']) ->defaults('type', InteractionType::Like) - ->middleware('throttle:30,1') + ->middleware(['throttle:30,1', HasRole::class.':'.UserTypes::User->value]) ->name('like'); Route::post('/favorite/{deal}', [InteractionController::class, 'togglesState']) ->defaults('type', InteractionType::Favorite) - ->middleware('throttle:30,1') + ->middleware(['throttle:30,1', HasRole::class.':'.UserTypes::User->value]) ->name('favorite'); Route::get('/redirect/{deal}', [InteractionController::class, 'redirect'])