From f9ee898d88e8c4f5390db1640760fc9f9173a527 Mon Sep 17 00:00:00 2001 From: pablohashescobar <118773738+pablohashescobar@users.noreply.github.com> Date: Thu, 30 Mar 2023 18:59:39 +0530 Subject: [PATCH] chore: add workspace details and project details in page responses (#615) * chore: add workspace details and project details in page responses * fix: typo in workspace queryset --- apiserver/plane/api/serializers/__init__.py | 1 + apiserver/plane/api/serializers/issue.py | 1 + apiserver/plane/api/serializers/page.py | 2 + apiserver/plane/api/views/gpt.py | 18 ++++++- apiserver/plane/api/views/page.py | 54 ++++++++++++++++++++- 5 files changed, 74 insertions(+), 2 deletions(-) diff --git a/apiserver/plane/api/serializers/__init__.py b/apiserver/plane/api/serializers/__init__.py index bd34a668e..57bff15c2 100644 --- a/apiserver/plane/api/serializers/__init__.py +++ b/apiserver/plane/api/serializers/__init__.py @@ -10,6 +10,7 @@ from .workspace import ( WorkSpaceMemberSerializer, TeamSerializer, WorkSpaceMemberInviteSerializer, + WorkspaceLiteSerializer, ) from .project import ( ProjectSerializer, diff --git a/apiserver/plane/api/serializers/issue.py b/apiserver/plane/api/serializers/issue.py index 81db447f0..c5d53f838 100644 --- a/apiserver/plane/api/serializers/issue.py +++ b/apiserver/plane/api/serializers/issue.py @@ -482,6 +482,7 @@ class IssueSerializer(BaseSerializer): class IssueLiteSerializer(BaseSerializer): + workspace_detail = WorkspaceLiteSerializer(read_only=True, source="workspace") project_detail = ProjectLiteSerializer(read_only=True, source="project") state_detail = StateLiteSerializer(read_only=True, source="state") label_details = LabelLiteSerializer(read_only=True, source="labels", many=True) diff --git a/apiserver/plane/api/serializers/page.py b/apiserver/plane/api/serializers/page.py index f0c121cfb..1eafe8966 100644 --- a/apiserver/plane/api/serializers/page.py +++ b/apiserver/plane/api/serializers/page.py @@ -11,6 +11,8 @@ from plane.db.models import Page, PageBlock, PageFavorite, PageLabel, Label class PageBlockSerializer(BaseSerializer): issue_detail = IssueFlatSerializer(source="issue", read_only=True) + project_detail = ProjectLiteSerializer(source="project", read_only=True) + workspace_detail = WorkspaceLiteSerializer(source="workspace", read_only=True) class Meta: model = PageBlock diff --git a/apiserver/plane/api/views/gpt.py b/apiserver/plane/api/views/gpt.py index 6e31c89cb..a48bea242 100644 --- a/apiserver/plane/api/views/gpt.py +++ b/apiserver/plane/api/views/gpt.py @@ -13,6 +13,8 @@ from django.conf import settings # Module imports from .base import BaseAPIView from plane.api.permissions import ProjectEntityPermission +from plane.db.models import Workspace, Project +from plane.api.serializers import ProjectLiteSerializer, WorkspaceLiteSerializer class GPTIntegrationEndpoint(BaseAPIView): @@ -71,12 +73,26 @@ class GPTIntegrationEndpoint(BaseAPIView): max_tokens=1024, ) + workspace = Workspace.objects.get(slug=slug) + project = Project.objects.get(pk=project_id) + text = response.choices[0].text.strip() text_html = text.replace("\n", "
") return Response( - {"response": text, "response_html": text_html, "count": count}, + { + "response": text, + "response_html": text_html, + "count": count, + "project_detail": ProjectLiteSerializer(project).data, + "workspace_detail": WorkspaceLiteSerializer(workspace).data, + }, status=status.HTTP_200_OK, ) + except (Workspace.DoesNotExist, Project.DoesNotExist) as e: + return Response( + {"error": "Workspace or Project Does not exist"}, + status=status.HTTP_400_BAD_REQUEST, + ) except Exception as e: capture_exception(e) return Response( diff --git a/apiserver/plane/api/views/page.py b/apiserver/plane/api/views/page.py index 525229bf6..d13e903a1 100644 --- a/apiserver/plane/api/views/page.py +++ b/apiserver/plane/api/views/page.py @@ -64,7 +64,10 @@ class PageViewSet(BaseViewSet): .order_by("name", "-is_favorite") .prefetch_related( Prefetch( - "blocks", queryset=PageBlock.objects.select_related("page", "issue") + "blocks", + queryset=PageBlock.objects.select_related( + "page", "issue", "workspace", "project" + ), ) ) .distinct() @@ -223,6 +226,7 @@ class CreateIssueFromPageBlockEndpoint(BaseAPIView): verb="created", ) + page_block.issue = issue page_block.save() @@ -268,6 +272,14 @@ class RecentPagesEndpoint(BaseAPIView): .select_related("workspace") .select_related("owned_by") .prefetch_related("labels") + .prefetch_related( + Prefetch( + "blocks", + queryset=PageBlock.objects.select_related( + "page", "issue", "workspace", "project" + ), + ) + ) .order_by("-is_favorite", "-updated_by") ) @@ -284,6 +296,14 @@ class RecentPagesEndpoint(BaseAPIView): .select_related("workspace") .select_related("owned_by") .prefetch_related("labels") + .prefetch_related( + Prefetch( + "blocks", + queryset=PageBlock.objects.select_related( + "page", "issue", "workspace", "project" + ), + ) + ) .order_by("-is_favorite", "-updated_by") ) @@ -304,6 +324,14 @@ class RecentPagesEndpoint(BaseAPIView): .select_related("workspace") .select_related("owned_by") .prefetch_related("labels") + .prefetch_related( + Prefetch( + "blocks", + queryset=PageBlock.objects.select_related( + "page", "issue", "workspace", "project" + ), + ) + ) .order_by("-is_favorite", "-updated_by") ) todays_pages_serializer = PageSerializer(todays_pages, many=True) @@ -351,6 +379,14 @@ class FavoritePagesEndpoint(BaseAPIView): .select_related("workspace") .select_related("owned_by") .prefetch_related("labels") + .prefetch_related( + Prefetch( + "blocks", + queryset=PageBlock.objects.select_related( + "page", "issue", "workspace", "project" + ), + ) + ) .order_by("name", "-is_favorite") ) @@ -388,6 +424,14 @@ class MyPagesEndpoint(BaseAPIView): .annotate(is_favorite=Exists(subquery)) .filter(Q(owned_by=self.request.user) | Q(access=0)) .filter(project__project_projectmember__member=request.user) + .prefetch_related( + Prefetch( + "blocks", + queryset=PageBlock.objects.select_related( + "page", "issue", "workspace", "project" + ), + ) + ) .order_by("-is_favorite", "name") ) serializer = PageSerializer(pages, many=True) @@ -425,6 +469,14 @@ class CreatedbyOtherPagesEndpoint(BaseAPIView): .select_related("owned_by") .prefetch_related("labels") .annotate(is_favorite=Exists(subquery)) + .prefetch_related( + Prefetch( + "blocks", + queryset=PageBlock.objects.select_related( + "page", "issue", "workspace", "project" + ), + ) + ) .order_by("-is_favorite", "name") ) serializer = PageSerializer(pages, many=True)