131 lines
4.4 KiB
Markdown
131 lines
4.4 KiB
Markdown
# 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
|