fix(submissions): broadcast crop delete + fix for crop admin
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
from django.db import transaction
|
||||
from django.db.models.signals import post_save
|
||||
from django.db.models.signals import post_delete, post_save
|
||||
from django.dispatch import receiver
|
||||
from asgiref.sync import async_to_sync
|
||||
from channels.layers import get_channel_layer
|
||||
@@ -8,55 +8,63 @@ from submissions.models import Submission, SubmissionFile, ImageCrop, Scope
|
||||
from submissions.schemas import SubmissionOut, SubmissionFileOut, ImageCropOut
|
||||
|
||||
|
||||
# Staff see (and OCR/crop) every player's submissions, so they get every update
|
||||
STAFF_GROUP_NAME = "submissions_staff"
|
||||
|
||||
|
||||
def _broadcast_submission_event(submission: Submission, message: dict):
|
||||
channel_layer = get_channel_layer()
|
||||
groups = [STAFF_GROUP_NAME]
|
||||
if submission.user_id:
|
||||
groups.append(f"submissions_user_{submission.user_id}")
|
||||
|
||||
for group_name in groups:
|
||||
async_to_sync(channel_layer.group_send)(group_name, message)
|
||||
|
||||
|
||||
@receiver(post_save, sender=Submission)
|
||||
def broadcast_submission_update(sender, instance, created, **kwargs):
|
||||
if not instance.user:
|
||||
return
|
||||
|
||||
user_group_name = f"submissions_user_{instance.user.id}"
|
||||
submission_data = SubmissionOut.from_orm(instance).dict()
|
||||
|
||||
async_to_sync(get_channel_layer().group_send)(
|
||||
user_group_name,
|
||||
_broadcast_submission_event(
|
||||
instance,
|
||||
{
|
||||
"type": "submission.updated",
|
||||
"submission": submission_data,
|
||||
"submission": SubmissionOut.from_orm(instance).dict(),
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@receiver(post_save, sender=SubmissionFile)
|
||||
def broadcast_submission_file_update(sender, instance, created, **kwargs):
|
||||
submission = instance.submission
|
||||
if not submission.user:
|
||||
return
|
||||
|
||||
user_group_name = f"submissions_user_{submission.user.id}"
|
||||
file_data = SubmissionFileOut.from_orm(instance).dict()
|
||||
|
||||
async_to_sync(get_channel_layer().group_send)(
|
||||
user_group_name,
|
||||
_broadcast_submission_event(
|
||||
instance.submission,
|
||||
{
|
||||
"type": "submission.file.updated",
|
||||
"file": file_data,
|
||||
"file": SubmissionFileOut.from_orm(instance).dict(),
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@receiver(post_save, sender=ImageCrop)
|
||||
def broadcast_image_crop_update(sender, instance, created, **kwargs):
|
||||
submission = instance.submission_file.submission
|
||||
if not submission.user:
|
||||
return
|
||||
|
||||
user_group_name = f"submissions_user_{submission.user.id}"
|
||||
crop_data = ImageCropOut.from_orm(instance).dict()
|
||||
|
||||
async_to_sync(get_channel_layer().group_send)(
|
||||
user_group_name,
|
||||
_broadcast_submission_event(
|
||||
instance.submission_file.submission,
|
||||
{
|
||||
"type": "submission.crop.updated",
|
||||
"crop": crop_data,
|
||||
"crop": ImageCropOut.from_orm(instance).dict(),
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@receiver(post_delete, sender=ImageCrop)
|
||||
def broadcast_image_crop_delete(sender, instance, **kwargs):
|
||||
_broadcast_submission_event(
|
||||
instance.submission_file.submission,
|
||||
{
|
||||
"type": "submission.crop.deleted",
|
||||
"crop": {
|
||||
"id": str(instance.id),
|
||||
"submission_file_id": str(instance.submission_file_id),
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user