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

164 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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ı