38980-vm/app-9w9pd00g5j41/PROVIDER_LEAD_FIX.md
2026-03-04 18:25:09 +00:00

4.4 KiB
Raw Permalink Blame History

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

  1. RLS Policy Sorunu: Provider'ın leads tablosuna erişimi engellenmiş olabilir
  2. Frontend Hata: API çağrısı başarısız oluyor olabilir
  3. Cache Sorunu: Eski veriler cache'de kalmış olabilir
  4. 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ı

  1. Admin panelinde Users sayfasını kontrol et - rol görünmeli
  2. temrentravel olarak giriş yap
  3. Provider Dashboard'a git
  4. En az 1 lead görünmeli (012a8ba6 - Kapadokya + müze)
  5. 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

  1. Kullanıcıdan console log'larını iste
  2. Network tab'de API çağrılarını kontrol et
  3. Provider dashboard'da loading state'i kontrol et
  4. RLS policy'leri tekrar gözden geçir