# 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:**
```sql
-- 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`

```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()
  )
);
```

**Açı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`

```typescript
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:**
   ```typescript
   const [purchasedLeads, setPurchasedLeads] = useState<any[]>([]);
   const [activeTab, setActiveTab] = useState<string>('available');
   ```

3. **Yeni Fonksiyon:**
   ```typescript
   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:**
```sql
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:
   - muhammetozsahin@gmail.com
   - pinar@gmail.com
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ı
