Proje: Okul Platform · Hub: Okul Platform — Domain

Arama Endpoint’i

GET /api/search/schools — optional auth (auth:sanctum opsiyonel)

Parametreler

  • query (required, 1-255 char) — Arama metni
  • search_locations (boolean, default: false) — Lokasyon sonuçları dahil et
  • search_colleges (boolean, default: false) — Kolej sonuçları dahil et

prepareSearchQuery() Helper

helpers.php içinde Türkçe arama normalize fonksiyonu:

'deki ', 'daki ', 'ile ', 've ' → boşluk ile kaldır
'ana okul'   → 'anaokul'
'orta okul'  → 'ortaokul'
'okulu'      → 'okul'
'okulları'   → 'okul'

Örnek: “Bakırköy’deki anaokulları” → “Bakırköy anaokul”

Arama Altyapısı

Laravel Scout + Typesense

School::toSearchableArray() ile index alanları:

  • name, name_no_diacritics — İsim (aksanlı/aksansız)
  • about, mission, vision, history — İçerik
  • school_type_name, url, thumb_url
  • location_* — Lokasyon
  • is_customer, listing_priority — Önceliklendirme

Test Verisi Gizleme

Admin değilse: excludeTestData() ile test okulları gizlenir.

$showTestData = auth()->user()?->isAdmin() ?? false;

SchoolSearchService

app/Services/Controllers/General/Search/SchoolSearchService.php — Typesense sorgu çalıştırma. SchoolSearchRepositoryInterface → Arama yapılır.