4.8 KiB
4.8 KiB
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_serviceskaydı mevcut ✅provider_walletskaydı 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_purchasestablosunda kayıt olmasına rağmen,leadstablosunda 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()
)
);
Açıklama:
- Provider'lar artık
lead_purchasestablosunda 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:
-
Tabs Komponenti Eklendi:
- "Mevcut Lead'ler" sekmesi: Satın alınabilir lead'ler
- "Satın Alınanlar" sekmesi: Satın alınan lead'ler
-
State Eklendi:
const [purchasedLeads, setPurchasedLeads] = useState<any[]>([]); const [activeTab, setActiveTab] = useState<string>('available'); -
Yeni Fonksiyon:
const loadPurchasedLeads = async (providerId: string) => { const purchased = await providerLeadsApi.getPurchased(providerId); setPurchasedLeads(purchased); }; -
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 ✅
- ✅ Provider'lar artık satın aldıkları lead'leri görebiliyor
- ✅ RLS politikası doğru şekilde çalışıyor
- ✅ UI'da iki sekme ile mevcut ve satın alınan lead'ler ayrı gösteriliyor
- ✅ 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:
- Tarayıcı önbelleği nedeniyle eski veri gösteriliyor
- Veritabanında rol doğru şekilde kayıtlı (
role = 'provider') - Sayfayı yenilemek (Ctrl+F5) sorunu çözecektir
Doğrulama:
SELECT username, role FROM profiles WHERE username = 'temrentravel';
-- Sonuç: role = 'provider' ✅
Test Adımları
- temrentravel kullanıcısı ile giriş yapın
- Provider Dashboard'a gidin
- "Satın Alınanlar" sekmesine tıklayın
- 2 adet satın alınmış lead görmelisiniz:
- 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ı