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"}, )