fix: Remove duplicate deletion approval code and fix formatting

- Removed duplicate DeletionApprovalView from views.py
- Removed duplicate DeletionApprovalSerializer from serialisers.py
- Removed duplicate URL route /api/ai/deletions/approve/
- Fixed missing blank line in serialisers.py before AISuggestionsRequestSerializer
- Kept DeletionRequestViewSet as the correct implementation

Co-authored-by: dawnsystem <42047891+dawnsystem@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2025-11-13 05:59:16 +00:00
parent d9a4edf9c5
commit b8d554631c
3 changed files with 2 additions and 92 deletions

View file

@ -2754,6 +2754,8 @@ class DeletionRequestSerializer(serializers.ModelSerializer):
}
for doc in documents
]
class AISuggestionsRequestSerializer(serializers.Serializer):
"""Serializer for requesting AI suggestions for a document."""
@ -2852,25 +2854,3 @@ class AIConfigurationSerializer(serializers.Serializer):
label="Advanced OCR Enabled",
help_text="Enable/disable advanced OCR features",
)
class DeletionApprovalSerializer(serializers.Serializer):
"""Serializer for approving/rejecting deletion requests."""
request_id = serializers.IntegerField(
required=True,
label="Request ID",
help_text="ID of the deletion request",
)
action = serializers.ChoiceField(
choices=["approve", "reject"],
required=True,
label="Action",
help_text="Action to take on the deletion request",
)
reason = serializers.CharField(
required=False,
allow_blank=True,
label="Reason",
help_text="Reason for approval/rejection (optional)",
)

View file

@ -169,7 +169,6 @@ from documents.serialisers import BulkEditObjectsSerializer
from documents.serialisers import BulkEditSerializer
from documents.serialisers import CorrespondentSerializer
from documents.serialisers import CustomFieldSerializer
from documents.serialisers import DeletionApprovalSerializer
from documents.serialisers import DocumentListSerializer
from documents.serialisers import DocumentSerializer
from documents.serialisers import DocumentTypeSerializer
@ -3436,66 +3435,3 @@ class AIConfigurationView(GenericAPIView):
})
class DeletionApprovalView(GenericAPIView):
"""
API view to approve/reject deletion requests.
Requires: can_approve_deletions permission
"""
permission_classes = [IsAuthenticated, CanApproveDeletionsPermission]
def post(self, request):
"""Approve or reject a deletion request."""
serializer = DeletionApprovalSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
request_id = serializer.validated_data['request_id']
action = serializer.validated_data['action']
reason = serializer.validated_data.get('reason', '')
try:
deletion_request = DeletionRequest.objects.get(pk=request_id)
except DeletionRequest.DoesNotExist:
return Response(
{"error": "Deletion request not found"},
status=status.HTTP_404_NOT_FOUND
)
# Permission is handled by the permission class; users with the permission
# can approve any deletion request. Additional ownership check for non-superusers.
if deletion_request.user != request.user and not request.user.is_superuser:
return Response(
{"error": "Permission denied"},
status=status.HTTP_403_FORBIDDEN
)
if action == "approve":
deletion_request.status = DeletionRequest.STATUS_APPROVED
# TODO: Store approval reason for audit trail
# deletion_request.approval_reason = reason
# deletion_request.reviewed_at = timezone.now()
# deletion_request.reviewed_by = request.user
deletion_request.save()
# Perform the actual deletion
# This would integrate with the AI deletion manager
return Response({
"status": "success",
"message": "Deletion request approved",
"request_id": request_id
})
else: # action == "reject"
deletion_request.status = DeletionRequest.STATUS_REJECTED
# TODO: Store rejection reason for audit trail
# deletion_request.rejection_reason = reason
# deletion_request.reviewed_at = timezone.now()
# deletion_request.reviewed_by = request.user
deletion_request.save()
return Response({
"status": "success",
"message": "Deletion request rejected",
"request_id": request_id
})

View file

@ -23,7 +23,6 @@ from documents.views import BulkEditObjectsView
from documents.views import BulkEditView
from documents.views import CorrespondentViewSet
from documents.views import CustomFieldViewSet
from documents.views import DeletionApprovalView
from documents.views import DocumentTypeViewSet
from documents.views import GlobalSearchView
from documents.views import IndexView
@ -225,11 +224,6 @@ urlpatterns = [
AIConfigurationView.as_view(),
name="ai_config",
),
re_path(
"^deletions/approve/$",
DeletionApprovalView.as_view(),
name="ai_deletion_approval",
),
],
),
),