mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-24 12:11:08 -05:00
Add secret management guide, client-side performance monitoring, and search accessibility enhancements
- Introduced a comprehensive Secret Management Guide detailing best practices, secret classification, development setup, production management, rotation procedures, and emergency protocols. - Implemented a client-side performance monitoring script to track various metrics including page load performance, paint metrics, layout shifts, and memory usage. - Enhanced search accessibility with keyboard navigation support for search results, ensuring compliance with WCAG standards and improving user experience.
This commit is contained in:
@@ -54,6 +54,10 @@ from .filters import (
|
||||
ModerationActionFilter,
|
||||
BulkOperationFilter,
|
||||
)
|
||||
import logging
|
||||
|
||||
from apps.core.logging import log_exception, log_business_event
|
||||
|
||||
from .permissions import (
|
||||
IsModeratorOrAdmin,
|
||||
IsAdminOrSuperuser,
|
||||
@@ -62,6 +66,8 @@ from .permissions import (
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# Moderation Report ViewSet
|
||||
@@ -159,9 +165,24 @@ class ModerationReportViewSet(viewsets.ModelViewSet):
|
||||
)
|
||||
|
||||
report.assigned_moderator = moderator
|
||||
old_status = report.status
|
||||
try:
|
||||
transition_method(user=moderator)
|
||||
report.save()
|
||||
log_business_event(
|
||||
logger,
|
||||
event_type="fsm_transition",
|
||||
message=f"ModerationReport {report.id} assigned to {moderator.username}",
|
||||
context={
|
||||
"model": "ModerationReport",
|
||||
"object_id": report.id,
|
||||
"old_state": old_status,
|
||||
"new_state": report.status,
|
||||
"transition": "assign",
|
||||
"moderator": moderator.username,
|
||||
},
|
||||
request=request,
|
||||
)
|
||||
except TransitionPermissionDenied as e:
|
||||
return Response(
|
||||
format_transition_error(e),
|
||||
@@ -220,6 +241,7 @@ class ModerationReportViewSet(viewsets.ModelViewSet):
|
||||
status=status.HTTP_403_FORBIDDEN,
|
||||
)
|
||||
|
||||
old_status = report.status
|
||||
try:
|
||||
transition_method(user=request.user)
|
||||
except TransitionPermissionDenied as e:
|
||||
@@ -243,6 +265,22 @@ class ModerationReportViewSet(viewsets.ModelViewSet):
|
||||
report.resolved_at = timezone.now()
|
||||
report.save()
|
||||
|
||||
log_business_event(
|
||||
logger,
|
||||
event_type="fsm_transition",
|
||||
message=f"ModerationReport {report.id} resolved with action: {resolution_action}",
|
||||
context={
|
||||
"model": "ModerationReport",
|
||||
"object_id": report.id,
|
||||
"old_state": old_status,
|
||||
"new_state": report.status,
|
||||
"transition": "resolve",
|
||||
"resolution_action": resolution_action,
|
||||
"user": request.user.username,
|
||||
},
|
||||
request=request,
|
||||
)
|
||||
|
||||
serializer = self.get_serializer(report)
|
||||
return Response(serializer.data)
|
||||
|
||||
@@ -579,6 +617,7 @@ class ModerationQueueViewSet(viewsets.ModelViewSet):
|
||||
|
||||
queue_item.assigned_to = moderator
|
||||
queue_item.assigned_at = timezone.now()
|
||||
old_status = queue_item.status
|
||||
try:
|
||||
transition_method(user=moderator)
|
||||
except TransitionPermissionDenied as e:
|
||||
@@ -599,6 +638,21 @@ class ModerationQueueViewSet(viewsets.ModelViewSet):
|
||||
|
||||
queue_item.save()
|
||||
|
||||
log_business_event(
|
||||
logger,
|
||||
event_type="fsm_transition",
|
||||
message=f"ModerationQueue {queue_item.id} assigned to {moderator.username}",
|
||||
context={
|
||||
"model": "ModerationQueue",
|
||||
"object_id": queue_item.id,
|
||||
"old_state": old_status,
|
||||
"new_state": queue_item.status,
|
||||
"transition": "assign",
|
||||
"moderator": moderator.username,
|
||||
},
|
||||
request=request,
|
||||
)
|
||||
|
||||
response_serializer = self.get_serializer(queue_item)
|
||||
return Response(response_serializer.data)
|
||||
|
||||
@@ -631,6 +685,7 @@ class ModerationQueueViewSet(viewsets.ModelViewSet):
|
||||
|
||||
queue_item.assigned_to = None
|
||||
queue_item.assigned_at = None
|
||||
old_status = queue_item.status
|
||||
try:
|
||||
transition_method(user=request.user)
|
||||
except TransitionPermissionDenied as e:
|
||||
@@ -651,6 +706,21 @@ class ModerationQueueViewSet(viewsets.ModelViewSet):
|
||||
|
||||
queue_item.save()
|
||||
|
||||
log_business_event(
|
||||
logger,
|
||||
event_type="fsm_transition",
|
||||
message=f"ModerationQueue {queue_item.id} unassigned",
|
||||
context={
|
||||
"model": "ModerationQueue",
|
||||
"object_id": queue_item.id,
|
||||
"old_state": old_status,
|
||||
"new_state": queue_item.status,
|
||||
"transition": "unassign",
|
||||
"user": request.user.username,
|
||||
},
|
||||
request=request,
|
||||
)
|
||||
|
||||
serializer = self.get_serializer(queue_item)
|
||||
return Response(serializer.data)
|
||||
|
||||
@@ -684,6 +754,7 @@ class ModerationQueueViewSet(viewsets.ModelViewSet):
|
||||
status=status.HTTP_403_FORBIDDEN,
|
||||
)
|
||||
|
||||
old_status = queue_item.status
|
||||
try:
|
||||
transition_method(user=request.user)
|
||||
except TransitionPermissionDenied as e:
|
||||
@@ -716,6 +787,22 @@ class ModerationQueueViewSet(viewsets.ModelViewSet):
|
||||
is_active=True,
|
||||
)
|
||||
|
||||
log_business_event(
|
||||
logger,
|
||||
event_type="fsm_transition",
|
||||
message=f"ModerationQueue {queue_item.id} completed with action: {action_taken}",
|
||||
context={
|
||||
"model": "ModerationQueue",
|
||||
"object_id": queue_item.id,
|
||||
"old_state": old_status,
|
||||
"new_state": queue_item.status,
|
||||
"transition": "complete",
|
||||
"action_taken": action_taken,
|
||||
"user": request.user.username,
|
||||
},
|
||||
request=request,
|
||||
)
|
||||
|
||||
response_serializer = self.get_serializer(queue_item)
|
||||
return Response(response_serializer.data)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user