Browse Source

fixed creating group room for multiple professors

master
Mohsen Taba 1 month ago
parent
commit
c4e6ecdde0
  1. 44
      apps/course/signals.py

44
apps/course/signals.py

@ -9,7 +9,7 @@ from django.db.models import Q
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
from django.db.models.signals import post_save, post_delete, pre_save
from django.db.models.signals import post_save, post_delete, pre_save, m2m_changed
from django.dispatch import receiver from django.dispatch import receiver
from django.core.cache import cache from django.core.cache import cache
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
@ -17,10 +17,39 @@ from django.contrib.auth import get_user_model
UserModel = get_user_model() UserModel = get_user_model()
def sync_course_group_room(instance):
title_str = extract_text_from_json(instance.title)
first_professor = instance.professors.first()
if first_professor:
RoomMessage.objects.update_or_create(
course=instance,
room_type=RoomMessage.RoomTypeChoices.GROUP,
defaults={
"name": f"{title_str} - Group",
"description": f"Group chat for course: {title_str}",
"initiator": first_professor,
},
)
else:
# In create flows, professors may be assigned after the initial save.
# Keep metadata synced, but avoid creating an invalid room with null initiator.
RoomMessage.objects.filter(
course=instance,
room_type=RoomMessage.RoomTypeChoices.GROUP
).update(
name=f"{title_str} - Group",
description=f"Group chat for course: {title_str}",
)
@receiver(post_save, sender=Course) @receiver(post_save, sender=Course)
def handle_room_message_for_course(sender, instance, created, **kwargs): def handle_room_message_for_course(sender, instance, created, **kwargs):
title_str = extract_text_from_json(instance.title) title_str = extract_text_from_json(instance.title)
first_professor = instance.professors.first() first_professor = instance.professors.first()
if created and not first_professor:
return
if created: # فقط برای موارد جدید اجرا شود if created: # فقط برای موارد جدید اجرا شود
RoomMessage.objects.create( RoomMessage.objects.create(
name=f"{title_str} - Group", name=f"{title_str} - Group",
@ -43,6 +72,19 @@ def handle_room_message_for_course(sender, instance, created, **kwargs):
).update(**update_kwargs) ).update(**update_kwargs)
@receiver(m2m_changed, sender=Course.professors.through)
def handle_course_professors_changed(sender, instance, action, pk_set, **kwargs):
if action not in {"post_add", "post_remove", "post_clear"}:
return
sync_course_group_room(instance)
for professor in instance.professors.all():
professor.ensure_professor_profile()
detail_cache_key = f"professor_detail_{professor.slug}"
cache.delete(detail_cache_key)
@receiver(post_save, sender=Course) @receiver(post_save, sender=Course)
def ensure_professor_role(sender, instance, **kwargs): def ensure_professor_role(sender, instance, **kwargs):
for professor in instance.professors.all(): for professor in instance.professors.all():

Loading…
Cancel
Save