* chore: user store code refactor * chore: general unauthorized screen asset added * chore: workspace setting sidebar options updated for guest and viewer * chore: NotAuthorizedView component code updated * chore: project setting layout code refactor * chore: workspace setting members and exports page permission validation added * chore: workspace members and exports settings page improvement * chore: project invite modal updated * chore: workspace setting unauthorized access empty state * chore: workspace setting unauthorized access empty state * chore: project settings sidebar permission updated * fix: project settings user role permission updated * chore: app sidebar role permission validation updated * chore: app sidebar role permission validation * chore: disabled page empty state validation * chore: app sidebar add project improvement * chore: guest role changes * fix: user favorite * chore: changed pages permission * chore: guest role changes * fix: app sidebar project item permission * fix: project setting empty state flicker * fix: workspace setting empty state flicker * chore: granted notification permission to viewer * chore: project invite and edit validation updated * chore: favorite validation added for guest and viewer role * chore: create view validation updated * chore: views permission changes * chore: create view empty state validation updated * chore: created ENUM for permissions --------- Co-authored-by: NarayanBavisetti <narayan3119@gmail.com> Co-authored-by: Bavisetti Narayan <72156168+NarayanBavisetti@users.noreply.github.com>
102 lines
3.4 KiB
Python
102 lines
3.4 KiB
Python
# Python imports
|
|
|
|
# Django imports
|
|
from django.db.models import Q
|
|
|
|
# Third party imports
|
|
from rest_framework import status
|
|
from rest_framework.response import Response
|
|
|
|
# Module imports
|
|
from .base import BaseAPIView
|
|
from plane.db.models import Issue, ProjectMember
|
|
from plane.utils.issue_search import search_issues
|
|
|
|
|
|
class IssueSearchEndpoint(BaseAPIView):
|
|
def get(self, request, slug, project_id):
|
|
query = request.query_params.get("search", False)
|
|
workspace_search = request.query_params.get(
|
|
"workspace_search", "false"
|
|
)
|
|
parent = request.query_params.get("parent", "false")
|
|
issue_relation = request.query_params.get("issue_relation", "false")
|
|
cycle = request.query_params.get("cycle", "false")
|
|
module = request.query_params.get("module", False)
|
|
sub_issue = request.query_params.get("sub_issue", "false")
|
|
target_date = request.query_params.get("target_date", True)
|
|
|
|
issue_id = request.query_params.get("issue_id", False)
|
|
|
|
issues = Issue.issue_objects.filter(
|
|
workspace__slug=slug,
|
|
project__project_projectmember__member=self.request.user,
|
|
project__project_projectmember__is_active=True,
|
|
project__archived_at__isnull=True,
|
|
)
|
|
|
|
if workspace_search == "false":
|
|
issues = issues.filter(project_id=project_id)
|
|
|
|
if query:
|
|
issues = search_issues(query, issues)
|
|
|
|
if parent == "true" and issue_id:
|
|
issue = Issue.issue_objects.get(pk=issue_id)
|
|
issues = issues.filter(
|
|
~Q(pk=issue_id), ~Q(pk=issue.parent_id), ~Q(parent_id=issue_id)
|
|
)
|
|
if issue_relation == "true" and issue_id:
|
|
issue = Issue.issue_objects.get(pk=issue_id)
|
|
issues = issues.filter(
|
|
~Q(pk=issue_id),
|
|
~Q(
|
|
issue_related__issue=issue,
|
|
issue_related__deleted_at__isnull=True,
|
|
),
|
|
~Q(
|
|
issue_relation__related_issue=issue,
|
|
issue_related__deleted_at__isnull=True,
|
|
),
|
|
)
|
|
if sub_issue == "true" and issue_id:
|
|
issue = Issue.issue_objects.get(pk=issue_id)
|
|
issues = issues.filter(~Q(pk=issue_id), parent__isnull=True)
|
|
if issue.parent:
|
|
issues = issues.filter(~Q(pk=issue.parent_id))
|
|
|
|
if cycle == "true":
|
|
issues = issues.exclude(issue_cycle__isnull=False)
|
|
|
|
if module:
|
|
issues = issues.exclude(issue_module__module=module)
|
|
|
|
if target_date == "none":
|
|
issues = issues.filter(target_date__isnull=True)
|
|
|
|
if ProjectMember.objects.filter(
|
|
project_id=project_id,
|
|
member=self.request.user,
|
|
is_active=True,
|
|
role=5
|
|
).exists():
|
|
issues = issues.filter(
|
|
created_by=self.request.user
|
|
)
|
|
|
|
return Response(
|
|
issues.values(
|
|
"name",
|
|
"id",
|
|
"start_date",
|
|
"sequence_id",
|
|
"project__name",
|
|
"project__identifier",
|
|
"project_id",
|
|
"workspace__slug",
|
|
"state__name",
|
|
"state__group",
|
|
"state__color",
|
|
),
|
|
status=status.HTTP_200_OK,
|
|
)
|