Files
thrillwiki_django_no_react/backend/apps/moderation/apps.py
pacnpal b860e332cb 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
2025-12-21 19:20:49 -05:00

172 lines
5.4 KiB
Python

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 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,
ModerationReport,
ModerationQueue,
BulkOperation,
PhotoSubmission,
)
# Apply FSM to all models with their respective choice groups
apply_state_machine(
EditSubmission,
field_name="status",
choice_group="edit_submission_statuses",
domain="moderation",
)
apply_state_machine(
ModerationReport,
field_name="status",
choice_group="moderation_report_statuses",
domain="moderation",
)
apply_state_machine(
ModerationQueue,
field_name="status",
choice_group="moderation_queue_statuses",
domain="moderation",
)
apply_state_machine(
BulkOperation,
field_name="status",
choice_group="bulk_operation_statuses",
domain="moderation",
)
apply_state_machine(
PhotoSubmission,
field_name="status",
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}")