first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 22:27:56 +03:00
commit d9f1ea341e
1021 changed files with 70645 additions and 0 deletions

39
cart/signals.py Normal file
View File

@@ -0,0 +1,39 @@
from django.contrib.auth.signals import user_logged_in
from django.dispatch import receiver
from django.conf import settings
from .models import Cart, CartItem
from product.models import Product
@receiver(user_logged_in)
def merge_cart_on_login(sender, user, request, **kwargs):
"""
Kullanıcı giriş yaptığında session sepetini veritabanı sepetiyle birleştirir.
"""
session_cart = request.session.get(settings.CART_SESSION_ID)
if session_cart:
# Kullanıcının DB sepetini al veya oluştur
db_cart, created = Cart.objects.get_or_create(user=user)
for product_id, item_data in session_cart.items():
quantity = item_data['quantity']
product = Product.objects.get(id=product_id)
# Ürün zaten DB sepetinde var mı?
cart_item, item_created = CartItem.objects.get_or_create(cart=db_cart, product=product)
if not item_created:
# Varsa miktarı artır
cart_item.quantity += quantity
else:
# Yoksa miktarı ayarla (default 1 olduğu için üzerine eklemiyoruz, direkt atıyoruz ama get_or_create default ile oluşturduysa quantity 1 olabilir, o yüzden dikkat)
# get_or_create default=1 ile oluşturur. Biz session'dan geleni kullanmalıyız.
# Ancak item_created True ise yeni oluştu demektir ve default değeri almıştır.
# Bizim session'daki quantity'yi atamamız lazım.
cart_item.quantity = quantity
cart_item.save()
# Session sepetini temizle
del request.session[settings.CART_SESSION_ID]
request.session.modified = True