mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2026-02-05 11:25:19 -05:00
feat: Implement initial schema and add various API, service, and management command enhancements across the application.
This commit is contained in:
@@ -14,9 +14,7 @@ from django.utils import timezone
|
||||
from .models import EditSubmission
|
||||
|
||||
|
||||
def pending_submissions_for_review(
|
||||
*, content_type: str | None = None, limit: int = 50
|
||||
) -> QuerySet[EditSubmission]:
|
||||
def pending_submissions_for_review(*, content_type: str | None = None, limit: int = 50) -> QuerySet[EditSubmission]:
|
||||
"""
|
||||
Get pending submissions that need moderation review.
|
||||
|
||||
@@ -39,9 +37,7 @@ def pending_submissions_for_review(
|
||||
return queryset.order_by("created_at")[:limit]
|
||||
|
||||
|
||||
def submissions_by_user(
|
||||
*, user_id: int, status: str | None = None
|
||||
) -> QuerySet[EditSubmission]:
|
||||
def submissions_by_user(*, user_id: int, status: str | None = None) -> QuerySet[EditSubmission]:
|
||||
"""
|
||||
Get submissions created by a specific user.
|
||||
|
||||
@@ -52,9 +48,7 @@ def submissions_by_user(
|
||||
Returns:
|
||||
QuerySet of user's submissions
|
||||
"""
|
||||
queryset = EditSubmission.objects.filter(user_id=user_id).select_related(
|
||||
"content_type", "handled_by"
|
||||
)
|
||||
queryset = EditSubmission.objects.filter(user_id=user_id).select_related("content_type", "handled_by")
|
||||
|
||||
if status:
|
||||
queryset = queryset.filter(status=status)
|
||||
@@ -62,9 +56,7 @@ def submissions_by_user(
|
||||
return queryset.order_by("-created_at")
|
||||
|
||||
|
||||
def submissions_handled_by_moderator(
|
||||
*, moderator_id: int, days: int = 30
|
||||
) -> QuerySet[EditSubmission]:
|
||||
def submissions_handled_by_moderator(*, moderator_id: int, days: int = 30) -> QuerySet[EditSubmission]:
|
||||
"""
|
||||
Get submissions handled by a specific moderator in the last N days.
|
||||
|
||||
@@ -78,9 +70,7 @@ def submissions_handled_by_moderator(
|
||||
cutoff_date = timezone.now() - timedelta(days=days)
|
||||
|
||||
return (
|
||||
EditSubmission.objects.filter(
|
||||
handled_by_id=moderator_id, handled_at__gte=cutoff_date
|
||||
)
|
||||
EditSubmission.objects.filter(handled_by_id=moderator_id, handled_at__gte=cutoff_date)
|
||||
.select_related("user", "content_type")
|
||||
.order_by("-handled_at")
|
||||
)
|
||||
@@ -105,9 +95,7 @@ def recent_submissions(*, days: int = 7) -> QuerySet[EditSubmission]:
|
||||
)
|
||||
|
||||
|
||||
def submissions_by_content_type(
|
||||
*, content_type: str, status: str | None = None
|
||||
) -> QuerySet[EditSubmission]:
|
||||
def submissions_by_content_type(*, content_type: str, status: str | None = None) -> QuerySet[EditSubmission]:
|
||||
"""
|
||||
Get submissions for a specific content type.
|
||||
|
||||
@@ -118,9 +106,9 @@ def submissions_by_content_type(
|
||||
Returns:
|
||||
QuerySet of submissions for the content type
|
||||
"""
|
||||
queryset = EditSubmission.objects.filter(
|
||||
content_type__model=content_type.lower()
|
||||
).select_related("user", "handled_by")
|
||||
queryset = EditSubmission.objects.filter(content_type__model=content_type.lower()).select_related(
|
||||
"user", "handled_by"
|
||||
)
|
||||
|
||||
if status:
|
||||
queryset = queryset.filter(status=status)
|
||||
@@ -136,12 +124,8 @@ def moderation_queue_summary() -> dict[str, Any]:
|
||||
Dictionary containing queue statistics
|
||||
"""
|
||||
pending_count = EditSubmission.objects.filter(status="PENDING").count()
|
||||
approved_today = EditSubmission.objects.filter(
|
||||
status="APPROVED", handled_at__date=timezone.now().date()
|
||||
).count()
|
||||
rejected_today = EditSubmission.objects.filter(
|
||||
status="REJECTED", handled_at__date=timezone.now().date()
|
||||
).count()
|
||||
approved_today = EditSubmission.objects.filter(status="APPROVED", handled_at__date=timezone.now().date()).count()
|
||||
rejected_today = EditSubmission.objects.filter(status="REJECTED", handled_at__date=timezone.now().date()).count()
|
||||
|
||||
# Submissions by content type
|
||||
submissions_by_type = (
|
||||
@@ -159,9 +143,7 @@ def moderation_queue_summary() -> dict[str, Any]:
|
||||
}
|
||||
|
||||
|
||||
def moderation_statistics_summary(
|
||||
*, days: int = 30, moderator: User | None = None
|
||||
) -> dict[str, Any]:
|
||||
def moderation_statistics_summary(*, days: int = 30, moderator: User | None = None) -> dict[str, Any]:
|
||||
"""
|
||||
Get comprehensive moderation statistics for a time period.
|
||||
|
||||
@@ -189,8 +171,7 @@ def moderation_statistics_summary(
|
||||
handled_queryset.exclude(handled_at__isnull=True)
|
||||
.annotate(
|
||||
response_hours=ExpressionWrapper(
|
||||
Extract(F('handled_at') - F('created_at'), 'epoch') / 3600.0,
|
||||
output_field=FloatField()
|
||||
Extract(F("handled_at") - F("created_at"), "epoch") / 3600.0, output_field=FloatField()
|
||||
)
|
||||
)
|
||||
.values_list("response_hours", flat=True)
|
||||
|
||||
Reference in New Issue
Block a user