from asgiref.sync import async_to_sync from channels.layers import get_channel_layer from django.conf import settings from django.db.models.signals import post_save from django.dispatch import receiver from core.apps.chat.models import ChatmessageModel, ChatroomModel # @receiver(post_save, sender=ChatmessageModel) # def broadcast_new_message(sender, instance, created, **kwargs): # """Yangi xabar saqlanganda xonadagi barcha WS ulanishlariga yuboradi.""" # if not created: # return # channel_layer = get_channel_layer() # if channel_layer is None: # return # sender_obj = instance.sender # if sender_obj: # full_name = sender_obj.get_full_name().strip() or str(sender_obj.phone) # sender_data = { # "id": sender_obj.id, # "full_name": full_name, # "role": sender_obj.role, # } # else: # sender_data = None # site_url = getattr(settings, "SITE_URL", "").rstrip("/") # file_url = (site_url + instance.file.url) if instance.file else None # async_to_sync(channel_layer.group_send)( # f"chat_room_{instance.room_id}", # { # "type": "chat_message", # "id": instance.id, # "message_type": instance.message_type, # "text": instance.text, # "file_url": file_url, # "sender": sender_data, # "created_at": instance.created_at.isoformat(), # }, # ) @receiver(post_save, sender="evaluation.AutoEvaluationModel") def auto_create_chatroom(sender, instance, created, **kwargs): """AutoEvaluation yaratilganda avtomatik chat xonasi ochiladi.""" if created: ChatroomModel.objects.get_or_create( auto_evaluation=instance, defaults={"type": "auto_evaluation"}, )