116 lines
4.1 KiB
Markdown
116 lines
4.1 KiB
Markdown
# Provider Kayıt Sorunu Çözümü
|
||
|
||
## Sorun
|
||
Provider olarak üyelik yapıldı ancak admin sayfasında üyelik gözükmüyordu.
|
||
|
||
## Kök Neden Analizi
|
||
1. **Clerk Webhook**: Kullanıcılar Clerk ile kayıt olduğunda otomatik olarak `role='user'` ile oluşturuluyordu
|
||
2. **Provider Kayıt Eksikliği**: `register_provider` RPC fonksiyonu veritabanında mevcut ancak frontend'de bu fonksiyonu çağıran bir arayüz yoktu
|
||
3. **View Eksikliği**: `admin_provider_stats` view'ında `email` kolonu eksikti, bu yüzden admin panelinde provider bilgileri tam gösterilmiyordu
|
||
|
||
## Uygulanan Çözümler
|
||
|
||
### 1. ProviderRegistrationModal Component Oluşturuldu
|
||
**Dosya**: `/src/components/provider/ProviderRegistrationModal.tsx`
|
||
|
||
- İşletme adı, açıklama, destinasyonlar ve aktivite kategorileri için form
|
||
- `register_provider` RPC fonksiyonunu çağırır
|
||
- Başarılı kayıt sonrası profili yeniler ve provider dashboard'a yönlendirir
|
||
- Türkçe arayüz ve hata mesajları
|
||
|
||
### 2. ProviderDashboard Güncellendi
|
||
**Dosya**: `/src/pages/ProviderDashboard.tsx`
|
||
|
||
**Değişiklikler**:
|
||
- `ProviderRegistrationModal` import edildi
|
||
- `isRegistrationModalOpen` state eklendi
|
||
- `checkProviderAccess` fonksiyonu güncellendi:
|
||
- Eğer kullanıcı `role='user'` ise kayıt modalını gösterir
|
||
- Eğer kullanıcı `role='provider'` ise normal dashboard'u yükler
|
||
- Modal component render edildi
|
||
|
||
### 3. ProviderInfo Sayfası Güncellendi
|
||
**Dosya**: `/src/pages/ProviderInfo.tsx`
|
||
|
||
**Değişiklikler**:
|
||
- `ProviderRegistrationModal` import edildi
|
||
- `isRegistrationModalOpen` state eklendi
|
||
- `handleRegisterClick` fonksiyonu eklendi:
|
||
- Giriş yapmamış kullanıcıları sign-up sayfasına yönlendirir
|
||
- Giriş yapmış `user` rolündeki kullanıcılara kayıt modalını gösterir
|
||
- Zaten `provider` olan kullanıcıları dashboard'a yönlendirir
|
||
- Tüm "Provider Olarak Kayıt Ol" butonları güncellendi
|
||
- Modal component render edildi
|
||
|
||
### 4. admin_provider_stats View Düzeltildi
|
||
**Migration**: `fix_admin_provider_stats_add_email`
|
||
|
||
**Değişiklikler**:
|
||
- View'a `p.email` kolonu eklendi
|
||
- GROUP BY clause'a `p.email` eklendi
|
||
- View comment güncellendi
|
||
|
||
## Kullanım Akışı
|
||
|
||
### Yeni Kullanıcı İçin:
|
||
1. Kullanıcı `/provider-info` sayfasını ziyaret eder
|
||
2. "Provider Olarak Kayıt Ol" butonuna tıklar
|
||
3. Eğer giriş yapmamışsa → `/sign-up` sayfasına yönlendirilir
|
||
4. Kayıt olduktan sonra tekrar `/provider-info` sayfasına gelir
|
||
5. "Provider Olarak Kayıt Ol" butonuna tıklar
|
||
6. Provider kayıt modalı açılır
|
||
7. İşletme bilgilerini doldurur ve gönderir
|
||
8. Başarılı kayıt sonrası otomatik olarak `/provider/dashboard` sayfasına yönlendirilir
|
||
|
||
### Mevcut Kullanıcı İçin:
|
||
1. Kullanıcı giriş yapar (role='user')
|
||
2. `/provider/dashboard` sayfasını ziyaret eder
|
||
3. Otomatik olarak provider kayıt modalı açılır
|
||
4. İşletme bilgilerini doldurur ve gönderir
|
||
5. Profil yenilenir (role='provider' olur)
|
||
6. Dashboard yüklenir
|
||
|
||
### Admin Panelinde:
|
||
1. Admin `/admin/providers-management` sayfasını ziyaret eder
|
||
2. Tüm provider'lar `admin_provider_stats` view'ından çekilir
|
||
3. Provider bilgileri tam olarak gösterilir (email dahil)
|
||
|
||
## Test Edilmesi Gerekenler
|
||
|
||
1. ✅ Yeni kullanıcı kaydı ve provider olma akışı
|
||
2. ✅ Mevcut kullanıcının provider olma akışı
|
||
3. ✅ Provider kayıt formunun validasyonu
|
||
4. ✅ Başarılı kayıt sonrası yönlendirme
|
||
5. ✅ Admin panelinde provider listesi görünümü
|
||
6. ✅ Provider dashboard erişimi
|
||
7. ✅ Email kolonunun admin panelinde görünmesi
|
||
|
||
## Teknik Detaylar
|
||
|
||
### RPC Fonksiyonu
|
||
```sql
|
||
register_provider(
|
||
p_user_id UUID,
|
||
p_business_name TEXT,
|
||
p_business_description TEXT,
|
||
p_destinations TEXT[],
|
||
p_activity_categories TEXT[]
|
||
)
|
||
```
|
||
|
||
### View Yapısı
|
||
```sql
|
||
admin_provider_stats:
|
||
- id, email, username, full_name, role, is_active, created_at
|
||
- business_name, destinations, activity_categories
|
||
- credit_balance, purchased_leads_count, total_spend
|
||
```
|
||
|
||
## Notlar
|
||
|
||
- Tüm hata mesajları Türkçe
|
||
- Form validasyonu client-side yapılıyor
|
||
- RPC fonksiyonu SECURITY DEFINER ile çalışıyor
|
||
- Provider kayıt sonrası otomatik wallet oluşturuluyor
|
||
- Destinasyon default olarak "Kapadokya" geliyor
|