From 4250f2728326ecdfd7d939995284afc3355c8110 Mon Sep 17 00:00:00 2001 From: NarayanBavisetti Date: Tue, 13 Aug 2024 19:14:48 +0530 Subject: [PATCH] chore: soft delete pages --- apiserver/plane/api/views/project.py | 17 ++++++++++++++ apiserver/plane/app/views/project/base.py | 28 +++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/apiserver/plane/api/views/project.py b/apiserver/plane/api/views/project.py index 2f8dddd6d0..2bd6d2ec9f 100644 --- a/apiserver/plane/api/views/project.py +++ b/apiserver/plane/api/views/project.py @@ -27,6 +27,8 @@ from plane.db.models import ( State, Workspace, UserFavorite, + ProjectPage, + Page, ) from plane.bgtasks.webhook_task import model_activity from .base import BaseAPIView @@ -363,6 +365,21 @@ class ProjectAPIEndpoint(BaseAPIView): entity_identifier=pk, project_id=pk, ).delete() + project = Project.objects.get(pk=pk) + # Delete the project deploy board + DeployBoard.objects.filter( + project_id=pk, + workspace__slug=slug, + ).delete() + # TODO: Delete the pages by recursive calls in the soft delete + # get all the project page ids to delete the project pages + project_pages = ProjectPage.objects.filter( + project_id=pk, + workspace__slug=slug, + ).values_list("page_id", flat=True) + Page.objects.filter(id__in=project_pages).update( + deleted_at=timezone.now() + ) project.delete() return Response(status=status.HTTP_204_NO_CONTENT) diff --git a/apiserver/plane/app/views/project/base.py b/apiserver/plane/app/views/project/base.py index 22181dacff..a0cae06945 100644 --- a/apiserver/plane/app/views/project/base.py +++ b/apiserver/plane/app/views/project/base.py @@ -47,6 +47,8 @@ from plane.db.models import ( ProjectMember, State, Workspace, + ProjectPage, + Page ) from plane.utils.cache import cache_response from plane.bgtasks.webhook_task import model_activity @@ -456,6 +458,32 @@ class ProjectViewSet(BaseViewSet): status=status.HTTP_410_GONE, ) + def destroy(self, request, slug, pk): + project = Project.objects.get(pk=pk) + # Delete the project deploy board + DeployBoard.objects.filter( + project_id=pk, + workspace__slug=slug, + ).delete() + + # Delete the user favorite + UserFavorite.objects.filter( + project_id=pk, + workspace__slug=slug, + ).delete() + # TODO: Delete the pages by recursive calls in the soft delete + # get all the project page ids to delete the project pages + project_pages = ProjectPage.objects.filter( + project_id=pk, + workspace__slug=slug, + ).values_list("page_id", flat=True) + Page.objects.filter(id__in=project_pages).update( + deleted_at=timezone.now() + ) + project.delete() + + return Response(status=status.HTTP_204_NO_CONTENT) + class ProjectArchiveUnarchiveEndpoint(BaseAPIView):