4.4 KiB
Provider Lead Görünürlük Sorunu - Analiz ve Çözüm
Sorun Raporu
Kullanıcı: temrentravel (ID: 43595be4-acce-4d42-bfbf-66cbf204457c) Şikayet: Provider dashboard'da lead'ler gözükmüyor
Analiz Sonuçları
1. Veritabanı Durumu ✅
-- Kullanıcı profili
username: temrentravel
role: provider ✓
created_at: 2026-01-30 13:56:48
2. Provider Servisi ✅
provider_id: 43595be4-acce-4d42-bfbf-66cbf204457c
business_name: Temren Travel
destinations: ["Kapadokya, Türkiye", "İstanbul", "Antalya", "İzmir", "Bodrum"]
activity_categories: ["müze", "doğa", "macera", "kültür", "gastronomi", "tarih",
"aktivite", "doğal alan", "doğal oluşum", "tarihi mekan",
"tarihi yerleşim", "kasaba", "köy"]
3. Sistemdeki Lead'ler
Toplam 4 lead, hepsi consent_given=true ve status='new':
| Lead ID | Destination | Interests | Dest Match | Interest Match |
|---|---|---|---|---|
| 012a8ba6 | Kapadokya, Türkiye | ["müze"] | ✅ | ✅ |
| 8112d8ac | Kapadokya, Türkiye | ["Aktivite", "Doğal Alan", ...] | ✅ | ❌ |
| 2568edee | Kapadokya, Türkiye | ["Aktivite", "Doğal Alan", ...] | ✅ | ❌ |
| 43465f1f | bchgvjhv | ["ghghgh", "adventure", ...] | ❌ | ❌ |
4. Tespit Edilen Sorun: Case Sensitivity
Problem: Lead interests ve provider categories arasında büyük/küçük harf uyumsuzluğu
Provider categories (lowercase):
- "aktivite", "doğal alan", "doğal oluşum", "tarihi mekan", "müze", "tarihi yerleşim", "kasaba", "köy"
Lead interests (Title Case):
- "Aktivite", "Doğal Alan", "Doğal Oluşum", "Tarihi Mekan", "Müze", "Tarihi Yerleşim", "Kasaba", "Köy"
Sonuç: PostgreSQL'in && (array overlap) operatörü case-sensitive, bu yüzden eşleşme başarısız oluyor.
5. Frontend Kod Analizi
src/db/api.ts (lines 1154-1180):
// Frontend case-insensitive filtering yapıyor
const normalizedCategories = providerService.activity_categories.map((cat: string) =>
cat.toLowerCase().trim()
);
const normalizedInterests = lead.interests.map((interest: string) =>
interest.toLowerCase().trim()
);
const hasMatch = normalizedInterests.some((interest: string) =>
normalizedCategories.includes(interest)
);
Ancak: Bu kod çalışıyor olmalı! Frontend'de case-insensitive matching var.
Olası Nedenler
- RLS Policy Sorunu: Provider'ın leads tablosuna erişimi engellenmiş olabilir
- Frontend Hata: API çağrısı başarısız oluyor olabilir
- Cache Sorunu: Eski veriler cache'de kalmış olabilir
- Auth Sorunu: Kullanıcı provider olarak doğru şekilde authenticate olmamış olabilir
Çözüm Adımları
Adım 1: Admin UI Düzeltmesi ✅
src/pages/admin/Users.tsx - SelectValue düzeltildi
// ÖNCE (Yanlış)
<SelectValue>
{user.role === 'admin' ? 'Admin' : user.role === 'provider' ? 'Provider' : 'Kullanıcı'}
</SelectValue>
// SONRA (Doğru)
<SelectValue placeholder="Rol seçin" />
Adım 2: Case Sensitivity Düzeltmesi
Provider categories'i normalize et:
UPDATE provider_services
SET activity_categories = ARRAY[
'müze', 'doğa', 'macera', 'kültür', 'gastronomi', 'tarih',
'aktivite', 'doğal alan', 'doğal oluşum', 'tarihi mekan',
'tarihi yerleşim', 'kasaba', 'köy'
]
WHERE provider_id = '43595be4-acce-4d42-bfbf-66cbf204457c';
Adım 3: Debug Function
SELECT * FROM debug_provider_leads('43595be4-acce-4d42-bfbf-66cbf204457c');
Test Adımları
- ✅ Admin panelinde Users sayfasını kontrol et - rol görünmeli
- ⏳ temrentravel olarak giriş yap
- ⏳ Provider Dashboard'a git
- ⏳ En az 1 lead görünmeli (012a8ba6 - Kapadokya + müze)
- ⏳ Console'da hata olup olmadığını kontrol et
Beklenen Sonuç
Provider dashboard'da 1 lead görünmeli:
- Lead ID: 012a8ba6-7273-4b39-b071-2e6a7817d371
- Destination: Kapadokya, Türkiye
- Interests: ["müze"]
- Match: ✅ Hem destination hem interest eşleşiyor
Diğer 2 Kapadokya lead'i şu anda görünmeyecek çünkü interests case-sensitive eşleşmiyor. Ancak frontend case-insensitive filtering yapıyor, bu yüzden aslında görünmeliler.
Sonraki Adımlar
- Kullanıcıdan console log'larını iste
- Network tab'de API çağrılarını kontrol et
- Provider dashboard'da loading state'i kontrol et
- RLS policy'leri tekrar gözden geçir