From 71a6f683a74c6fc9dfe2ffbe5f52cfc1b424db8d Mon Sep 17 00:00:00 2001 From: "m.razaghi" Date: Thu, 9 Jul 2026 19:11:39 +0330 Subject: [PATCH] Fixed major bugs --- .../Controllers/api/BylawApiController.php | 28 +++++++++++++++++++ .../api/JudicialPrecedentApiController.php | 25 +++++++++++++++++ .../api/LegalOpinionApiController.php | 26 +++++++++++++++++ routes/api.php | 19 +++++++------ 4 files changed, 90 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/api/BylawApiController.php b/app/Http/Controllers/api/BylawApiController.php index 9078f12..f7ded7b 100644 --- a/app/Http/Controllers/api/BylawApiController.php +++ b/app/Http/Controllers/api/BylawApiController.php @@ -123,6 +123,34 @@ class BylawApiController extends Controller return $this->success($responseData, 'Success', 'Search Results Fetched'); } + public function fast_search(Request $request) + { + $searchTerm = $request->input('search'); + + $query = BylawDocument::with(['category', 'approvalAuthority', 'promulgationAuthority']) + ->where('is_published', true); + + if (!empty($searchTerm)) { + $query->where(function ($q) use ($searchTerm) { + $q->where('title', 'LIKE', "%{$searchTerm}%") + ->orWhere('description', 'LIKE', "%{$searchTerm}%") + ->orWhere('promulgation_number', 'LIKE', "%{$searchTerm}%") + ->orWhere('official_gazette_number', 'LIKE', "%{$searchTerm}%"); + }); + } + + $count = $query->count(); + // Limit to 5 results for fast search dropdown + $items = $query->orderBy('approval_date', 'desc')->take(5)->get()->map(function ($item) { + return $this->formatBylaw($item); + }); + + return $this->success([ + 'items' => $items, + 'count' => $count + ], 'Success', 'Fast Search Results'); + } + public function pager($id) { $current = BylawDocument::with(['category', 'approvalAuthority', 'promulgationAuthority']) diff --git a/app/Http/Controllers/api/JudicialPrecedentApiController.php b/app/Http/Controllers/api/JudicialPrecedentApiController.php index 1fc3232..7925686 100644 --- a/app/Http/Controllers/api/JudicialPrecedentApiController.php +++ b/app/Http/Controllers/api/JudicialPrecedentApiController.php @@ -96,6 +96,31 @@ class JudicialPrecedentApiController extends Controller return $this->success($responseData, 'Success', 'Search Results Fetched'); } + public function fast_search(Request $request) + { + $searchTerm = $request->input('search'); + $query = JudicialPrecedent::query(); + + if (!empty($searchTerm)) { + $query->where(function ($q) use ($searchTerm) { + $q->where('ruling_number', 'LIKE', "%{$searchTerm}%") + ->orWhere('subject', 'LIKE', "%{$searchTerm}%") + ->orWhere('full_text', 'LIKE', "%{$searchTerm}%"); + }); + } + + $count = $query->count(); + // Limit to 5 results for fast search dropdown + $items = $query->orderBy('ruling_date', 'desc')->take(5)->get()->map(function ($item) { + return $this->formatItem($item); + }); + + return $this->success([ + 'items' => $items, + 'count' => $count + ], 'Success', 'Fast Search Results'); + } + public function pager($id) { $current = JudicialPrecedent::find($id); diff --git a/app/Http/Controllers/api/LegalOpinionApiController.php b/app/Http/Controllers/api/LegalOpinionApiController.php index 1779a85..fab7d0c 100644 --- a/app/Http/Controllers/api/LegalOpinionApiController.php +++ b/app/Http/Controllers/api/LegalOpinionApiController.php @@ -97,6 +97,32 @@ class LegalOpinionApiController extends Controller return $this->success($responseData, 'Success', 'Search Results Fetched'); } + public function fast_search(Request $request) + { + $searchTerm = $request->input('search'); + $query = LegalOpinion::query(); + + if ($request->filled('search')) { + $query->where(function ($q) use ($searchTerm) { + $q->where('opinion_number', 'LIKE', "%{$searchTerm}%") + ->orWhere('subject', 'LIKE', "%{$searchTerm}%") + ->orWhere('full_text', 'LIKE', "%{$searchTerm}%") + ->orWhere('issuing_authority', 'LIKE', "%{$searchTerm}%"); + }); + } + + $count = $query->count(); + // Limit to 5 results for fast search dropdown + $items = $query->orderBy('opinion_date', 'desc')->take(5)->get()->map(function ($item) { + return $this->formatItem($item); + }); + + return $this->success([ + 'items' => $items, + 'count' => $count + ], 'Success', 'Fast Search Results'); + } + public function pager($id) { $current = LegalOpinion::find($id); diff --git a/routes/api.php b/routes/api.php index 293e58a..bfb1d05 100644 --- a/routes/api.php +++ b/routes/api.php @@ -25,7 +25,6 @@ Route::prefix('v1')->group(function () { Route::post('verify', [AuthController::class, 'verify']); Route::post('version', [VersionController::class, 'index']); Route::post('/payment/callback', [SubscribePlanController::class, 'paymentCallback'])->name('payment.callback'); - }); Route::prefix('v1')->middleware('auth:sanctum')->group(function () { @@ -35,7 +34,7 @@ Route::prefix('v1')->middleware('auth:sanctum')->group(function () { Route::get('art', [ArtController::class, 'index']); Route::get('categories', [CategoriesController::class, 'index']); Route::post('art/search', [ArtController::class, 'search']); - Route::post('fast-search', [ArtController::class, 'fash_search']); + Route::post('fast-search', [ArtController::class, 'fash_search']); // Legacy Art fast search Route::post('art/note', [NoteController::class, 'create']); Route::put('art/note/{id}', [NoteController::class, 'update']); Route::delete('art/note/{id}', [NoteController::class, 'destroy']); @@ -71,25 +70,29 @@ Route::prefix('v1')->middleware('auth:sanctum')->group(function () { Route::post('suggestions', [SuggestionController::class, 'index']); - + // Judicial Precedents Route::get('judicial-precedents/categories', [\App\Http\Controllers\api\JudicialPrecedentApiController::class, 'categories']); Route::get('judicial-precedents', [\App\Http\Controllers\api\JudicialPrecedentApiController::class, 'index']); Route::get('judicial-precedents/{id}/pager', [\App\Http\Controllers\api\JudicialPrecedentApiController::class, 'pager']); - Route::post('judicial-precedents/search', [\App\Http\Controllers\api\JudicialPrecedentApiController::class, 'search']); // NEW + Route::post('judicial-precedents/search', [\App\Http\Controllers\api\JudicialPrecedentApiController::class, 'search']); + Route::post('judicial-precedents/fast-search', [\App\Http\Controllers\api\JudicialPrecedentApiController::class, 'fast_search']); // NEW + // Legal Opinions Route::get('legal-opinions/categories', [\App\Http\Controllers\api\LegalOpinionApiController::class, 'categories']); Route::get('legal-opinions', [\App\Http\Controllers\api\LegalOpinionApiController::class, 'index']); Route::get('legal-opinions/{id}/pager', [\App\Http\Controllers\api\LegalOpinionApiController::class, 'pager']); - Route::post('legal-opinions/search', [\App\Http\Controllers\api\LegalOpinionApiController::class, 'search']); // NEW + Route::post('legal-opinions/search', [\App\Http\Controllers\api\LegalOpinionApiController::class, 'search']); + Route::post('legal-opinions/fast-search', [\App\Http\Controllers\api\LegalOpinionApiController::class, 'fast_search']); // NEW + // Bylaws Route::get('bylaws/categories', [\App\Http\Controllers\api\BylawApiController::class, 'categories']); Route::get('bylaws/authorities', [\App\Http\Controllers\api\BylawApiController::class, 'authorities']); Route::get('bylaws', [\App\Http\Controllers\api\BylawApiController::class, 'index']); Route::get('bylaws/{id}/pager', [\App\Http\Controllers\api\BylawApiController::class, 'pager']); Route::post('bylaws/search', [\App\Http\Controllers\api\BylawApiController::class, 'search']); + Route::post('bylaws/fast-search', [\App\Http\Controllers\api\BylawApiController::class, 'fast_search']); // NEW - - + // Global Search Route::post('global-search', [\App\Http\Controllers\api\GlobalSearchApiController::class, 'search']); - + Route::post('global-search/fast-search', [\App\Http\Controllers\api\GlobalSearchApiController::class, 'fast_search']); // NEW });