diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 17066084a..afdb8d179 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -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)", - ) diff --git a/src/documents/views.py b/src/documents/views.py index 63bbfa555..898b75dba 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -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 - }) - diff --git a/src/paperless/urls.py b/src/paperless/urls.py index 7efd7c7c1..6d26cef81 100644 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -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", - ), ], ), ),