52 lines
2.0 KiB
Python
52 lines
2.0 KiB
Python
"""
|
|
Сигналы для пользователей.
|
|
"""
|
|
from django.db.models.signals import post_save, post_delete, m2m_changed
|
|
from django.dispatch import receiver
|
|
from django.core.cache import cache
|
|
|
|
from .models import MentorStudentConnection, Group
|
|
|
|
|
|
def _invalidate_manage_clients_cache(mentor_id):
|
|
"""Очистить кеш manage/clients для ментора (после удаления/изменения связи)."""
|
|
for page in range(1, 10):
|
|
for size in [10, 20, 50, 100, 1000]:
|
|
cache.delete(f'manage_clients_{mentor_id}_{page}_{size}')
|
|
|
|
|
|
@receiver(post_delete, sender=MentorStudentConnection)
|
|
def mentor_student_connection_deleted(sender, instance, **kwargs):
|
|
"""При удалении связи — очистить кеш списка клиентов ментора."""
|
|
if instance.mentor_id:
|
|
_invalidate_manage_clients_cache(instance.mentor_id)
|
|
|
|
|
|
@receiver(post_save, sender=MentorStudentConnection)
|
|
def mentor_student_connection_changed(sender, instance, created, **kwargs):
|
|
"""При изменении связи — очистить кеш (статус и т.д.)."""
|
|
if instance.mentor_id:
|
|
_invalidate_manage_clients_cache(instance.mentor_id)
|
|
|
|
|
|
|
|
@receiver(post_save, sender=Group)
|
|
def group_saved(sender, instance, created, **kwargs):
|
|
"""При создании/обновлении группы — синхронизировать групповой чат."""
|
|
try:
|
|
from apps.chat.services import ChatService
|
|
ChatService.get_or_create_group_chat(instance)
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
@receiver(m2m_changed, sender=Group.students.through)
|
|
def group_students_changed(sender, instance, action, **kwargs):
|
|
"""При изменении участников группы — синхронизировать участников чата."""
|
|
if action in ('post_add', 'post_remove', 'post_clear'):
|
|
try:
|
|
from apps.chat.services import ChatService
|
|
ChatService.get_or_create_group_chat(instance)
|
|
except Exception:
|
|
pass
|