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

131 lines
4.4 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.

# Provider Lead Görünürlük Sorunu - Analiz ve Çözüm
## Sorun Raporu
**Kullanıcı**: temrentravel (ID: 43595be4-acce-4d42-bfbf-66cbf204457c)
**Şikayet**: Provider dashboard'da lead'ler gözükmüyor
## Analiz Sonuçları
### 1. Veritabanı Durumu ✅
```sql
-- Kullanıcı profili
username: temrentravel
role: provider
created_at: 2026-01-30 13:56:48
```
### 2. Provider Servisi ✅
```sql
provider_id: 43595be4-acce-4d42-bfbf-66cbf204457c
business_name: Temren Travel
destinations: ["Kapadokya, Türkiye", "İstanbul", "Antalya", "İzmir", "Bodrum"]
activity_categories: ["müze", "doğa", "macera", "kültür", "gastronomi", "tarih",
"aktivite", "doğal alan", "doğal oluşum", "tarihi mekan",
"tarihi yerleşim", "kasaba", "köy"]
```
### 3. Sistemdeki Lead'ler
Toplam 4 lead, hepsi `consent_given=true` ve `status='new'`:
| Lead ID | Destination | Interests | Dest Match | Interest Match |
|---------|-------------|-----------|------------|----------------|
| 012a8ba6 | Kapadokya, Türkiye | ["müze"] | ✅ | ✅ |
| 8112d8ac | Kapadokya, Türkiye | ["Aktivite", "Doğal Alan", ...] | ✅ | ❌ |
| 2568edee | Kapadokya, Türkiye | ["Aktivite", "Doğal Alan", ...] | ✅ | ❌ |
| 43465f1f | bchgvjhv | ["ghghgh", "adventure", ...] | ❌ | ❌ |
### 4. Tespit Edilen Sorun: Case Sensitivity
**Problem**: Lead interests ve provider categories arasında büyük/küçük harf uyumsuzluğu
Provider categories (lowercase):
- "aktivite", "doğal alan", "doğal oluşum", "tarihi mekan", "müze", "tarihi yerleşim", "kasaba", "köy"
Lead interests (Title Case):
- "Aktivite", "Doğal Alan", "Doğal Oluşum", "Tarihi Mekan", "Müze", "Tarihi Yerleşim", "Kasaba", "Köy"
**Sonuç**: PostgreSQL'in `&&` (array overlap) operatörü case-sensitive, bu yüzden eşleşme başarısız oluyor.
### 5. Frontend Kod Analizi
`src/db/api.ts` (lines 1154-1180):
```typescript
// Frontend case-insensitive filtering yapıyor
const normalizedCategories = providerService.activity_categories.map((cat: string) =>
cat.toLowerCase().trim()
);
const normalizedInterests = lead.interests.map((interest: string) =>
interest.toLowerCase().trim()
);
const hasMatch = normalizedInterests.some((interest: string) =>
normalizedCategories.includes(interest)
);
```
**Ancak**: Bu kod çalışıyor olmalı! Frontend'de case-insensitive matching var.
## Olası Nedenler
1. **RLS Policy Sorunu**: Provider'ın leads tablosuna erişimi engellenmiş olabilir
2. **Frontend Hata**: API çağrısı başarısız oluyor olabilir
3. **Cache Sorunu**: Eski veriler cache'de kalmış olabilir
4. **Auth Sorunu**: Kullanıcı provider olarak doğru şekilde authenticate olmamış olabilir
## Çözüm Adımları
### Adım 1: Admin UI Düzeltmesi ✅
`src/pages/admin/Users.tsx` - SelectValue düzeltildi
```tsx
// ÖNCE (Yanlış)
<SelectValue>
{user.role === 'admin' ? 'Admin' : user.role === 'provider' ? 'Provider' : 'Kullanıcı'}
</SelectValue>
// SONRA (Doğru)
<SelectValue placeholder="Rol seçin" />
```
### Adım 2: Case Sensitivity Düzeltmesi
Provider categories'i normalize et:
```sql
UPDATE provider_services
SET activity_categories = ARRAY[
'müze', 'doğa', 'macera', 'kültür', 'gastronomi', 'tarih',
'aktivite', 'doğal alan', 'doğal oluşum', 'tarihi mekan',
'tarihi yerleşim', 'kasaba', 'köy'
]
WHERE provider_id = '43595be4-acce-4d42-bfbf-66cbf204457c';
```
### Adım 3: Debug Function
```sql
SELECT * FROM debug_provider_leads('43595be4-acce-4d42-bfbf-66cbf204457c');
```
## Test Adımları
1. ✅ Admin panelinde Users sayfasını kontrol et - rol görünmeli
2. ⏳ temrentravel olarak giriş yap
3. ⏳ Provider Dashboard'a git
4. ⏳ En az 1 lead görünmeli (012a8ba6 - Kapadokya + müze)
5. ⏳ Console'da hata olup olmadığını kontrol et
## Beklenen Sonuç
Provider dashboard'da **1 lead** görünmeli:
- Lead ID: 012a8ba6-7273-4b39-b071-2e6a7817d371
- Destination: Kapadokya, Türkiye
- Interests: ["müze"]
- Match: ✅ Hem destination hem interest eşleşiyor
Diğer 2 Kapadokya lead'i şu anda görünmeyecek çünkü interests case-sensitive eşleşmiyor.
Ancak frontend case-insensitive filtering yapıyor, bu yüzden aslında görünmeliler.
## Sonraki Adımlar
1. Kullanıcıdan console log'larını iste
2. Network tab'de API çağrılarını kontrol et
3. Provider dashboard'da loading state'i kontrol et
4. RLS policy'leri tekrar gözden geçir