Files
Barış Keserandgoogle-labs-jules[bot] 5f9fbd0c5a feat(users): Move badge calculation to async Celery tasks (#365)
- Created asynchronous tasks `calculate_badges_task`, `calculate_chat_badges_task`, and `reevaluate_all_badges_task` in `users/tasks.py`.
- Updated `users/signals.py` to invoke Celery tasks asynchronously via `.delay()` rather than running synchronous functions.
- Added `flower` for monitoring in `requirements.txt`.
- Configured Celery Result Backend to use Redis instead of `django-db` in `aniscrap_core/settings.py`.
- Scheduled `reevaluate_all_badges_task` to run daily via Celery Beat in `aniscrap_core/celery.py`.
- Updated `.jules/development-plan.md` to reflect completed Celery optimizations.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-08-01 20:56:30 +00:00

37 lines
1.4 KiB
Python

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import WatchLog
from content.models import Subscription, Review, VideoFile
from apps.watchparty.models import Room, Message
from .tasks import calculate_badges_task, calculate_chat_badges_task
@receiver(post_save, sender=VideoFile)
def check_badges_on_video_upload(sender, instance, created, **kwargs):
if created and instance.uploader:
calculate_badges_task.delay(instance.uploader.id)
@receiver(post_save, sender=Review)
def check_badges_on_review(sender, instance, created, **kwargs):
if created:
calculate_badges_task.delay(instance.user.id)
@receiver(post_save, sender=Subscription)
def check_badges_on_subscribe(sender, instance, created, **kwargs):
if created:
calculate_badges_task.delay(instance.user.id)
@receiver(post_save, sender=WatchLog)
def check_badges_on_watch(sender, instance, created, **kwargs):
if created:
calculate_badges_task.delay(instance.user.id)
@receiver(post_save, sender=Message)
def check_badges_on_chat(sender, instance, created, **kwargs):
if created and instance.sender:
calculate_chat_badges_task.delay(instance.sender.id)
@receiver(post_save, sender=Room)
def check_badges_on_watch_party(sender, instance, created, **kwargs):
if created:
calculate_badges_task.delay(instance.host.id)