mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2026-02-05 06:05:18 -05:00
feat: Introduce a CLAIMED state for moderation submissions, requiring claims before approval or rejection, and add a scheduled task to expire stale claims.
This commit is contained in:
@@ -39,8 +39,8 @@ class ModerationService:
|
||||
with transaction.atomic():
|
||||
submission = EditSubmission.objects.select_for_update().get(id=submission_id)
|
||||
|
||||
if submission.status != "PENDING":
|
||||
raise ValueError(f"Submission {submission_id} is not pending approval")
|
||||
if submission.status != "CLAIMED":
|
||||
raise ValueError(f"Submission {submission_id} must be claimed before approval (current status: {submission.status})")
|
||||
|
||||
try:
|
||||
# Call the model's approve method which handles the business
|
||||
@@ -90,8 +90,8 @@ class ModerationService:
|
||||
with transaction.atomic():
|
||||
submission = EditSubmission.objects.select_for_update().get(id=submission_id)
|
||||
|
||||
if submission.status != "PENDING":
|
||||
raise ValueError(f"Submission {submission_id} is not pending review")
|
||||
if submission.status != "CLAIMED":
|
||||
raise ValueError(f"Submission {submission_id} must be claimed before rejection (current status: {submission.status})")
|
||||
|
||||
# Use FSM transition method
|
||||
submission.transition_to_rejected(user=moderator)
|
||||
@@ -169,8 +169,8 @@ class ModerationService:
|
||||
with transaction.atomic():
|
||||
submission = EditSubmission.objects.select_for_update().get(id=submission_id)
|
||||
|
||||
if submission.status != "PENDING":
|
||||
raise ValueError(f"Submission {submission_id} is not pending review")
|
||||
if submission.status not in ("PENDING", "CLAIMED"):
|
||||
raise ValueError(f"Submission {submission_id} is not pending or claimed for review")
|
||||
|
||||
submission.moderator_changes = moderator_changes
|
||||
|
||||
@@ -281,8 +281,9 @@ class ModerationService:
|
||||
|
||||
# Check if user is moderator or above
|
||||
if ModerationService._is_moderator_or_above(submitter):
|
||||
# Auto-approve for moderators
|
||||
# Auto-approve for moderators - must claim first then approve
|
||||
try:
|
||||
submission.claim(user=submitter)
|
||||
created_object = submission.approve(submitter)
|
||||
return {
|
||||
"submission": submission,
|
||||
|
||||
Reference in New Issue
Block a user