Kullanıcıların abonelik satın alma sürecini yöneten sepet altyapısı
Kullanıcıların abonelik paketlerini seçip satın alabileceği bir sepet sistemi kurduk. Giriş yapmadan da sepete ekleme yapılabiliyor, sonra hesap oluşturunca sepet otomatik birleşiyor.
Ürün sepete eklendi, toplam güncellendi, kullanıcı bilgilendirildi
Stok yetersiz veya ürün bulunamadı hatası gösterilir
Şu an açık olan sepetler
Ödeme yapılmış siparişler
Yarım kalan işlemler
Sepet-sipariş istatistikleri
Kullanıcı sepete bir ürün eklediğinde veya sepet sayfasını açtığında, sistem şu işlemleri gerçekleştiriyor:
Sistem önce auth()->check() ile kullanıcının giriş yapıp yapmadığını kontrol ediyor. Giriş yapmamışsa session()->getId() ile geçici bir kimlik atanıyor. Bu sayede misafir kullanıcılar da sepete ekleme yapabiliyor.
CartService::getOrCreate() metodu çalışıyor. carts tablosunda kullanıcıya ait aktif sepet aranıyor. Yoksa Cart::create() ile yeni sepet oluşturuluyor.
cart_items tablosuna cart_id, itemable_type (SubscriptionPackage), itemable_id (paket ID) ve quantity kaydediliyor. Polymorphic ilişki sayesinde farklı ürün tipleri de desteklenebilir.
Kupon kodu girilirse CouponService::apply() çağrılıyor. Kuponun geçerliliği, kullanım limiti ve tarih kontrolü yapılıp carts.coupon_id alanına yazılıyor.
Cart::calculateTotal() metodu sepetteki tüm ürünlerin fiyatını topluyor. Kupon indirimi düşülüyor, KDV ekleniyor ve subtotal, discount, tax, total alanları güncelleniyor.
24 saat içinde tamamlanmayan sepetler "terk edilmiş" olarak işaretleniyor. AbandonedCartReminder job'ı günde bir çalışıp kullanıcılara hatırlatma e-postası gönderiyor. Bu sayede kayıp satışlar kurtarılıyor.
Kullanıcının satın almak istediği ürünleri biriktirdiği alan.
Süpermarket sepeti gibi düşünün
Sepetin sipariş haline dönüştüğü ödeme işlemi.
Kasada ödeme yapmak gibi
Ödeme yapılmadan bırakılan sepetler.
Kasaya gelmeden marketten çıkmak gibi
Misafir kullanıcının geçici kimliği.
Alışveriş süresince takılan rozet gibi