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

4.8 KiB
Raw Permalink Blame History

Lead Görünürlük Sorunu - Çözüm Raporu

Sorun Tanımı

Kullanıcı: temrentravel
Rol: Provider
Sorun: Provider dashboard'da satın alınan lead'ler görünmüyordu

Kök Neden Analizi

1. Veritabanı Durumu ( Doğru)

  • Kullanıcı profili doğru şekilde oluşturulmuş
  • profiles.role = 'provider'
  • provider_services kaydı mevcut
  • provider_wallets kaydı mevcut (60 kredi)
  • 2 adet lead satın alınmış

2. RLS (Row Level Security) Politikası Eksikliği ( Sorun)

Mevcut Durum:

-- Sadece YENİ (satın alınmamış) lead'leri gösteriyordu
CREATE POLICY "Providers can view available leads"
ON leads FOR SELECT
USING (
  consent_given = true 
  AND status = 'new' 
  AND EXISTS (SELECT 1 FROM profiles WHERE id = auth.uid() AND role = 'provider')
);

Eksik Olan:

  • Provider'ların satın aldıkları lead'leri görebilmesi için bir politika yoktu
  • lead_purchases tablosunda kayıt olmasına rağmen, leads tablosunda bu lead'leri görme izni yoktu

3. Frontend Eksikliği ( Sorun)

  • ProviderDashboard sadece "mevcut lead'leri" gösteriyordu
  • Satın alınan lead'leri getiren bir fonksiyon yoktu
  • UI'da satın alınan lead'leri gösterecek bir sekme yoktu

Uygulanan Çözümler

1. Yeni RLS Politikası Eklendi

Migration: 00023_add_provider_purchased_leads_policy.sql

CREATE POLICY "Providers can view purchased leads"
ON leads FOR SELECT
TO public
USING (
  EXISTS (
    SELECT 1
    FROM lead_purchases
    WHERE lead_purchases.lead_id = leads.id
    AND lead_purchases.provider_id = auth.uid()
  )
);

ıklama:

  • Provider'lar artık lead_purchases tablosunda kendilerine ait kayıt olan tüm lead'leri görebilir
  • Bu politika, satın alınan lead'lerin tam bilgilerine erişim sağlar

2. API Fonksiyonu Eklendi

Dosya: src/db/api.ts

async getPurchased(providerId: string) {
  // Get all purchased lead IDs for this provider
  const { data: purchases } = await supabase
    .from('lead_purchases')
    .select('lead_id, purchased_at, credits_spent')
    .eq('provider_id', providerId)
    .order('purchased_at', { ascending: false });

  // Get full lead details for purchased leads
  const { data: leads } = await supabase
    .from('leads')
    .select('*')
    .in('id', leadIds);

  // Merge purchase info with lead data
  return leads.map(lead => ({
    ...lead,
    purchased_at: purchase?.purchased_at,
    credits_spent: purchase?.credits_spent,
    is_purchased: true,
  }));
}

3. Provider Dashboard Güncellendi

Dosya: src/pages/ProviderDashboard.tsx

Değişiklikler:

  1. Tabs Komponenti Eklendi:

    • "Mevcut Lead'ler" sekmesi: Satın alınabilir lead'ler
    • "Satın Alınanlar" sekmesi: Satın alınan lead'ler
  2. State Eklendi:

    const [purchasedLeads, setPurchasedLeads] = useState<any[]>([]);
    const [activeTab, setActiveTab] = useState<string>('available');
    
  3. Yeni Fonksiyon:

    const loadPurchasedLeads = async (providerId: string) => {
      const purchased = await providerLeadsApi.getPurchased(providerId);
      setPurchasedLeads(purchased);
    };
    
  4. UI Özellikleri:

    • Satın alınan lead'ler yeşil kenarlıkla vurgulanır
    • Tam iletişim bilgileri gösterilir (e-posta, WhatsApp, ülke)
    • Satın alma tarihi ve harcanan kredi bilgisi gösterilir
    • "Detayları Görüntüle" butonu ile modal açılabilir

Sonuç

Çözülen Sorunlar

  1. Provider'lar artık satın aldıkları lead'leri görebiliyor
  2. RLS politikası doğru şekilde çalışıyor
  3. UI'da iki sekme ile mevcut ve satın alınan lead'ler ayrı gösteriliyor
  4. Tam iletişim bilgileri (e-posta, WhatsApp, ülke) görüntülenebiliyor

Admin Panel - Rol Görünürlüğü Hakkında Not

Admin panelinde rol alanının boş görünmesi muhtemelen:

  1. Tarayıcı önbelleği nedeniyle eski veri gösteriliyor
  2. Veritabanında rol doğru şekilde kayıtlı (role = 'provider')
  3. Sayfayı yenilemek (Ctrl+F5) sorunu çözecektir

Doğrulama:

SELECT username, role FROM profiles WHERE username = 'temrentravel';
-- Sonuç: role = 'provider' ✅

Test Adımları

  1. temrentravel kullanıcısı ile giriş yapın
  2. Provider Dashboard'a gidin
  3. "Satın Alınanlar" sekmesine tıklayın
  4. 2 adet satın alınmış lead görmelisiniz:
  5. Her lead kartında tam iletişim bilgileri görünmelidir

Teknik Detaylar

Değiştirilen Dosyalar:

  • supabase/migrations/00023_add_provider_purchased_leads_policy.sql (YENİ)
  • src/db/api.ts (GÜNCELLENDİ)
  • src/pages/ProviderDashboard.tsx (GÜNCELLENDİ)

Lint Durumu: Tüm dosyalar lint kontrolünden geçti

Veritabanı Değişiklikleri: Migration başarıyla uygulandı