Mevcut shop_* tabloları hiç kullanılmamış (0 kayıt). Bunları rename edip kullanacağız.
sessions tablosu kullanılacakactivity_log tablosu kullanılacaksubscription_plans yeterli| Tablo | Kayıt | Durum | Açıklama |
|---|---|---|---|
shop_subscription_plans |
0 | RENAME | → subscription_plans |
shop_subscriptions |
0 | RENAME | → subscriptions |
shop_coupons |
0 | RENAME | → coupons |
shop_coupon_usages |
0 | RENAME | → coupon_usages |
shop_customer_addresses |
0 | RENAME | → customer_addresses |
sessions |
Var | MEVCUT | Cihaz takibi için kullanılacak |
activity_log |
Var | MEVCUT | Giriş logları için kullanılacak |
| Özellik | Karar | Not |
|---|---|---|
| Ödeme Sistemi | PayTR | Mevcut Payment modülü kullanılacak |
| Oturum Süresi | 1 yıl | SESSION_LIFETIME=525600 |
| Fiyatlandırma | 299₺/ay - 2.999₺/yıl | Sadece Muzibu için |
| Cihaz Limiti | Kullanıcı bazlı | Varsayılan: 1 (settings'den) |
| Deneme Süresi | Aboneliğe eklenir | Kalan günler kaybolmaz |
| 2FA | SMS ile (opsiyonel) | Tenant SMS API kullanır |
| Kurumsal | Sınırsız alt hesap | Sadece Muzibu |
| Kupon | Universal sistem | Tüm tenant'larda çalışır |
Her migration hem database/migrations/ hem database/migrations/tenant/ altında oluşturulmalı!
2025_11_23_001_rename_shop_tables_to_universal.php
| Eski İsim | Yeni İsim | Amaç |
|---|---|---|
shop_subscription_plans |
subscription_plans |
Abonelik planları (Aylık, Yıllık, Kurumsal) |
shop_subscriptions |
subscriptions |
Kullanıcı abonelikleri |
shop_coupons |
coupons |
İndirim kuponları |
shop_coupon_usages |
coupon_usages |
Kupon kullanım geçmişi |
shop_customer_addresses |
customer_addresses |
Fatura adresleri |
2025_11_23_002_add_membership_fields_to_users_table.php
| Kolon | Tip | Varsayılan | Açıklama |
|---|---|---|---|
device_limit |
integer nullable | null |
Kullanıcıya özel cihaz limiti
null ise settings'deki default_device_limit kullanılır
|
is_approved |
boolean | true |
Manuel onay gerektiren üyelikler için
false ise kullanıcı giriş yapamaz, admin onayı bekler
|
failed_login_attempts |
integer | 0 |
Başarısız giriş sayacı
Belirli sayıdan sonra hesap kilitlenir
|
locked_until |
timestamp nullable | null |
Hesap kilit bitiş zamanı
Bu tarihten önce giriş engellidir
|
two_factor_enabled |
boolean | false |
2FA aktif mi?
true ise girişte SMS kodu istenir
|
two_factor_phone |
string nullable | null |
2FA telefon numarası
Varsayılan telefon yerine farklı numara kullanılabilir
|
is_corporate |
boolean | false |
Kurumsal ana hesap mı?
true ise alt hesap oluşturabilir
|
corporate_code |
string nullable unique | null |
Kurumsal davet kodu
Alt hesaplar bu kodla kayıt olur: FIRMA-ABC123
|
parent_user_id |
foreignId nullable | null |
Üst kullanıcı referansı
Alt hesaplar için ana hesabın ID'si
|
Konum: app/Models/
Abonelik planları modeli
Kullanıcı abonelikleri (implements Payable)
İndirim kuponları
Kupon kullanım geçmişi
Fatura adresleri
app/Models/User.php
Konum: app/Services/Auth/
| Service | Amaç | Ana Metodlar |
|---|---|---|
DeviceService.php |
Cihaz yönetimi |
|
TwoFactorService.php |
2FA işlemleri |
|
SubscriptionService.php |
Abonelik işlemleri |
|
CouponService.php |
Kupon işlemleri |
|
CorporateService.php |
Kurumsal hesap yönetimi |
|
LoginLogService.php |
Giriş log yönetimi |
|
Ayarlar Tinker ile veritabanına eklenir. "Kullanıcı" grubu (ID=3) altında alt gruplar olarak.
settings_groups (CENTRAL) → Grup + prefix tanımısettings (CENTRAL) → Ayar tanımları (key, type, default)settings_values (TENANT) → Her tenant'ın değerleri| ID | Grup Adı | Prefix | Icon |
|---|---|---|---|
| 20 | Kayıt Ayarları | auth_registration |
fas fa-user-plus |
| 21 | Oturum Ayarları | auth_session |
fas fa-clock |
| 22 | Güvenlik Ayarları | auth_security |
fas fa-shield-alt |
| 23 | Abonelik Ayarları | auth_subscription |
fas fa-credit-card |
| 24 | Kurumsal Ayarlar | corporate |
fas fa-building |
| Key | Label | Type | Default |
|---|---|---|---|
auth_registration_enabled |
Kayıt Aktif | select | 1 |
auth_registration_email_verify |
E-posta Doğrulama | select | 1 |
auth_registration_approval |
Admin Onayı | select | 0 |
auth_registration_trial_days |
Deneme Süresi (gün) | text | 7 |
| Key | Label | Type | Default |
|---|---|---|---|
auth_session_lifetime |
Oturum Süresi (dk) | text | 525600 |
auth_session_device_limit |
Cihaz Limiti | text | 1 |
| Key | Label | Type | Default |
|---|---|---|---|
auth_security_max_attempts |
Max Giriş Denemesi | text | 5 |
auth_security_lockout |
Kilitleme Süresi (dk) | text | 30 |
auth_security_2fa_enabled |
2FA Aktif | select | 1 |
auth_security_2fa_expiry |
2FA Kod Süresi (dk) | text | 5 |
| Key | Label | Type | Default |
|---|---|---|---|
auth_subscription_paid_enabled |
Ücretli Üyelik | select | 0 |
auth_subscription_auto_renewal |
Otomatik Yenileme | select | 1 |
auth_subscription_reminder_days |
Hatırlatma (gün önce) | text | 7 |
auth_subscription_grace_days |
Tolerans Süresi (gün) | text | 3 |
| Key | Label | Type | Default |
|---|---|---|---|
corporate_enabled |
Kurumsal Üyelik | select | 0 |
corporate_max_users |
Max Alt Kullanıcı | text | 0 |
Konum: app/Http/Middleware/
| Middleware | Route Key | Amaç |
|---|---|---|
CheckDeviceLimit.php |
device.limit | Cihaz limitini kontrol eder. Aşılmışsa eski cihazı çıkarma sayfasına yönlendirir. |
CheckSubscription.php |
subscription | Aktif abonelik kontrolü. Premium içerik için gerekli. |
CheckApproval.php |
approved | Kullanıcı onaylı mı kontrol eder. is_approved=false ise engeller. |
Tüm mail şablonları nwidart modül yapısında oluşturulacak. Tüm tenant'lar bu modülü kullanacak.
| Mail Class | Tetikleyici | İçerik |
|---|---|---|
WelcomeMail.php |
Kayıt sonrası | Hoş geldin mesajı, deneme süresi bilgisi, başlangıç rehberi |
TrialEndingMail.php |
Deneme bitmeden 2 gün önce | Hatırlatma, abone ol butonu, kalan gün |
SubscriptionRenewalMail.php |
Yenileme öncesi 7 gün | Otomatik yenileme bildirimi, tutar, tarih |
PaymentSuccessMail.php |
Ödeme başarılı | Ödeme onayı, fatura linki, sonraki yenileme |
PaymentFailedMail.php |
Ödeme başarısız | Hata bildirimi, tekrar deneme linki, destek |
NewDeviceLoginMail.php |
Yeni cihazdan giriş | Güvenlik uyarısı, cihaz bilgisi, tanımıyorsan bildir |
TwoFactorCodeMail.php |
2FA SMS yedeği | 6 haneli kod, geçerlilik süresi |
CorporateInviteMail.php |
Kurumsal davet | Davet mesajı, şifre oluşturma linki |
Modules/Mail/app/Services/MailService.php
Konum: app/Console/Commands/
| Command | Schedule | Görev |
|---|---|---|
CheckTrialExpiryCommand.php |
Günlük 09:00 |
|
SendRenewalRemindersCommand.php |
Günlük 10:00 |
|
ProcessRecurringPaymentsCommand.php |
Günlük 06:00 |
|
CleanupExpiredSessionsCommand.php |
Haftalık Pazar 03:00 |
|
Her adım tamamlandıktan sonra test edilmeli.
| Özellik | İxtif (Tenant 2) | Muzibu (Tenant 1001) |
|---|---|---|
| Ücretli Üyelik | Kapalı | Açık (299/2999₺) |
| Kurumsal | Kapalı | Açık (Sınırsız) |
| Deneme Süresi | - | 7 gün |
| 2FA | Opsiyonel | Opsiyonel |
| Cihaz Limiti | 1 | 1 (kurumsal: özel) |
| Oturum Süresi | 1 yıl | 1 yıl |
| Kupon Sistemi | Aktif | Aktif |
Her tenant kendi settings değerlerini kullanır: