From 7ec21042717585831bede7e1b5b4caf20f0c426e Mon Sep 17 00:00:00 2001 From: NarayanBavisetti Date: Thu, 16 Nov 2023 18:34:11 +0530 Subject: [PATCH] fix: pages bugs --- apiserver/plane/api/views/page.py | 65 ++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 19 deletions(-) diff --git a/apiserver/plane/api/views/page.py b/apiserver/plane/api/views/page.py index d8c90fc8f..2ee4a03d9 100644 --- a/apiserver/plane/api/views/page.py +++ b/apiserver/plane/api/views/page.py @@ -87,15 +87,10 @@ class PageViewSet(BaseViewSet): .annotate(is_favorite=Exists(subquery)) .order_by(self.request.GET.get("order_by", "-created_at")) .prefetch_related("labels") - .order_by("-is_favorite","-created_at") + .order_by("-is_favorite", "-created_at") .distinct() ) - def perform_create(self, serializer): - serializer.save( - project_id=self.kwargs.get("project_id"), owned_by=self.request.user - ) - def create(self, request, slug, project_id): serializer = PageSerializer( data=request.data, @@ -148,10 +143,8 @@ class PageViewSet(BaseViewSet): status=status.HTTP_400_BAD_REQUEST, ) - def lock(self, request, slug, project_id, pk): - page = Page.objects.filter( - pk=pk, workspace__slug=slug, project_id=project_id - ) + def lock(self, request, slug, project_id, page_id): + page = Page.objects.get(pk=page_id, workspace__slug=slug, project_id=project_id) # only the owner can lock the page if request.user.id != page.owned_by_id: @@ -163,8 +156,8 @@ class PageViewSet(BaseViewSet): page.save() return Response(status=status.HTTP_204_NO_CONTENT) - def unlock(self, request, slug, project_id, pk): - page = Page.objects.get(pk=pk, workspace__slug=slug, project_id=project_id) + def unlock(self, request, slug, project_id, page_id): + page = Page.objects.get(pk=page_id, workspace__slug=slug, project_id=project_id) # only the owner can unlock the page if request.user.id != page.owned_by_id: @@ -242,11 +235,46 @@ class PageViewSet(BaseViewSet): ) def archive(self, request, slug, project_id, page_id): - _ = Page.objects.get( - project_id=project_id, - owned_by_id=request.user.id, - workspace__slug=slug, - pk=page_id, + page = Page.objects.get(pk=page_id, workspace__slug=slug, project_id=project_id) + + if page.owned_by_id != request.user.id: + return Response( + {"error": "Only the owner of the page can archive a page"}, + status=status.HTTP_204_NO_CONTENT, + ) + + unarchive_archive_page_and_descendants(page_id, datetime.now()) + + return Response(status=status.HTTP_400_BAD_REQUEST) + + def unarchive(self, request, slug, project_id, page_id): + page = Page.objects.get(pk=page_id, workspace__slug=slug, project_id=project_id) + + if page.owned_by_id != request.user.id: + return Response( + {"error": "Only the owner of the page can unarchive a page"}, + status=status.HTTP_400_BAD_REQUEST, + ) + + page.parent = None + page.save() + + unarchive_archive_page_and_descendants(page_id, None) + + return Response(status=status.HTTP_204_NO_CONTENT) + + def archive_list(self, request, slug, project_id): + pages = ( + Page.objects.filter( + project_id=project_id, + workspace__slug=slug, + ) + .filter(archived_at__isnull=False) + .filter(parent_id__isnull=True) + ) + + return Response( + PageSerializer(pages, many=True).data, status=status.HTTP_200_OK ) unarchive_archive_page_and_descendants(page_id, datetime.now()) @@ -416,5 +444,4 @@ class SubPagesEndpoint(BaseAPIView): ) return Response( SubPageSerializer(pages, many=True).data, status=status.HTTP_200_OK - ) - + ) \ No newline at end of file