From 75a27839f5a6e5aa35249cd87b616872ddc91881 Mon Sep 17 00:00:00 2001 From: NarayanBavisetti Date: Wed, 16 Oct 2024 15:13:59 +0530 Subject: [PATCH] chore: updated queryset for soft delete --- apiserver/plane/api/serializers/issue.py | 4 ++-- apiserver/plane/app/serializers/draft.py | 8 ++++++-- apiserver/plane/app/serializers/issue.py | 4 ++-- apiserver/plane/db/mixins.py | 12 +++++++++++- apiserver/plane/db/models/issue.py | 5 ++--- apiserver/plane/space/serializer/issue.py | 4 ++-- 6 files changed, 25 insertions(+), 12 deletions(-) diff --git a/apiserver/plane/api/serializers/issue.py b/apiserver/plane/api/serializers/issue.py index 90515733954..c4a131fd746 100644 --- a/apiserver/plane/api/serializers/issue.py +++ b/apiserver/plane/api/serializers/issue.py @@ -212,7 +212,7 @@ def update(self, instance, validated_data): updated_by_id = instance.updated_by_id if assignees is not None: - IssueAssignee.objects.filter(issue=instance).delete() + IssueAssignee.objects.filter(issue=instance).delete(soft=False) IssueAssignee.objects.bulk_create( [ IssueAssignee( @@ -229,7 +229,7 @@ def update(self, instance, validated_data): ) if labels is not None: - IssueLabel.objects.filter(issue=instance).delete() + IssueLabel.objects.filter(issue=instance).delete(soft=False) IssueLabel.objects.bulk_create( [ IssueLabel( diff --git a/apiserver/plane/app/serializers/draft.py b/apiserver/plane/app/serializers/draft.py index 10929e453de..fca695c9872 100644 --- a/apiserver/plane/app/serializers/draft.py +++ b/apiserver/plane/app/serializers/draft.py @@ -169,7 +169,9 @@ def update(self, instance, validated_data): updated_by_id = instance.updated_by_id if assignees is not None: - DraftIssueAssignee.objects.filter(draft_issue=instance).delete() + DraftIssueAssignee.objects.filter(draft_issue=instance).delete( + soft=False + ) DraftIssueAssignee.objects.bulk_create( [ DraftIssueAssignee( @@ -186,7 +188,9 @@ def update(self, instance, validated_data): ) if labels is not None: - DraftIssueLabel.objects.filter(draft_issue=instance).delete() + DraftIssueLabel.objects.filter(draft_issue=instance).delete( + soft=False + ) DraftIssueLabel.objects.bulk_create( [ DraftIssueLabel( diff --git a/apiserver/plane/app/serializers/issue.py b/apiserver/plane/app/serializers/issue.py index 2323c248a86..22d9dc483df 100644 --- a/apiserver/plane/app/serializers/issue.py +++ b/apiserver/plane/app/serializers/issue.py @@ -201,7 +201,7 @@ def update(self, instance, validated_data): updated_by_id = instance.updated_by_id if assignees is not None: - IssueAssignee.objects.filter(issue=instance).delete() + IssueAssignee.objects.filter(issue=instance).delete(soft=False) IssueAssignee.objects.bulk_create( [ IssueAssignee( @@ -218,7 +218,7 @@ def update(self, instance, validated_data): ) if labels is not None: - IssueLabel.objects.filter(issue=instance).delete() + IssueLabel.objects.filter(issue=instance).delete(soft=False) IssueLabel.objects.bulk_create( [ IssueLabel( diff --git a/apiserver/plane/db/mixins.py b/apiserver/plane/db/mixins.py index 0203eb8ce80..4d4cee978e5 100644 --- a/apiserver/plane/db/mixins.py +++ b/apiserver/plane/db/mixins.py @@ -43,9 +43,19 @@ class Meta: abstract = True +class SoftDeletionQuerySet(models.QuerySet): + def delete(self, soft=True): + if soft: + return self.update(deleted_at=timezone.now()) + else: + return super().delete() + + class SoftDeletionManager(models.Manager): def get_queryset(self): - return super().get_queryset().filter(deleted_at__isnull=True) + return SoftDeletionQuerySet(self.model, using=self._db).filter( + deleted_at__isnull=True + ) class SoftDeleteModel(models.Model): diff --git a/apiserver/plane/db/models/issue.py b/apiserver/plane/db/models/issue.py index cafa732c52e..7ff9af46e9b 100644 --- a/apiserver/plane/db/models/issue.py +++ b/apiserver/plane/db/models/issue.py @@ -12,6 +12,7 @@ # Module imports from plane.utils.html_processor import strip_tags +from plane.db.mixins import SoftDeletionManager from .project import ProjectBaseModel @@ -79,7 +80,7 @@ def get_default_display_properties(): # TODO: Handle identifiers for Bulk Inserts - nk -class IssueManager(models.Manager): +class IssueManager(SoftDeletionManager): def get_queryset(self): return ( super() @@ -90,7 +91,6 @@ def get_queryset(self): | models.Q(issue_inbox__status=2) | models.Q(issue_inbox__isnull=True) ) - .filter(deleted_at__isnull=True) .filter(state__is_triage=False) .exclude(archived_at__isnull=False) .exclude(project__archived_at__isnull=False) @@ -172,7 +172,6 @@ class Issue(ProjectBaseModel): blank=True, ) - objects = models.Manager() issue_objects = IssueManager() class Meta: diff --git a/apiserver/plane/space/serializer/issue.py b/apiserver/plane/space/serializer/issue.py index d7447681f60..cf628e85035 100644 --- a/apiserver/plane/space/serializer/issue.py +++ b/apiserver/plane/space/serializer/issue.py @@ -421,7 +421,7 @@ def update(self, instance, validated_data): updated_by_id = instance.updated_by_id if assignees is not None: - IssueAssignee.objects.filter(issue=instance).delete() + IssueAssignee.objects.filter(issue=instance).delete(soft=False) IssueAssignee.objects.bulk_create( [ IssueAssignee( @@ -438,7 +438,7 @@ def update(self, instance, validated_data): ) if labels is not None: - IssueLabel.objects.filter(issue=instance).delete() + IssueLabel.objects.filter(issue=instance).delete(soft=False) IssueLabel.objects.bulk_create( [ IssueLabel(