from django.db.models.signals import post_delete, post_save from django.dispatch import receiver from .models import Grade, Lesson, Node, Unit, UserAnswer, UserLessonCompletion from .services import touch_node_progress_on_answer, update_node_progress_on_lesson_completion @receiver(post_save, sender=UserAnswer, dispatch_uid='content_touch_node_progress_on_answer') def _on_user_answer_created(sender, instance, created, **kwargs): if not created: return touch_node_progress_on_answer(instance.user_id, instance.question) @receiver(post_save, sender=UserLessonCompletion, dispatch_uid='content_update_node_progress_on_completion') def _on_lesson_completion_created(sender, instance, created, **kwargs): if not created: return update_node_progress_on_lesson_completion(instance.user_id, instance.lesson) # با هر تغییرِ برنامه‌ی درسی (از ادمین یا seed)، نسخه‌ی کشِ محتوا یک واحد جلو # می‌رود و همه‌ی کلیدهای content:grades / content:tree را یک‌جا باطل می‌کند. @receiver(post_save, sender=Grade, dispatch_uid='content_bump_curriculum_grade_save') @receiver(post_delete, sender=Grade, dispatch_uid='content_bump_curriculum_grade_delete') @receiver(post_save, sender=Unit, dispatch_uid='content_bump_curriculum_unit_save') @receiver(post_delete, sender=Unit, dispatch_uid='content_bump_curriculum_unit_delete') @receiver(post_save, sender=Node, dispatch_uid='content_bump_curriculum_node_save') @receiver(post_delete, sender=Node, dispatch_uid='content_bump_curriculum_node_delete') @receiver(post_save, sender=Lesson, dispatch_uid='content_bump_curriculum_lesson_save') @receiver(post_delete, sender=Lesson, dispatch_uid='content_bump_curriculum_lesson_delete') def _bump_curriculum_cache_version(sender, **kwargs): from .views import bump_curriculum_version bump_curriculum_version()