Bu tablolar Shop modülünde oluşturulmuş ama hiç kullanılmamış (0 kayıt). "shop_" prefix'ini kaldırıp universal hale getiriyoruz.
| Kolon | Tip | Açıklama |
|---|---|---|
| subscription_plan_id | bigint PK | Planın benzersiz ID'si. Otomatik artan sayı. |
| title | json |
Planın adı (çoklu dil desteği).
{"tr": "Premium Üyelik", "en": "Premium Membership"}
|
| slug | varchar unique |
URL-dostu benzersiz isim. Kodda referans için kullanılır.
premium, vip, free, enterprise
|
| description | json | Plan açıklaması (çoklu dil). Satış sayfasında gösterilir. |
| features | json |
Planın özellikleri listesi. Fiyatlandırma sayfasında tick listesi olarak gösterilir.
["Sınırsız dinleme", "Offline mod", "HQ ses"]
|
| price_daily | decimal(10,2) | Günlük fiyat. Çoğu durumda kullanılmaz, 0 olabilir. |
| price_weekly | decimal(10,2) | Haftalık fiyat. Kısa süreli denemeler için. |
| price_monthly | decimal(10,2) |
Aylık fiyat. En yaygın kullanılan seçenek.
299.00 (Muzibu Premium)
|
| price_quarterly | decimal(10,2) | 3 aylık fiyat. Orta vadeli indirimli seçenek. |
| price_yearly | decimal(10,2) |
Yıllık fiyat. Genelde 2 ay bedava hesabıyla.
2999.00 (Muzibu Premium Yıllık)
|
| currency | varchar(3) |
Para birimi kodu.
TRY, USD, EUR
|
| has_trial | boolean |
Bu plan deneme süresi sunuyor mu?
true = Evet, 7 gün ücretsiz dene
|
| trial_days | integer |
Deneme süresi kaç gün? has_trial true ise geçerli.
7, 14, 30
|
| requires_payment_method | boolean | Deneme için kart bilgisi gerekli mi? true ise deneme başlatmak için kart ister. |
| max_products | integer | Plan limiti: Maksimum ürün sayısı. E-ticaret için. 0 = sınırsız. |
| max_orders | integer | Plan limiti: Aylık maksimum sipariş. E-ticaret için. 0 = sınırsız. |
| max_storage_mb | integer |
Plan limiti: Depolama alanı (MB). Dosya yükleme için.
1024 = 1GB, 0 = sınırsız
|
| custom_limits | json |
Özel limitler. Tenant'a göre farklı limitler tanımlanabilir.
{"max_playlists": 100, "max_downloads": 500}
|
| has_analytics | boolean | Analitik paneline erişim var mı? |
| has_priority_support | boolean | Öncelikli destek hakkı var mı? |
| has_api_access | boolean | API erişimi var mı? Geliştirici planları için. |
| enabled_features | json |
Aktif özellik kodları. Kod içinde kontrol edilir.
["offline_mode", "hq_audio", "no_ads"]
|
| default_billing_cycle | varchar |
Varsayılan faturalama periyodu.
monthly, yearly, quarterly
|
| sort_order | integer | Sıralama. Fiyatlandırma sayfasında gösterim sırası. |
| is_featured | boolean | Öne çıkan plan mı? Vurgulanır. |
| is_popular | boolean | Popüler plan mı? "En Popüler" etiketi gösterilir. |
| badge_text | varchar |
Özel etiket metni.
%40 İndirim, Yeni, Tavsiye Edilen
|
| highlight_color | varchar |
Vurgu rengi. Kartın border rengi.
#3b82f6, gold, #10b981
|
| is_active | boolean | Plan aktif mi? false ise yeni abonelik alamaz. |
| is_public | boolean | Herkese açık mı? false ise sadece özel link ile erişilir. |
| subscribers_count | integer | Cache: Toplam abone sayısı. Performans için. |
| terms | text | Kullanım koşulları. Ödeme öncesi kabul edilir. |
| notes | text | Admin notları. Kullanıcıya gösterilmez. |
| metadata | json | Ek veriler. Gelecek özellikler için esnek alan. |
| Kolon | Tip | Açıklama |
|---|---|---|
| subscription_id | bigint PK | Aboneliğin benzersiz ID'si. |
| customer_id | bigint FK |
Kullanıcı ID'si. users tablosuna bağlı.
users.id → customer_id
|
| plan_id | bigint FK | Hangi plana abone? subscription_plans tablosuna bağlı. |
| subscription_number | varchar unique |
Abonelik numarası. Faturalarda ve destek taleplerinde kullanılır.
SUB-2025-00001
|
| status | varchar |
Abonelik durumu. İş mantığının kalbi.
trialing = Deneme
active = Aktif past_due = Ödeme gecikmiş paused = Duraklatılmış cancelled = İptal edilmiş expired = Süresi dolmuş |
| billing_cycle | varchar |
Faturalama periyodu. Ne sıklıkla ödeme alınıyor?
monthly, yearly, quarterly, weekly
|
| price_per_cycle | decimal(10,2) |
Dönem başına ödenen tutar. Kupon uygulanmış fiyat.
299.00 (aylık), 2999.00 (yıllık)
|
| currency | varchar(3) | Ödeme para birimi. |
| has_trial | boolean | Bu abonelik deneme ile mi başladı? |
| trial_days | integer | Kaç günlük deneme süresi verildi? |
| trial_ends_at | timestamp |
Deneme ne zaman bitiyor? Bu tarihte ödeme alınır veya abonelik düşer.
2025-12-01 00:00:00
|
| started_at | timestamp | Abonelik ne zaman başladı? İlk kayıt tarihi. |
| current_period_start | timestamp |
Mevcut faturalama döneminin başlangıcı.
1 Kasım 2025
|
| current_period_end | timestamp |
Mevcut faturalama döneminin sonu. Bu tarihe kadar hizmet alır.
30 Kasım 2025
|
| next_billing_date | timestamp |
Sonraki ödeme tarihi. Cron job bu tarihi kontrol eder.
1 Aralık 2025
|
| cancelled_at | timestamp | İptal tarihi. İptal edildiyse ne zaman? Null ise aktif. |
| expires_at | timestamp | Aboneliğin tamamen biteceği tarih. İptal edilse bile bu tarihe kadar kullanabilir. |
| payment_method_id | bigint FK | Kayıtlı ödeme yöntemi. Otomatik yenilemede kullanılır. |
| auto_renew | boolean | Otomatik yenilensin mi? true ise dönem sonunda kart çekilir. |
| billing_cycles_completed | integer |
Tamamlanan dönem sayısı. Sadakat programları için kullanılabilir.
12 = 1 yıldır abone
|
| total_paid | decimal(10,2) | Cache: Toplam ödenen tutar. Raporlama için. |
| cancellation_reason | varchar |
İptal nedeni kodu. Analytics için.
too_expensive, not_using, switched_competitor
|
| cancellation_feedback | text | İptal geri bildirimi. Kullanıcının yazdığı açıklama. |
| notes | text | Admin notları. |
| metadata | json |
Ek veriler. PayTR subscription_id, kupon bilgisi vb.
{"paytr_token": "xxx", "coupon_used": "WELCOME50"}
|
| Kolon | Tip | Açıklama |
|---|---|---|
| customer_group_id | bigint PK | Grup ID'si. |
| title | json |
Grup adı.
VIP Müşteriler, Toptan Alıcılar, Kurumsal
|
| slug | varchar unique | URL-dostu benzersiz kod. |
| description | json | Grup açıklaması. |
| discount_percentage | decimal(5,2) |
Sabit indirim oranı. Bu gruptaki herkes bu indirimi alır.
10.00 = %10 indirim
|
| has_special_pricing | boolean | Özel fiyatlandırma var mı? true ise ürünlerde bu gruba özel fiyat tanımlanabilir. |
| price_on_request_only | boolean | Fiyat gizli mi? true ise "Fiyat için arayın" gösterilir. |
| can_see_stock | boolean | Stok miktarını görebilir mi? |
| can_request_quote | boolean | Teklif isteyebilir mi? |
| can_purchase_on_credit | boolean | Vadeli alışveriş yapabilir mi? |
| credit_limit | decimal(10,2) |
Kredi limiti. Vadeli alışveriş için maksimum borç.
50000.00 TL
|
| payment_term_days | integer |
Ödeme vadesi (gün). Vadeli alışverişte kaç gün içinde ödenmeli?
30 = 30 gün vade
|
| tax_exempt | boolean | Vergiden muaf mı? İhracat için. |
| tax_exempt_number | varchar | Vergi muafiyet numarası. |
| free_shipping | boolean | Ücretsiz kargo hakkı var mı? |
| free_shipping_threshold | decimal(10,2) |
Ücretsiz kargo limiti. Bu tutarın üzerinde kargo bedava.
500.00 = 500 TL üzeri ücretsiz
|
| loyalty_points_multiplier | decimal(3,2) |
Puan çarpanı. Sadakat programında ekstra puan.
1.50 = %50 fazla puan
|
| requires_approval | boolean | Gruba katılım onay gerektirir mi? true ise admin onaylamalı. |
| is_default | boolean | Varsayılan grup mu? Yeni üyeler bu gruba atanır. |
| is_active | boolean | Grup aktif mi? |
| sort_order | integer | Sıralama. |
| color_code | varchar |
Grup rengi. Admin panelinde tanımlama için.
#FFD700 (Gold), #3B82F6 (Blue)
|
| Kolon | Tip | Açıklama |
|---|---|---|
| coupon_id | bigint PK | Kupon ID'si. |
| title | json |
Kupon başlığı. Admin ve raporlarda gösterilir.
Yılbaşı Kampanyası, İlk Alışveriş İndirimi
|
| code | varchar unique |
Kupon kodu. Kullanıcının girdiği kod.
WELCOME50, NEWYEAR2025, VIP20
|
| description | json | Kupon açıklaması. |
| coupon_type | varchar |
İndirim türü.
percentage = Yüzde indirim (%20)
fixed_amount = Sabit tutar (50 TL) free_shipping = Ücretsiz kargo buy_x_get_y = X al Y bedava |
| discount_percentage | decimal(5,2) |
İndirim yüzdesi. coupon_type = percentage ise kullanılır.
20.00 = %20
|
| discount_amount | decimal(10,2) |
Sabit indirim tutarı. coupon_type = fixed_amount ise kullanılır.
50.00 = 50 TL indirim
|
| max_discount_amount | decimal(10,2) |
Maksimum indirim. Yüzde indirimlerde tavan.
%20 indirim, max 100 TL
|
| buy_quantity | integer | X al Y bedava için: Kaç tane al? |
| get_quantity | integer | X al Y bedava için: Kaç tane bedava? |
| applicable_product_ids | json | Geçerli ürün ID'leri. Boş ise tüm ürünlerde geçerli. |
| usage_limit_total | integer |
Toplam kullanım limiti. 0 = sınırsız.
100 = Sadece ilk 100 kişi
|
| usage_limit_per_customer | integer |
Kişi başı kullanım limiti.
1 = Her müşteri 1 kez kullanabilir
|
| used_count | integer | Cache: Kaç kez kullanıldı? |
| minimum_order_amount | decimal(10,2) |
Minimum sepet tutarı.
200 TL üzeri alışverişlerde geçerli
|
| maximum_order_amount | decimal(10,2) | Maksimum sepet tutarı. Nadir kullanılır. |
| minimum_items | integer |
Minimum ürün adedi.
3 ürün ve üzeri alışverişlerde
|
| applies_to | varchar |
Nerelerde geçerli?
all = Her yerde
subscription = Sadece abonelik shop = Sadece mağaza specific_products = Belirli ürünler |
| category_ids | json | Geçerli kategori ID'leri. |
| product_ids | json | Geçerli ürün ID'leri. |
| brand_ids | json | Geçerli marka ID'leri. |
| excluded_category_ids | json | Hariç tutulan kategoriler. Bu kategorilerde geçersiz. |
| excluded_product_ids | json | Hariç tutulan ürünler. |
| customer_eligibility | varchar |
Kimler kullanabilir?
all = Herkes
specific_customers = Belirli müşteriler customer_groups = Belirli gruplar first_order = İlk siparişte |
| customer_group_ids | json | Geçerli müşteri grup ID'leri. |
| customer_ids | json | Geçerli müşteri ID'leri. VIP kodları için. |
| valid_from | timestamp | Geçerlilik başlangıcı. Bu tarihten önce kullanılamaz. |
| valid_until | timestamp | Geçerlilik bitişi. Bu tarihten sonra kullanılamaz. |
| can_combine_with_other_coupons | boolean | Başka kuponlarla birleştirilebilir mi? |
| can_combine_with_sales | boolean | İndirimli ürünlerde de geçerli mi? |
| is_active | boolean | Kupon aktif mi? |
| is_public | boolean | Herkese açık mı? true ise sitede gösterilebilir. |
| banner_text | varchar |
Banner metni. Sitede gösterilecek promosyon yazısı.
WELCOME50 ile %50 indirim!
|
| banner_color | varchar | Banner rengi. |
| terms | text | Kullanım koşulları. |
| notes | text | Admin notları. |
| metadata | json | Ek veriler. |
| Kolon | Tip | Açıklama |
|---|---|---|
| coupon_usage_id | bigint PK | Kullanım kaydı ID'si. |
| coupon_id | bigint FK | Hangi kupon kullanıldı? |
| customer_id | bigint FK | Kim kullandı? |
| usable_type | varchar |
Polymorphic: Nerede kullanıldı?
App\Models\ShopOrder
App\Models\Subscription |
| usable_id | bigint | Polymorphic: Sipariş veya abonelik ID'si. |
| discount_amount | decimal(10,2) | Uygulanan indirim tutarı. |
| original_amount | decimal(10,2) | İndirim öncesi tutar. |
| final_amount | decimal(10,2) | İndirim sonrası ödenen tutar. |
| used_at | timestamp | Ne zaman kullanıldı? |
| Kolon | Tip | Açıklama |
|---|---|---|
| id | bigint PK | Cihaz kaydı ID'si. |
| user_id | bigint FK | Hangi kullanıcıya ait? users tablosuna bağlı. |
| device_id | varchar unique |
Cihaz parmak izi (fingerprint). Browser + IP + UserAgent hash'i.
Aynı cihazı tanımak için kullanılır.
a1b2c3d4e5f6...
|
| device_name | varchar |
Kullanıcı dostu cihaz adı. UserAgent'dan parse edilir.
Chrome on Windows, Safari on iPhone
|
| browser | varchar |
Tarayıcı adı ve versiyonu.
Chrome 119, Safari 17, Firefox 120
|
| platform | varchar |
İşletim sistemi.
Windows 11, macOS 14, iOS 17, Android 14
|
| ip_address | varchar |
Son giriş IP adresi. Güvenlik için.
192.168.1.1, 2001:db8::1
|
| location | varchar |
IP'den tespit edilen konum. Şüpheli giriş tespiti için.
İstanbul, Türkiye
|
| last_activity | timestamp | Son aktivite zamanı. Her istekte güncellenir. Cihaz seçiminde "en son kullanılan" gösterimi için. |
| is_current | boolean | Şu an aktif cihaz mı? Her oturumda sadece 1 cihaz current olabilir. |
| is_trusted | boolean | Güvenilir cihaz mı? Kullanıcı "bu cihazı hatırla" derse true olur. 2FA'da bu cihazda kod sorulmaz. |
| created_at | timestamp | İlk giriş tarihi. |
| updated_at | timestamp | Son güncelleme tarihi. |
| Kolon | Tip | Açıklama |
|---|---|---|
| id | bigint PK | Log kaydı ID'si. |
| user_id | bigint FK nullable | Kullanıcı ID'si. Başarısız girişlerde null olabilir (kullanıcı bulunamadıysa). |
| varchar | Girişte kullanılan email. Başarısız girişlerde user_id null olsa bile email'i kaydederiz. | |
| ip_address | varchar | Giriş yapılan IP adresi. |
| user_agent | text | Tam UserAgent string'i. Detaylı analiz için. |
| browser | varchar | Parse edilmiş tarayıcı adı. |
| platform | varchar | Parse edilmiş işletim sistemi. |
| device_type | varchar |
Cihaz türü.
desktop, mobile, tablet
|
| country | varchar |
IP'den tespit edilen ülke. GeoIP ile.
Türkiye, Germany, United States
|
| city | varchar |
IP'den tespit edilen şehir.
İstanbul, Berlin, New York
|
| status | varchar |
Giriş sonucu.
success = Başarılı giriş
failed = Başarısız (yanlış şifre) blocked = Engellendi (çok fazla deneme) 2fa_required = 2FA bekleniyor 2fa_failed = 2FA kodu yanlış |
| failure_reason | varchar |
Başarısızlık nedeni.
invalid_password = Yanlış şifre
user_not_found = Kullanıcı bulunamadı account_locked = Hesap kilitli account_inactive = Hesap deaktif device_limit_reached = Cihaz limiti aşıldı |
| metadata | json |
Ek veriler. 2FA bilgileri, device_id vb.
{"2fa_method": "sms", "attempts": 3}
|
| created_at | timestamp | Giriş denemesi zamanı. |
| Kolon | Tip | Açıklama |
|---|---|---|
| customer_group_id | bigint FK nullable |
Hangi müşteri grubuna ait? customer_groups tablosuna bağlı.
Null ise varsayılan grup uygulanır.
VIP, Toptan, Kurumsal grupları
|
| device_limit | integer nullable |
Kullanıcıya özel cihaz limiti. Null ise sistem varsayılanı (1) uygulanır.
Admin belirli kullanıcılara farklı limit verebilir.
null = varsayılan(1), 3, 5, 0 = sınırsız
|
| is_approved | boolean default true | Hesap onaylandı mı? Admin onayı gerektiren sistemlerde false ile başlar. Onaylanana kadar giriş yapamaz. |
| failed_login_attempts | integer default 0 |
Ardışık başarısız giriş denemesi sayısı.
Başarılı girişte sıfırlanır. Brute force koruması için.
5 başarısız = hesap kilitle
|
| locked_until | timestamp nullable |
Hesap ne zamana kadar kilitli? Bu tarih geçene kadar giriş yapamaz.
30 dakika kilitleme
|
| two_factor_enabled | boolean default false | 2FA aktif mi? true ise girişte SMS kodu istenir. |
| two_factor_phone | varchar nullable |
2FA SMS gönderilecek telefon numarası.
phone alanından farklı olabilir.
+905551234567
|
| is_corporate | boolean default false | Kurumsal hesap mı? true ise alt hesap oluşturabilir. Sadece Muzibu için. |
| corporate_code | varchar unique nullable |
Kurumsal davet kodu. Alt hesaplar bu kodla kayıt olur.
ACME-2025, CORP-XYZ123
|
| parent_user_id | bigint FK nullable | Üst hesap (kurumsal ana hesap) ID'si. Bu kullanıcı bir alt hesapsa ana hesabı gösterir. Ödeme ana hesaptan alınır. |