mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-22 15:11:09 -05:00
feat(state-machine): add comprehensive callback system for transitions
Extend state machine module with callback infrastructure including: - Pre/post/error transition callbacks with registry - Signal-based transition notifications - Callback configuration and monitoring support - Helper functions for callback registration - Improved park ride count updates with FSM integration
This commit is contained in:
@@ -1,13 +1,24 @@
|
||||
import logging
|
||||
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ModerationConfig(AppConfig):
|
||||
default_auto_field = "django.db.models.BigAutoField"
|
||||
name = "apps.moderation"
|
||||
verbose_name = "Content Moderation"
|
||||
|
||||
def ready(self):
|
||||
"""Initialize state machines for all moderation models."""
|
||||
"""Initialize state machines and callbacks for all moderation models."""
|
||||
self._apply_state_machines()
|
||||
self._register_callbacks()
|
||||
self._register_signal_handlers()
|
||||
|
||||
def _apply_state_machines(self):
|
||||
"""Apply FSM to all moderation models."""
|
||||
from apps.core.state_machine import apply_state_machine
|
||||
from .models import (
|
||||
EditSubmission,
|
||||
@@ -48,3 +59,113 @@ class ModerationConfig(AppConfig):
|
||||
choice_group="photo_submission_statuses",
|
||||
domain="moderation",
|
||||
)
|
||||
|
||||
def _register_callbacks(self):
|
||||
"""Register FSM transition callbacks for moderation models."""
|
||||
from apps.core.state_machine.registry import register_callback
|
||||
from apps.core.state_machine.callbacks.notifications import (
|
||||
SubmissionApprovedNotification,
|
||||
SubmissionRejectedNotification,
|
||||
SubmissionEscalatedNotification,
|
||||
ModerationNotificationCallback,
|
||||
)
|
||||
from apps.core.state_machine.callbacks.cache import (
|
||||
ModerationCacheInvalidation,
|
||||
)
|
||||
from .models import (
|
||||
EditSubmission,
|
||||
ModerationReport,
|
||||
ModerationQueue,
|
||||
BulkOperation,
|
||||
PhotoSubmission,
|
||||
)
|
||||
|
||||
# EditSubmission callbacks
|
||||
register_callback(
|
||||
EditSubmission, 'status', 'PENDING', 'APPROVED',
|
||||
SubmissionApprovedNotification()
|
||||
)
|
||||
register_callback(
|
||||
EditSubmission, 'status', 'PENDING', 'APPROVED',
|
||||
ModerationCacheInvalidation()
|
||||
)
|
||||
register_callback(
|
||||
EditSubmission, 'status', 'PENDING', 'REJECTED',
|
||||
SubmissionRejectedNotification()
|
||||
)
|
||||
register_callback(
|
||||
EditSubmission, 'status', 'PENDING', 'REJECTED',
|
||||
ModerationCacheInvalidation()
|
||||
)
|
||||
register_callback(
|
||||
EditSubmission, 'status', 'PENDING', 'ESCALATED',
|
||||
SubmissionEscalatedNotification()
|
||||
)
|
||||
register_callback(
|
||||
EditSubmission, 'status', 'PENDING', 'ESCALATED',
|
||||
ModerationCacheInvalidation()
|
||||
)
|
||||
|
||||
# PhotoSubmission callbacks
|
||||
register_callback(
|
||||
PhotoSubmission, 'status', 'PENDING', 'APPROVED',
|
||||
SubmissionApprovedNotification()
|
||||
)
|
||||
register_callback(
|
||||
PhotoSubmission, 'status', 'PENDING', 'APPROVED',
|
||||
ModerationCacheInvalidation()
|
||||
)
|
||||
register_callback(
|
||||
PhotoSubmission, 'status', 'PENDING', 'REJECTED',
|
||||
SubmissionRejectedNotification()
|
||||
)
|
||||
register_callback(
|
||||
PhotoSubmission, 'status', 'PENDING', 'REJECTED',
|
||||
ModerationCacheInvalidation()
|
||||
)
|
||||
register_callback(
|
||||
PhotoSubmission, 'status', 'PENDING', 'ESCALATED',
|
||||
SubmissionEscalatedNotification()
|
||||
)
|
||||
|
||||
# ModerationReport callbacks
|
||||
register_callback(
|
||||
ModerationReport, 'status', '*', '*',
|
||||
ModerationNotificationCallback()
|
||||
)
|
||||
register_callback(
|
||||
ModerationReport, 'status', '*', '*',
|
||||
ModerationCacheInvalidation()
|
||||
)
|
||||
|
||||
# ModerationQueue callbacks
|
||||
register_callback(
|
||||
ModerationQueue, 'status', '*', '*',
|
||||
ModerationNotificationCallback()
|
||||
)
|
||||
register_callback(
|
||||
ModerationQueue, 'status', '*', '*',
|
||||
ModerationCacheInvalidation()
|
||||
)
|
||||
|
||||
# BulkOperation callbacks
|
||||
register_callback(
|
||||
BulkOperation, 'status', '*', '*',
|
||||
ModerationNotificationCallback()
|
||||
)
|
||||
register_callback(
|
||||
BulkOperation, 'status', '*', '*',
|
||||
ModerationCacheInvalidation()
|
||||
)
|
||||
|
||||
logger.debug("Registered moderation transition callbacks")
|
||||
|
||||
def _register_signal_handlers(self):
|
||||
"""Register signal handlers for moderation transitions."""
|
||||
from .signals import register_moderation_signal_handlers
|
||||
|
||||
try:
|
||||
register_moderation_signal_handlers()
|
||||
logger.debug("Registered moderation signal handlers")
|
||||
except Exception as e:
|
||||
logger.warning(f"Could not register moderation signal handlers: {e}")
|
||||
|
||||
Reference in New Issue
Block a user