diff --git a/app/Http/Controllers/ExplorePageController.php b/app/Http/Controllers/ExplorePageController.php index 3c3f0b9..00419ec 100644 --- a/app/Http/Controllers/ExplorePageController.php +++ b/app/Http/Controllers/ExplorePageController.php @@ -33,7 +33,7 @@ protected function deals(FormRequest $request, Builder $query, AddRecentSearchAc { // Add a search query if ($request->has('search') && $request->get('search') !== null) { - $query->tap(fn ($q) => (new Deal)->search($q, $request->search)); + $query->tap(fn($q) => (new Deal)->search($q, $request->search)); \Illuminate\Support\defer(function () use ($action, $request) { $action->execute($request->user(), ['query' => $request->search]); @@ -42,19 +42,17 @@ protected function deals(FormRequest $request, Builder $query, AddRecentSearchAc // Add category sorting filter if ($request->has('category') && $request->get('category') !== null) { - $query->tap(fn ($q) => (new Deal)->filterByCategory($q, $request->category)); + $query->tap(fn($q) => (new Deal)->filterByCategory($q, $request->category)); } // Add sorting filters - if ($request->has('sortBy')) { - $query = match (ExplorePageFilters::tryFrom($request->sortBy)) { - ExplorePageFilters::Like => $query->orderBy('total_likes', 'desc'), - ExplorePageFilters::Click => $query->orderBy('total_redirection', 'desc'), - default => $query->orderByRaw( - '((COALESCE(total_likes, 0) * 70.0) / 100.0) + ((COALESCE(total_redirection, 0) * 30.0) / 100.0) DESC' - ) - }; - } + $query = match (ExplorePageFilters::tryFrom($request->sortBy)) { + ExplorePageFilters::Like => $query->orderBy('total_likes', 'desc'), + ExplorePageFilters::Click => $query->orderBy('total_redirection', 'desc'), + default => $query->orderByRaw( + '((COALESCE(total_likes, 0) * 70.0) / 100.0) + ((COALESCE(total_redirection, 0) * 30.0) / 100.0) DESC' + ) + }; return $query->latest()->paginate(); } diff --git a/app/Http/Controllers/Interaction/ReportController.php b/app/Http/Controllers/Interaction/ReportController.php index 8834bec..37cc512 100644 --- a/app/Http/Controllers/Interaction/ReportController.php +++ b/app/Http/Controllers/Interaction/ReportController.php @@ -9,6 +9,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; class ReportController extends Controller @@ -30,9 +31,9 @@ public function store(StoreReportRequest $request, Deal $deal) $data['user_id'] = Auth::id(); // Check if the user already reported the deal - $alreadyReported = $deal->reports()->where('user_id', Auth::id())->first(); + $alreadyReported = $deal->reports()->where('user_id', Auth::id())->exists(); if ($alreadyReported) { - return response()->json(['message' => 'You already reported this report'], 405); + return response()->json(['message' => 'You had already reported this deal'], 200); } try { @@ -42,7 +43,7 @@ public function store(StoreReportRequest $request, Deal $deal) Report::reguard(); }); - return response()->json(['message' => 'Report created'], 201); + return response()->json(['message' => 'Report submitted. Thank you for keeping DealHub safe'], 201); } catch (\Throwable $exception) { Log::error('Error creating report', [ diff --git a/app/Models/Deal.php b/app/Models/Deal.php index cec6c4b..ddcb55b 100644 --- a/app/Models/Deal.php +++ b/app/Models/Deal.php @@ -105,9 +105,10 @@ public function withViewPerDeal(Builder $query): Builder #[Scope] public function search(Builder $query, string $search): Builder { - return $query - ->where('title', 'LIKE', "%$search%") - ->orWhereRelation('broker', 'name', 'LIKE', "%$search%"); + return $query->where(function (Builder $query) use ($search) { + $query->where('title', 'LIKE', "%$search%") + ->orWhereRelation('broker', 'name', 'LIKE', "%$search%"); + }); } /** diff --git a/resources/js/report-deal.js b/resources/js/report-deal.js index cad0547..67094b7 100644 --- a/resources/js/report-deal.js +++ b/resources/js/report-deal.js @@ -28,20 +28,16 @@ if (reportForm) { try { let response = await axios.post( - `report/${dealId}`, + `api/report/${dealId}`, formData ); - showToast('Report submitted. Thank you for keeping DealHub safe!'); + showToast(response.data.message); closeModal('report-modal') } catch (error) { - if (error.response.status === 405) { - closeModal('report-modal'); - showToast('You already have reported this deal !'); - return; - } + // Iterate over the all error messages spans and show validation errors if (error.response.status === 422) { diff --git a/resources/views/components/dashboard/user/recent-search/index.blade.php b/resources/views/components/dashboard/user/recent-search/index.blade.php index 7b3dcfc..bd43380 100644 --- a/resources/views/components/dashboard/user/recent-search/index.blade.php +++ b/resources/views/components/dashboard/user/recent-search/index.blade.php @@ -1,6 +1,8 @@ -@props(['searches']) -
    - @foreach($searches as $search) - - @endforeach -
+@props(['searches' => []]) +@if(filled($searches)) +
    + @foreach($searches as $search) + + @endforeach +
+@endif diff --git a/resources/views/dashboards/user/profile/show.blade.php b/resources/views/dashboards/user/profile/show.blade.php index 4d78605..3d05706 100644 --- a/resources/views/dashboards/user/profile/show.blade.php +++ b/resources/views/dashboards/user/profile/show.blade.php @@ -138,7 +138,7 @@ class=" h-full items-center flex justify-center"> {{$report->deals->first()->title}}
- +
diff --git a/routes/api/interactions.php b/routes/api/interactions.php index e158f3d..468be40 100644 --- a/routes/api/interactions.php +++ b/routes/api/interactions.php @@ -1,7 +1,14 @@ middleware('throttle:30,1') ->name('view-deal'); + +Route::middleware('throttle:30,1')->group(function () { + Route::post('/report/{deal}', [ReportController::class, 'store'])->name('report-deal'); + Route::delete('/report/{deal}', [ReportController::class, 'destroy']); +}); diff --git a/routes/web/interaction.php b/routes/web/interaction.php index 79582aa..98f300f 100644 --- a/routes/web/interaction.php +++ b/routes/web/interaction.php @@ -2,7 +2,6 @@ use App\Enums\InteractionType; use App\Http\Controllers\Interaction\InteractionController; -use App\Http\Controllers\Interaction\ReportController; use Illuminate\Support\Facades\Route; Route::middleware('auth')->group(function () { @@ -17,10 +16,6 @@ ->middleware('throttle:30,1') ->name('favorite'); - Route::resource('report', ReportController::class) - ->middleware('throttle:5,1') - ->only(['store', 'destroy']); - Route::get('/redirect/{deal}', [InteractionController::class, 'redirect']) ->middleware(['throttle:10,1', 'signed']) ->name('redirect');