mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-19 10:26:17 +00:00
feat: delete other revision (#5700)
This commit is contained in:
@@ -1466,6 +1466,81 @@ class SeadocRevisionView(APIView):
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||
|
||||
|
||||
class DeleteSeadocOtherRevision(APIView):
|
||||
# sdoc editor use jwt token
|
||||
authentication_classes = (SdocJWTTokenAuthentication, TokenAuthentication, SessionAuthentication)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
throttle_classes = (UserRateThrottle, )
|
||||
|
||||
def delete(self, request, file_uuid, revision_id):
|
||||
origin_doc_uuid = file_uuid
|
||||
if not origin_doc_uuid:
|
||||
error_msg = 'origin_file_uuid %s not found.' % origin_doc_uuid
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
origin_uuid_map = FileUUIDMap.objects.get_fileuuidmap_by_uuid(origin_doc_uuid)
|
||||
if not origin_uuid_map:
|
||||
error_msg = 'file %s uuid_map not found.' % origin_doc_uuid
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
if not revision_id:
|
||||
error_msg = 'Revision %s not found.' % revision_id
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
revision = SeadocRevision.objects.get_by_origin_doc_uuid_and_revision_id(origin_doc_uuid, revision_id)
|
||||
if not revision:
|
||||
error_msg = 'Revision %s not found.' % file_uuid
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
if revision.is_published:
|
||||
error_msg = 'Revision %s is already published.' % file_uuid
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
file_uuid = revision.doc_uuid
|
||||
uuid_map = FileUUIDMap.objects.get_fileuuidmap_by_uuid(file_uuid)
|
||||
if not uuid_map:
|
||||
error_msg = 'file %s uuid_map not found.' % file_uuid
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
repo_id = revision.repo_id
|
||||
repo = seafile_api.get_repo(repo_id)
|
||||
if not repo:
|
||||
error_msg = 'Library %s not found.' % repo_id
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
# permission check
|
||||
permission = check_folder_permission(request, repo_id, '/')
|
||||
if not permission:
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
if permission != PERMISSION_READ_WRITE:
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
# get revision file info
|
||||
revision_file_uuid = uuid_map
|
||||
revision_parent_path = revision_file_uuid.parent_path
|
||||
revision_filename = revision_file_uuid.filename
|
||||
username = request.user.username
|
||||
|
||||
revision_image_parent_path = '/images/sdoc/' + str(revision_file_uuid.uuid) + '/'
|
||||
dir_id = seafile_api.get_dir_id_by_path(repo_id, revision_image_parent_path)
|
||||
if dir_id:
|
||||
seafile_api.del_file(
|
||||
repo_id, '/images/sdoc/', json.dumps([str(revision_file_uuid.uuid)]), username)
|
||||
|
||||
seafile_api.del_file(
|
||||
repo_id, revision_parent_path, json.dumps([revision_filename]), username)
|
||||
|
||||
SeadocRevision.objects.delete_by_doc_uuid(file_uuid)
|
||||
|
||||
sdoc_server_api = SdocServerAPI(file_uuid, revision_filename, username)
|
||||
sdoc_server_api.remove_doc()
|
||||
|
||||
return Response({
|
||||
'success': True,
|
||||
})
|
||||
|
||||
class SeadocPublishRevision(APIView):
|
||||
authentication_classes = (SdocJWTTokenAuthentication, TokenAuthentication, SessionAuthentication)
|
||||
permission_classes = (IsAuthenticated, )
|
||||
|
@@ -103,6 +103,9 @@ class SeadocRevisionManager(models.Manager):
|
||||
def get_by_doc_uuid(self, doc_uuid):
|
||||
return self.filter(doc_uuid=doc_uuid).first()
|
||||
|
||||
def get_by_origin_doc_uuid_and_revision_id(self, origin_doc_uuid, revision_id):
|
||||
return self.filter(origin_doc_uuid=origin_doc_uuid, revision_id=revision_id).first()
|
||||
|
||||
def list_by_doc_uuids(self, doc_uuid_list):
|
||||
return self.filter(doc_uuid__in=doc_uuid_list)
|
||||
|
||||
|
@@ -3,7 +3,7 @@ from .apis import SeadocAccessToken, SeadocUploadLink, SeadocDownloadLink, Seado
|
||||
SeadocUploadImage, SeadocDownloadImage, SeadocAsyncCopyImages, SeadocQueryCopyMoveProgressView, SeadocCopyHistoryFile, SeadocHistory, SeadocDrafts, SeadocMaskAsDraft, \
|
||||
SeadocCommentsView, SeadocCommentView, SeadocStartRevise, SeadocPublishRevision, SeadocRevisionsCount, SeadocRevisions, \
|
||||
SeadocCommentRepliesView, SeadocCommentReplyView, SeadocFileView, SeadocFileUUIDView, SeadocDirView, SdocRevisionBaseVersionContent, SeadocRevisionView, \
|
||||
SeadocFilesInfoView
|
||||
SeadocFilesInfoView, DeleteSeadocOtherRevision
|
||||
|
||||
|
||||
# api/v2.1/seadoc/
|
||||
@@ -31,6 +31,7 @@ urlpatterns = [
|
||||
re_path(r'^revision/(?P<file_uuid>[-0-9a-f]{36})/$', SeadocRevisionView.as_view(), name='seadoc_revision'),
|
||||
re_path(r'^revision/base-version-content/(?P<file_uuid>[-0-9a-f]{36})/$', SdocRevisionBaseVersionContent.as_view(), name='sdoc_revision_base_version_content'),
|
||||
re_path(r'^revision/origin-file-content/(?P<file_uuid>[-0-9a-f]{36})/$', SeadocOriginFileContent.as_view(), name='sdoc_revision_origin_file_content'),
|
||||
re_path(r'^delete-revision/(?P<file_uuid>[-0-9a-f]{36})/(?P<revision_id>\d+)/$', DeleteSeadocOtherRevision.as_view(), name='sdoc_delete_other_revision'),
|
||||
re_path(r'^file/(?P<file_uuid>[-0-9a-f]{36})/$', SeadocFileView.as_view(), name='seadoc_file_view'),
|
||||
re_path(r'^file-uuid/(?P<file_uuid>[-0-9a-f]{36})/$', SeadocFileUUIDView.as_view(), name='seadoc_file_uuid_view'),
|
||||
re_path(r'^files-info/(?P<file_uuid>[-0-9a-f]{36})/$', SeadocFilesInfoView.as_view(), name='seadoc_files_info_view'),
|
||||
|
Reference in New Issue
Block a user