1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-09 10:50:24 +00:00

SeadocDrafts (#5519)

This commit is contained in:
欢乐马
2023-06-21 11:20:40 +08:00
committed by GitHub
parent 956a7bc789
commit 1c97ec4a25
4 changed files with 53 additions and 6 deletions

View File

@@ -506,6 +506,44 @@ class SeadocHistory(APIView):
}) })
class SeadocDrafts(APIView):
authentication_classes = (TokenAuthentication, SessionAuthentication)
permission_classes = (IsAuthenticated,)
throttle_classes = (UserRateThrottle, )
def get(self, request, repo_id):
"""list drafts
"""
username = request.user.username
# argument check
owned = request.GET.get('owned')
# resource check
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 owned:
draft_queryset = SeadocDraft.objects.filter(
repo_id=repo_id, username=username)
# all
else:
draft_queryset = SeadocDraft.objects.list_by_repo_id(repo_id)
drafts = [draft.to_dict() for draft in draft_queryset]
return Response({'drafts': drafts})
class SeadocMaskAsDraft(APIView): class SeadocMaskAsDraft(APIView):
authentication_classes = (TokenAuthentication, SessionAuthentication) authentication_classes = (TokenAuthentication, SessionAuthentication)
@@ -550,7 +588,8 @@ class SeadocMaskAsDraft(APIView):
error_msg = '%s is already draft' % filename error_msg = '%s is already draft' % filename
return api_error(status.HTTP_400_BAD_REQUEST, error_msg) return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
draft = SeadocDraft.objects.mask_as_draft(file_uuid, username) draft = SeadocDraft.objects.mask_as_draft(
file_uuid, repo_id, username)
return Response(draft.to_dict()) return Response(draft.to_dict())

View File

@@ -40,8 +40,9 @@ class SeadocDraftManager(models.Manager):
def get_by_doc_uuid(self, doc_uuid): def get_by_doc_uuid(self, doc_uuid):
return self.filter(doc_uuid=doc_uuid).first() return self.filter(doc_uuid=doc_uuid).first()
def mask_as_draft(self, doc_uuid, username): def mask_as_draft(self, doc_uuid, repo_id, username):
return self.create(doc_uuid=doc_uuid, username=username) return self.create(
doc_uuid=doc_uuid, repo_id=repo_id, username=username)
def unmask_as_draft(self, doc_uuid): def unmask_as_draft(self, doc_uuid):
return self.filter(doc_uuid=doc_uuid).delete() return self.filter(doc_uuid=doc_uuid).delete()
@@ -52,9 +53,13 @@ class SeadocDraftManager(models.Manager):
def list_by_username(self, username): def list_by_username(self, username):
return self.filter(username=username) return self.filter(username=username)
def list_by_repo_id(self, repo_id):
return self.filter(repo_id=repo_id)
class SeadocDraft(models.Model): class SeadocDraft(models.Model):
doc_uuid = models.CharField(max_length=36, unique=True) doc_uuid = models.CharField(max_length=36, unique=True)
repo_id = models.CharField(max_length=36, db_index=True)
username = models.CharField(max_length=255, db_index=True) username = models.CharField(max_length=255, db_index=True)
created_at = models.DateTimeField(auto_now_add=True) created_at = models.DateTimeField(auto_now_add=True)
@@ -65,8 +70,8 @@ class SeadocDraft(models.Model):
def to_dict(self): def to_dict(self):
return { return {
'id': self.pk,
'doc_uuid': self.doc_uuid, 'doc_uuid': self.doc_uuid,
'repo_id': self.repo_id,
'username': self.username, 'username': self.username,
'created_at': datetime_to_isoformat_timestr(self.created_at), 'created_at': datetime_to_isoformat_timestr(self.created_at),
} }

View File

@@ -1,6 +1,6 @@
from django.urls import re_path from django.urls import re_path
from .apis import SeadocAccessToken, SeadocUploadLink, SeadocDownloadLink, SeadocUploadFile, \ from .apis import SeadocAccessToken, SeadocUploadLink, SeadocDownloadLink, SeadocUploadFile, \
SeadocUploadImage, SeadocDownloadImage, SeadocCopyHistoryFile, SeadocHistory, SeadocMaskAsDraft SeadocUploadImage, SeadocDownloadImage, SeadocCopyHistoryFile, SeadocHistory, SeadocDrafts, SeadocMaskAsDraft
urlpatterns = [ urlpatterns = [
re_path(r'^access-token/(?P<repo_id>[-0-9a-f]{36})/$', SeadocAccessToken.as_view(), name='seadoc_access_token'), re_path(r'^access-token/(?P<repo_id>[-0-9a-f]{36})/$', SeadocAccessToken.as_view(), name='seadoc_access_token'),
@@ -11,5 +11,6 @@ urlpatterns = [
re_path(r'^download-image/(?P<file_uuid>[-0-9a-f]{36})/(?P<filename>.*)$', SeadocDownloadImage.as_view(), name='seadoc_download_image'), re_path(r'^download-image/(?P<file_uuid>[-0-9a-f]{36})/(?P<filename>.*)$', SeadocDownloadImage.as_view(), name='seadoc_download_image'),
re_path(r'^copy-history-file/(?P<repo_id>[-0-9a-f]{36})/$', SeadocCopyHistoryFile.as_view(), name='seadoc_copy_history_file'), re_path(r'^copy-history-file/(?P<repo_id>[-0-9a-f]{36})/$', SeadocCopyHistoryFile.as_view(), name='seadoc_copy_history_file'),
re_path(r'^history/(?P<file_uuid>[-0-9a-f]{36})/$', SeadocHistory.as_view(), name='seadoc_history'), re_path(r'^history/(?P<file_uuid>[-0-9a-f]{36})/$', SeadocHistory.as_view(), name='seadoc_history'),
re_path(r'^drafts/(?P<repo_id>[-0-9a-f]{36})/$', SeadocDrafts.as_view(), name='seadoc_drafts'),
re_path(r'^mask-as-draft/(?P<repo_id>[-0-9a-f]{36})/$', SeadocMaskAsDraft.as_view(), name='seadoc_mask_as_draft'), re_path(r'^mask-as-draft/(?P<repo_id>[-0-9a-f]{36})/$', SeadocMaskAsDraft.as_view(), name='seadoc_mask_as_draft'),
] ]

View File

@@ -1388,10 +1388,12 @@ CREATE TABLE `history_name` (
CREATE TABLE `sdoc_draft` ( CREATE TABLE `sdoc_draft` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`doc_uuid` char(36) NOT NULL, `doc_uuid` varchar(36) NOT NULL,
`repo_id` varchar(36) NOT NULL,
`username` varchar(255) NOT NULL, `username` varchar(255) NOT NULL,
`created_at` datetime NOT NULL, `created_at` datetime NOT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `sdoc_draft_doc_uuid` (`doc_uuid`), UNIQUE KEY `sdoc_draft_doc_uuid` (`doc_uuid`),
KEY `sdoc_draft_repo_id` (`repo_id`),
KEY `sdoc_draft_username` (`username`) KEY `sdoc_draft_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;