Omadbek Qosimov's blog
#signals
@receiver(pre_save, sender=Blogger)
def prepare_blogger_chat(sender, instance, **kwargs):
"""
Blogger saqlashdan oldin signal.
Agar blogger.user.user_type == 'blogger' bo'lsa,
uning chatini topib, undagi barcha qatnashchilarni o'chirib,
faqat bloggerning o'zini qo'shadi.
"""
# Yangi yaratilayotgan Blogger uchun hali id bo'lmaydi
if instance.id is None:
# Yangi blogger, hali chati yo'q
return
if instance.user and instance.user.user_type == 'blogger':
try:
# Blogerning chatini topamiz
# Ehtimol bo'lgan hamma chatlarini olamiz
blogger_chat = Chat.objects.filter(participants=instance.user).first()
if blogger_chat:
blogger_chat.participants.clear()
blogger_chat.participants.add(instance.user)
blogger_chat.save()
except Exception as e:
print(f"Chat qayta sozlashda xatolik yuz berdi: {e}")
@receiver(post_save, sender=Blogger)
def update_blogger_chat(sender, instance, created, **kwargs):
"""
Blogger saqlagandan keyin signal.
Agar user.user_type == 'blogger' va saler.user_type == 'sales' bo'lsa,
bloggerning chatini topib, unga salerni qo'shadi.
"""
# Faqat blogerga tegishli user va saler mavjud bo'lsa
if instance.user and instance.user.user_type == 'blogger' and instance.saler and instance.saler.user_type == 'sales':
try:
with transaction.atomic():
blogger_chats = Chat.objects.filter(participants=instance.user)
if not blogger_chats.exists():
chat = Chat.objects.create()
chat.participants.add(instance.user)
else:
chat = blogger_chats.first()
chat.participants.add(instance.saler)
chat.save()
except Exception as e:
print(f"Bloggerning chatini yangilashda xatolik yuz berdi: {e}")
elif instance.user and instance.user.user_type == 'manager' and instance.saler and instance.saler.user_type == 'sales':
try:
with transaction.atomic():
bloggers = Blogger.objects.filter(manager=instance.user)
for blogger in bloggers:
blogger.saler = instance.saler
blogger.save() # Bu o'z navbatida ushbu signal uchun yangi chaqiruvlarni yaratadi
except Exception as e:
print(f"Bloggerning chatini yangilashda xatolik yuz berdi: {e}")
360 ·