fix: empty recent searches, user cannot report deals, category filter is not working with search

This commit is contained in:
kusowl 2026-01-27 12:05:14 +05:30
parent 94ef8f360d
commit 62c306986c
8 changed files with 36 additions and 36 deletions

View File

@ -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();
}

View File

@ -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', [

View File

@ -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%");
});
}
/**

View File

@ -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) {

View File

@ -1,6 +1,8 @@
@props(['searches'])
<ol class="absolute bg-white shadow-xl border border-gray-300 -top-15 w-full rounded-xl py-4 px-4 flex flex-col opacity-0 scale-y-17 group-focus-within:scale-y-100 group-focus-within:top-15 group-focus-within:opacity-100 transition-all duration-300 ease-out">
@foreach($searches as $search)
<x-dashboard.user.recent-search.recent-search-item :item="$search" />
@endforeach
</ol>
@props(['searches' => []])
@if(filled($searches))
<ol class="absolute bg-white shadow-xl border border-gray-300 -top-15 w-full rounded-xl py-4 px-4 flex flex-col opacity-0 scale-y-17 group-focus-within:scale-y-100 group-focus-within:top-15 group-focus-within:opacity-100 transition-all duration-300 ease-out">
@foreach($searches as $search)
<x-dashboard.user.recent-search.recent-search-item :item="$search"/>
@endforeach
</ol>
@endif

View File

@ -138,7 +138,7 @@ class=" h-full items-center flex justify-center">
<td class="text-sm px-4">{{$report->deals->first()->title}}</td>
<x-slot:actions>
<div class="flex items-center justify-center py-1 px-2">
<x-ui.button-sm link="{{route('explore', ['show' => $deal->id])}}" variant="ghost">
<x-ui.button-sm link="{{route('explore', ['show' => $report->deals->first()->id])}}" variant="ghost">
<x-heroicon-o-eye class="w-4"/>
</x-ui.button-sm>
</div>

View File

@ -1,7 +1,14 @@
<?php
use App\Http\Controllers\Interaction\InteractionController;
use App\Http\Controllers\Interaction\ReportController;
use Illuminate\Support\Facades\Route;
Route::post('/view/{deal}', [InteractionController::class, 'view'])
->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']);
});

View File

@ -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');