mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-30 04:47:00 -05:00
feat: Implement MFA authentication, add ride statistics model, and update various services, APIs, and tests across the application.
This commit is contained in:
@@ -13,14 +13,7 @@ Includes:
|
||||
|
||||
import logging
|
||||
|
||||
from django.conf import settings
|
||||
from django.dispatch import receiver, Signal
|
||||
|
||||
from apps.core.state_machine.signals import (
|
||||
post_state_transition,
|
||||
state_transition_failed,
|
||||
)
|
||||
|
||||
from django.dispatch import Signal
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -269,6 +262,7 @@ def _update_related_queue_items(instance, status):
|
||||
"""Update queue items related to a moderation object."""
|
||||
try:
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
|
||||
from apps.moderation.models import ModerationQueue
|
||||
|
||||
content_type = ContentType.objects.get_for_model(type(instance))
|
||||
@@ -328,10 +322,10 @@ def _finalize_bulk_operation(instance, success):
|
||||
def _broadcast_submission_status_change(instance, source, target, user):
|
||||
"""
|
||||
Broadcast submission status change for real-time UI updates.
|
||||
|
||||
|
||||
Emits the submission_status_changed signal with a structured payload
|
||||
that can be consumed by notification systems (Novu, SSE, WebSocket, etc.).
|
||||
|
||||
|
||||
Payload format:
|
||||
{
|
||||
"submission_id": 123,
|
||||
@@ -344,11 +338,11 @@ def _broadcast_submission_status_change(instance, source, target, user):
|
||||
}
|
||||
"""
|
||||
try:
|
||||
from .models import EditSubmission, PhotoSubmission
|
||||
|
||||
from .models import EditSubmission
|
||||
|
||||
# Determine submission type
|
||||
submission_type = "edit" if isinstance(instance, EditSubmission) else "photo"
|
||||
|
||||
|
||||
# Build the broadcast payload
|
||||
payload = {
|
||||
"submission_id": instance.pk,
|
||||
@@ -359,13 +353,13 @@ def _broadcast_submission_status_change(instance, source, target, user):
|
||||
"locked_at": None,
|
||||
"changed_by": user.username if user else None,
|
||||
}
|
||||
|
||||
|
||||
# Add claim information if available
|
||||
if hasattr(instance, 'claimed_by') and instance.claimed_by:
|
||||
payload["locked_by"] = instance.claimed_by.username
|
||||
if hasattr(instance, 'claimed_at') and instance.claimed_at:
|
||||
payload["locked_at"] = instance.claimed_at.isoformat()
|
||||
|
||||
|
||||
# Emit the signal for downstream notification handlers
|
||||
submission_status_changed.send(
|
||||
sender=type(instance),
|
||||
@@ -376,7 +370,7 @@ def _broadcast_submission_status_change(instance, source, target, user):
|
||||
locked_by=payload["locked_by"],
|
||||
payload=payload,
|
||||
)
|
||||
|
||||
|
||||
logger.debug(
|
||||
f"Broadcast status change: {submission_type}#{instance.pk} "
|
||||
f"{source} -> {target}"
|
||||
@@ -397,11 +391,11 @@ def register_moderation_signal_handlers():
|
||||
|
||||
try:
|
||||
from apps.moderation.models import (
|
||||
EditSubmission,
|
||||
PhotoSubmission,
|
||||
ModerationReport,
|
||||
ModerationQueue,
|
||||
BulkOperation,
|
||||
EditSubmission,
|
||||
ModerationQueue,
|
||||
ModerationReport,
|
||||
PhotoSubmission,
|
||||
)
|
||||
|
||||
# EditSubmission handlers
|
||||
|
||||
Reference in New Issue
Block a user