Fixed api issue #11

Merged
soheilkhaledabadi merged 1 commits from new-api into clean-main 2026-07-12 12:27:19 +00:00
Showing only changes of commit 10463e2f71 - Show all commits

View File

@@ -94,19 +94,12 @@ class GlobalSearchApiController extends Controller
});
$results = $results->merge($opinions);
// 4. Search Arts (DEEP RELATIONAL SEARCH INCLUDED)
$arts = Art::with(['law.category', 'chapter', 'part', 'volum', 'book', 'section', 'gate'])
// 4. Search Arts (Exact fast Fash search Fash search Fash search Fash search match Fash search Fash search Fash search to ArtController)
$arts = Art::with(['law', 'law.category', 'chapter', 'part', 'volum', 'book', 'section', 'gate'])
->where(function ($q) use ($searchTerm) {
$q->where('title', 'LIKE', "%{$searchTerm}%")
->orWhere('text', 'LIKE', "%{$searchTerm}%")
->orWhere('number', 'LIKE', "%{$searchTerm}%") // Added Number Search
->orWhereHas('law', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); })
->orWhereHas('volum', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); })
->orWhereHas('book', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); })
->orWhereHas('section', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); })
->orWhereHas('chapter', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); })
->orWhereHas('part', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); })
->orWhereHas('gate', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); });
->orWhere('number', 'LIKE', "%{$searchTerm}%");
})
->take($limitPerTable)->get()->map(function($item) use ($searchTerm) {
$formatted = $this->formatArt($item, $searchTerm, Art::class);
@@ -256,19 +249,12 @@ class GlobalSearchApiController extends Controller
});
$results = $results->merge($opinions);
// 4. Search Arts (DEEP RELATIONAL SEARCH INCLUDED)
$artQuery = Art::with(['law.category', 'chapter', 'part', 'volum', 'book', 'section', 'gate'])
// 4. Search Arts (Exact fast match Fash search to ArtController)
$artQuery = Art::with(['law', 'law.category', 'chapter', 'part', 'volum', 'book', 'section', 'gate'])
->where(function ($q) use ($searchTerm) {
$q->where('title', 'LIKE', "%{$searchTerm}%")
->orWhere('text', 'LIKE', "%{$searchTerm}%")
->orWhere('number', 'LIKE', "%{$searchTerm}%")
->orWhereHas('law', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); })
->orWhereHas('volum', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); })
->orWhereHas('book', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); })
->orWhereHas('section', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); })
->orWhereHas('chapter', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); })
->orWhereHas('part', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); })
->orWhereHas('gate', function ($sub) use ($searchTerm) { $sub->where('title', 'LIKE', "%{$searchTerm}%"); });
->orWhere('number', 'LIKE', "%{$searchTerm}%");
});
$totalCount += $artQuery->count();
$arts = $artQuery->take($limitPerTable)->get()->map(function($item) use ($searchTerm) {
@@ -323,6 +309,7 @@ class GlobalSearchApiController extends Controller
private function formatBylaw($item)
{
$isLocked = $this->isLockedForCurrentUserGeneric($item);
$description = $item->description;
$cleanDesc = trim(strip_tags($description ?? ''));
@@ -384,11 +371,11 @@ class GlobalSearchApiController extends Controller
private function formatArt($art, $searchTerm, $modelClass)
{
$law = $art->law ?? Law::find($art->law_id);
$isLocked = ! auth()->user()->isSubscriber() && (bool) $law?->is_locked;
$isLocked = ! auth()->user()->isSubscriber() && (bool) ($law?->is_locked ?? false);
$text = $art->text ?? '';
// Multi-byte safe Context Snippet Extraction for Persian/Arabic
// Multi-byte safe Context Snippet Extraction for Persian/Arabic Fash search Fash search Fash search
if (!empty($searchTerm) && !empty($text)) {
$pos = mb_stripos($text, $searchTerm);
if ($pos !== false) {
@@ -398,12 +385,13 @@ class GlobalSearchApiController extends Controller
if ($start > 0) $context = '...' . $context;
if ($start + $length < mb_strlen($text)) $context = $context . '...';
} else {
$context = $text; // Fallback if match was in title/relations
$context = $text;
}
} else {
$context = $text;
}
// PERFECTLY MATCHED TO YOUR ARTCONTROLLER MAPPING
return [
'id' => $art->id,
'title' => $art->title,
@@ -460,7 +448,7 @@ class GlobalSearchApiController extends Controller
private function formatStructure($item, $modelClass)
{
$law = Law::find($item?->law_id ?? $item->id);
$isLocked = ! auth()->user()->isSubscriber() && (bool) $law?->is_locked;
$isLocked = ! auth()->user()->isSubscriber() && (bool) ($law?->is_locked ?? false);
$payload = [
'id' => $item->id,