Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apiserver/plane/api/views/cycle.py
Original file line number Diff line number Diff line change
Expand Up @@ -761,7 +761,7 @@ def delete(self, request, slug, project_id, cycle_id, issue_id):
cycle_id=cycle_id,
)
issue_id = cycle_issue.issue_id
cycle_issue.delete()
cycle_issue.delete(soft=False)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Multiple Hard Deletes Detected Across the Codebase

The usage of delete(soft=False) is prevalent in several parts of the codebase, which may conflict with the PR's objective of implementing soft deletion for cycles and modules.

  • apiserver/plane/space/serializer/issue.py
  • apiserver/plane/app/views/module/base.py
  • apiserver/plane/app/views/project/base.py
  • apiserver/plane/app/views/module/issue.py
  • apiserver/plane/app/serializers/draft.py
  • apiserver/plane/app/serializers/issue.py
  • apiserver/plane/app/views/view/base.py
  • apiserver/plane/app/views/workspace/favorite.py
  • apiserver/plane/app/views/page/base.py
  • apiserver/plane/api/serializers/issue.py
  • apiserver/plane/app/views/issue/relation.py
  • apiserver/plane/app/views/cycle/base.py
  • apiserver/plane/app/views/cycle/issue.py
  • apiserver/plane/api/views/module.py
  • apiserver/plane/api/views/cycle.py

Please review these instances to ensure that hard deletions are intentional and align with the overall data management strategy. If soft deletions are preferred, consider refactoring these delete operations accordingly.

🔗 Analysis chain

Verify the intention of hard delete for cycle issues

The change cycle_issue.delete(soft=False) implements a hard delete for cycle issues. This seems to contradict the PR objective of implementing soft deletion for cycles and modules.

Could you please clarify if this is intentional? If not, consider changing it to cycle_issue.delete() for soft deletion or provide a rationale for using hard deletion in this specific case.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for other occurrences of hard delete in the codebase
rg "delete\(soft=False\)" --type py

Length of output: 2104

issue_activity.delay(
type="cycle.activity.deleted",
requested_data=json.dumps(
Expand Down
2 changes: 1 addition & 1 deletion apiserver/plane/api/views/issue.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ def get(self, request, slug, project_id, pk=None):
.annotate(
cycle_id=Case(
When(
Q(issue_cycle__cycle__deleted_at__isnull=True),
Q(issue_cycle__deleted_at__isnull=True),
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down
2 changes: 1 addition & 1 deletion apiserver/plane/api/views/module.py
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ def delete(self, request, slug, project_id, module_id, issue_id):
module_id=module_id,
issue_id=issue_id,
)
module_issue.delete()
module_issue.delete(soft=False)
issue_activity.delay(
type="module.activity.deleted",
requested_data=json.dumps(
Expand Down
6 changes: 3 additions & 3 deletions apiserver/plane/app/serializers/draft.py
Original file line number Diff line number Diff line change
Expand Up @@ -207,8 +207,8 @@ def update(self, instance, validated_data):
)

if cycle_id != "not_provided":
DraftIssueCycle.objects.filter(draft_issue=instance).delete()
if cycle_id is not None:
DraftIssueCycle.objects.filter(draft_issue=instance).delete(soft=False)
if cycle_id:
DraftIssueCycle.objects.create(
cycle_id=cycle_id,
draft_issue=instance,
Expand All @@ -219,7 +219,7 @@ def update(self, instance, validated_data):
)

if modules is not None:
DraftIssueModule.objects.filter(draft_issue=instance).delete()
DraftIssueModule.objects.filter(draft_issue=instance).delete(soft=False)
DraftIssueModule.objects.bulk_create(
[
DraftIssueModule(
Expand Down
4 changes: 2 additions & 2 deletions apiserver/plane/app/views/cycle/issue.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ def list(self, request, slug, project_id, cycle_id):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down Expand Up @@ -358,5 +358,5 @@ def destroy(self, request, slug, project_id, cycle_id, issue_id):
notification=True,
origin=request.META.get("HTTP_ORIGIN"),
)
cycle_issue.delete()
cycle_issue.delete(soft=False)
return Response(status=status.HTTP_204_NO_CONTENT)
4 changes: 2 additions & 2 deletions apiserver/plane/app/views/dashboard/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ def dashboard_assigned_issues(self, request, slug):
distinct=True,
filter=~Q(issue_module__module_id__isnull=True)
& Q(issue_module__module__archived_at__isnull=True)
& Q(issue_module__module__deleted_at__isnull=True),
& Q(issue_module__deleted_at__isnull=True),
),
Value([], output_field=ArrayField(UUIDField())),
),
Expand Down Expand Up @@ -409,7 +409,7 @@ def dashboard_created_issues(self, request, slug):
distinct=True,
filter=~Q(issue_module__module_id__isnull=True)
& Q(issue_module__module__archived_at__isnull=True)
& Q(issue_module__module__deleted_at__isnull=True),
& Q(issue_module__deleted_at__isnull=True),
),
Value([], output_field=ArrayField(UUIDField())),
),
Expand Down
8 changes: 5 additions & 3 deletions apiserver/plane/app/views/inbox/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ def get_queryset(self):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down Expand Up @@ -171,7 +171,7 @@ def get_queryset(self):
distinct=True,
filter=~Q(issue_module__module_id__isnull=True)
& Q(issue_module__module__archived_at__isnull=True)
& Q(issue_module__module__deleted_at__isnull=True),
& Q(issue_module__deleted_at__isnull=True),
),
Value([], output_field=ArrayField(UUIDField())),
),
Expand Down Expand Up @@ -323,7 +323,9 @@ def create(self, request, slug, project_id):
"issue__assignees__id",
distinct=True,
filter=~Q(issue__assignees__id__isnull=True)
& Q(issue__assignees__member_project__is_active=True),
& Q(
issue__assignees__member_project__is_active=True
),
),
Value([], output_field=ArrayField(UUIDField())),
),
Expand Down
2 changes: 1 addition & 1 deletion apiserver/plane/app/views/issue/archive.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ def get_queryset(self):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down
12 changes: 6 additions & 6 deletions apiserver/plane/app/views/issue/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ def get(self, request, slug, project_id):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down Expand Up @@ -220,7 +220,7 @@ def get_queryset(self):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down Expand Up @@ -511,7 +511,7 @@ def retrieve(self, request, slug, project_id, pk=None):
distinct=True,
filter=~Q(issue_module__module_id__isnull=True)
& Q(issue_module__module__archived_at__isnull=True)
& Q(issue_module__module__deleted_at__isnull=True),
& Q(issue_module__deleted_at__isnull=True),
),
Value([], output_field=ArrayField(UUIDField())),
),
Expand Down Expand Up @@ -612,7 +612,7 @@ def partial_update(self, request, slug, project_id, pk=None):
distinct=True,
filter=~Q(issue_module__module_id__isnull=True)
& Q(issue_module__module__archived_at__isnull=True)
& Q(issue_module__module__deleted_at__isnull=True),
& Q(issue_module__deleted_at__isnull=True),
),
Value([], output_field=ArrayField(UUIDField())),
),
Expand Down Expand Up @@ -778,7 +778,7 @@ def get_queryset(self):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down Expand Up @@ -912,7 +912,7 @@ def list(self, request, slug, project_id):
distinct=True,
filter=~Q(issue_module__module_id__isnull=True)
& Q(issue_module__module__archived_at__isnull=True)
& Q(issue_module__module__deleted_at__isnull=True),
& Q(issue_module__deleted_at__isnull=True),
),
Value([], output_field=ArrayField(UUIDField())),
),
Expand Down
2 changes: 1 addition & 1 deletion apiserver/plane/app/views/issue/relation.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def list(self, request, slug, project_id, issue_id):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down
4 changes: 2 additions & 2 deletions apiserver/plane/app/views/issue/sub_issue.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def get(self, request, slug, project_id, issue_id):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down Expand Up @@ -109,7 +109,7 @@ def get(self, request, slug, project_id, issue_id):
distinct=True,
filter=~Q(issue_module__module_id__isnull=True)
& Q(issue_module__module__archived_at__isnull=True)
& Q(issue_module__module__deleted_at__isnull=True),
& Q(issue_module__deleted_at__isnull=True),
),
Value([], output_field=ArrayField(UUIDField())),
),
Expand Down
6 changes: 3 additions & 3 deletions apiserver/plane/app/views/module/issue.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def get_queryset(self):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down Expand Up @@ -316,7 +316,7 @@ def create_issue_modules(self, request, slug, project_id, issue_id):
notification=True,
origin=request.META.get("HTTP_ORIGIN"),
)
module_issue.delete()
module_issue.delete(soft=False)

return Response({"message": "success"}, status=status.HTTP_201_CREATED)

Expand All @@ -341,5 +341,5 @@ def destroy(self, request, slug, project_id, module_id, issue_id):
notification=True,
origin=request.META.get("HTTP_ORIGIN"),
)
module_issue.delete()
module_issue.delete(soft=False)
return Response(status=status.HTTP_204_NO_CONTENT)
10 changes: 6 additions & 4 deletions apiserver/plane/app/views/view/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ def get_queryset(self):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down Expand Up @@ -266,7 +266,7 @@ def get_queryset(self):
distinct=True,
filter=~Q(issue_module__module_id__isnull=True)
& Q(issue_module__module__archived_at__isnull=True)
& Q(issue_module__module__deleted_at__isnull=True),
& Q(issue_module__deleted_at__isnull=True),
),
Value([], output_field=ArrayField(UUIDField())),
),
Expand All @@ -288,7 +288,7 @@ def list(self, request, slug):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down Expand Up @@ -552,7 +552,9 @@ def partial_update(self, request, slug, project_id, pk):
serializer.errors, status=status.HTTP_400_BAD_REQUEST
)

@allow_permission(allowed_roles=[ROLE.ADMIN], creator=True, model=IssueView)
@allow_permission(
allowed_roles=[ROLE.ADMIN], creator=True, model=IssueView
)
def destroy(self, request, slug, project_id, pk):
project_view = IssueView.objects.get(
pk=pk,
Expand Down
6 changes: 2 additions & 4 deletions apiserver/plane/app/views/workspace/draft.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def get_queryset(self):
.annotate(
cycle_id=Case(
When(
draft_issue_cycle__cycle__deleted_at__isnull=True,
draft_issue_cycle__deleted_at__isnull=True,
then=F("draft_issue_cycle__cycle_id"),
),
default=None,
Expand Down Expand Up @@ -95,9 +95,7 @@ def get_queryset(self):
& Q(
draft_issue_module__module__archived_at__isnull=True
)
& Q(
draft_issue_module__module__deleted_at__isnull=True
),
& Q(draft_issue_module__deleted_at__isnull=True),
),
Value([], output_field=ArrayField(UUIDField())),
),
Expand Down
2 changes: 1 addition & 1 deletion apiserver/plane/app/views/workspace/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ def get(self, request, slug, user_id):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down
1 change: 1 addition & 0 deletions apiserver/plane/db/models/issue.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ 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)
Expand Down
6 changes: 3 additions & 3 deletions apiserver/plane/space/views/issue.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ def get(self, request, anchor):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down Expand Up @@ -706,7 +706,7 @@ def get(self, request, anchor, issue_id):
.annotate(
cycle_id=Case(
When(
issue_cycle__cycle__deleted_at__isnull=True,
issue_cycle__deleted_at__isnull=True,
then=F("issue_cycle__cycle_id"),
),
default=None,
Expand Down Expand Up @@ -739,7 +739,7 @@ def get(self, request, anchor, issue_id):
distinct=True,
filter=~Q(issue_module__module_id__isnull=True)
& Q(issue_module__module__archived_at__isnull=True)
& Q(issue_module__module__deleted_at__isnull=True),
& Q(issue_module__deleted_at__isnull=True),
),
Value([], output_field=ArrayField(UUIDField())),
),
Expand Down
2 changes: 1 addition & 1 deletion apiserver/plane/utils/grouper.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def issue_queryset_grouper(queryset, group_by, sub_group_by):
(
~Q(issue_module__module_id__isnull=True)
& Q(issue_module__module__archived_at__isnull=True)
& Q(issue_module__module__deleted_at__isnull=True)
& Q(issue_module__deleted_at__isnull=True)
),
),
}
Expand Down