164 lines
4.8 KiB
Markdown
164 lines
4.8 KiB
Markdown
# 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ı
|