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 |
|
SettingManagement modülünde yeni gruplar oluşturulacak. Admin panelden düzenlenebilir.
| Key | Tip | Varsayılan | Açıklama |
|---|---|---|---|
registration_enabled |
boolean | true | Yeni kayıt açık mı? |
require_email_verification |
boolean | true | E-posta doğrulama zorunlu mu? |
require_approval |
boolean | false | Admin onayı gerekli mi? |
trial_days |
integer | 7 | Ücretsiz deneme süresi |
| Key | Tip | Varsayılan | Açıklama |
|---|---|---|---|
session_lifetime |
integer | 525600 | Oturum süresi (dakika) - 1 yıl |
default_device_limit |
integer | 1 | Varsayılan cihaz limiti |
| Key | Tip | Varsayılan | Açıklama |
|---|---|---|---|
max_login_attempts |
integer | 5 | Max başarısız giriş |
lockout_duration |
integer | 30 | Kilitleme süresi (dakika) |
two_factor_available |
boolean | true | 2FA kullanılabilir mi? |
two_factor_code_expiry |
integer | 5 | 2FA kod geçerlilik süresi (dk) |
| Key | Tip | Varsayılan | Açıklama |
|---|---|---|---|
paid_membership_enabled |
boolean | false | Ücretli üyelik aktif mi? |
auto_renewal_enabled |
boolean | true | Otomatik yenileme aktif mi? |
renewal_reminder_days |
integer | 7 | Yenileme hatırlatma (gün önce) |
grace_period_days |
integer | 3 | Ödeme tolerans süresi |
| Key | Tip | Varsayılan | Açıklama |
|---|---|---|---|
corporate_enabled |
boolean | false | Kurumsal üyelik aktif mi? |
max_sub_users |
integer | 0 | Max alt kullanıcı (0=sınırsız) |
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: