diff --git a/apiserver/plane/app/views/issue/relation.py b/apiserver/plane/app/views/issue/relation.py index 35d88a54b14..529f31041c9 100644 --- a/apiserver/plane/app/views/issue/relation.py +++ b/apiserver/plane/app/views/issue/relation.py @@ -268,27 +268,20 @@ def create(self, request, slug, project_id, issue_id): ) def remove_relation(self, request, slug, project_id, issue_id): - relation_type = request.data.get("relation_type", None) related_issue = request.data.get("related_issue", None) - if relation_type in ["blocking", "start_after", "finish_after"]: - issue_relation = IssueRelation.objects.get( - workspace__slug=slug, - project_id=project_id, - issue_id=related_issue, - related_issue_id=issue_id, - ) - else: - issue_relation = IssueRelation.objects.get( - workspace__slug=slug, - project_id=project_id, - issue_id=issue_id, - related_issue_id=related_issue, - ) + issue_relations = IssueRelation.objects.filter( + workspace__slug=slug, + project_id=project_id, + ).filter( + Q(issue_id=related_issue, related_issue_id=issue_id) | + Q(issue_id=issue_id, related_issue_id=related_issue) + ) + issue_relations = issue_relations.first() current_instance = json.dumps( - IssueRelationSerializer(issue_relation).data, cls=DjangoJSONEncoder + IssueRelationSerializer(issue_relations).data, cls=DjangoJSONEncoder ) - issue_relation.delete() + issue_relations.delete() issue_activity.delay( type="issue_relation.activity.deleted", requested_data=json.dumps(request.data, cls=DjangoJSONEncoder), diff --git a/apiserver/plane/app/views/search/issue.py b/apiserver/plane/app/views/search/issue.py index 13fdc4effa0..3db9e1cba1e 100644 --- a/apiserver/plane/app/views/search/issue.py +++ b/apiserver/plane/app/views/search/issue.py @@ -1,5 +1,3 @@ -# Python imports - # Django imports from django.db.models import Q @@ -9,7 +7,7 @@ # Module imports from .base import BaseAPIView -from plane.db.models import Issue, ProjectMember +from plane.db.models import Issue, ProjectMember, IssueRelation from plane.utils.issue_search import search_issues @@ -47,17 +45,18 @@ def get(self, request, slug, project_id): ) if issue_relation == "true" and issue_id: issue = Issue.issue_objects.filter(pk=issue_id).first() + related_issue_ids = IssueRelation.objects.filter( + Q(related_issue=issue) | Q(issue=issue) + ).values_list( + "issue_id", "related_issue_id" + ).distinct() + + related_issue_ids = [item for sublist in related_issue_ids for item in sublist] + if issue: issues = issues.filter( ~Q(pk=issue_id), - ~( - Q(issue_related__issue=issue) - & Q(issue_related__deleted_at__isnull=True) - ), - ~( - Q(issue_relation__related_issue=issue) - & Q(issue_relation__deleted_at__isnull=True) - ), + ~Q(pk__in=related_issue_ids), ) if sub_issue == "true" and issue_id: issue = Issue.issue_objects.filter(pk=issue_id).first()