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
This commit is contained in:
pablohashescobar 2023-03-30 18:59:39 +05:30 committed by GitHub
parent f79fdbf782
commit f9ee898d88
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 74 additions and 2 deletions

View File

@ -10,6 +10,7 @@ from .workspace import (
WorkSpaceMemberSerializer, WorkSpaceMemberSerializer,
TeamSerializer, TeamSerializer,
WorkSpaceMemberInviteSerializer, WorkSpaceMemberInviteSerializer,
WorkspaceLiteSerializer,
) )
from .project import ( from .project import (
ProjectSerializer, ProjectSerializer,

View File

@ -482,6 +482,7 @@ class IssueSerializer(BaseSerializer):
class IssueLiteSerializer(BaseSerializer): class IssueLiteSerializer(BaseSerializer):
workspace_detail = WorkspaceLiteSerializer(read_only=True, source="workspace")
project_detail = ProjectLiteSerializer(read_only=True, source="project") project_detail = ProjectLiteSerializer(read_only=True, source="project")
state_detail = StateLiteSerializer(read_only=True, source="state") state_detail = StateLiteSerializer(read_only=True, source="state")
label_details = LabelLiteSerializer(read_only=True, source="labels", many=True) label_details = LabelLiteSerializer(read_only=True, source="labels", many=True)

View File

@ -11,6 +11,8 @@ from plane.db.models import Page, PageBlock, PageFavorite, PageLabel, Label
class PageBlockSerializer(BaseSerializer): class PageBlockSerializer(BaseSerializer):
issue_detail = IssueFlatSerializer(source="issue", read_only=True) 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: class Meta:
model = PageBlock model = PageBlock

View File

@ -13,6 +13,8 @@ from django.conf import settings
# Module imports # Module imports
from .base import BaseAPIView from .base import BaseAPIView
from plane.api.permissions import ProjectEntityPermission from plane.api.permissions import ProjectEntityPermission
from plane.db.models import Workspace, Project
from plane.api.serializers import ProjectLiteSerializer, WorkspaceLiteSerializer
class GPTIntegrationEndpoint(BaseAPIView): class GPTIntegrationEndpoint(BaseAPIView):
@ -71,12 +73,26 @@ class GPTIntegrationEndpoint(BaseAPIView):
max_tokens=1024, max_tokens=1024,
) )
workspace = Workspace.objects.get(slug=slug)
project = Project.objects.get(pk=project_id)
text = response.choices[0].text.strip() text = response.choices[0].text.strip()
text_html = text.replace("\n", "<br/>") text_html = text.replace("\n", "<br/>")
return Response( 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, 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: except Exception as e:
capture_exception(e) capture_exception(e)
return Response( return Response(

View File

@ -64,7 +64,10 @@ class PageViewSet(BaseViewSet):
.order_by("name", "-is_favorite") .order_by("name", "-is_favorite")
.prefetch_related( .prefetch_related(
Prefetch( Prefetch(
"blocks", queryset=PageBlock.objects.select_related("page", "issue") "blocks",
queryset=PageBlock.objects.select_related(
"page", "issue", "workspace", "project"
),
) )
) )
.distinct() .distinct()
@ -223,6 +226,7 @@ class CreateIssueFromPageBlockEndpoint(BaseAPIView):
verb="created", verb="created",
) )
page_block.issue = issue page_block.issue = issue
page_block.save() page_block.save()
@ -268,6 +272,14 @@ class RecentPagesEndpoint(BaseAPIView):
.select_related("workspace") .select_related("workspace")
.select_related("owned_by") .select_related("owned_by")
.prefetch_related("labels") .prefetch_related("labels")
.prefetch_related(
Prefetch(
"blocks",
queryset=PageBlock.objects.select_related(
"page", "issue", "workspace", "project"
),
)
)
.order_by("-is_favorite", "-updated_by") .order_by("-is_favorite", "-updated_by")
) )
@ -284,6 +296,14 @@ class RecentPagesEndpoint(BaseAPIView):
.select_related("workspace") .select_related("workspace")
.select_related("owned_by") .select_related("owned_by")
.prefetch_related("labels") .prefetch_related("labels")
.prefetch_related(
Prefetch(
"blocks",
queryset=PageBlock.objects.select_related(
"page", "issue", "workspace", "project"
),
)
)
.order_by("-is_favorite", "-updated_by") .order_by("-is_favorite", "-updated_by")
) )
@ -304,6 +324,14 @@ class RecentPagesEndpoint(BaseAPIView):
.select_related("workspace") .select_related("workspace")
.select_related("owned_by") .select_related("owned_by")
.prefetch_related("labels") .prefetch_related("labels")
.prefetch_related(
Prefetch(
"blocks",
queryset=PageBlock.objects.select_related(
"page", "issue", "workspace", "project"
),
)
)
.order_by("-is_favorite", "-updated_by") .order_by("-is_favorite", "-updated_by")
) )
todays_pages_serializer = PageSerializer(todays_pages, many=True) todays_pages_serializer = PageSerializer(todays_pages, many=True)
@ -351,6 +379,14 @@ class FavoritePagesEndpoint(BaseAPIView):
.select_related("workspace") .select_related("workspace")
.select_related("owned_by") .select_related("owned_by")
.prefetch_related("labels") .prefetch_related("labels")
.prefetch_related(
Prefetch(
"blocks",
queryset=PageBlock.objects.select_related(
"page", "issue", "workspace", "project"
),
)
)
.order_by("name", "-is_favorite") .order_by("name", "-is_favorite")
) )
@ -388,6 +424,14 @@ class MyPagesEndpoint(BaseAPIView):
.annotate(is_favorite=Exists(subquery)) .annotate(is_favorite=Exists(subquery))
.filter(Q(owned_by=self.request.user) | Q(access=0)) .filter(Q(owned_by=self.request.user) | Q(access=0))
.filter(project__project_projectmember__member=request.user) .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") .order_by("-is_favorite", "name")
) )
serializer = PageSerializer(pages, many=True) serializer = PageSerializer(pages, many=True)
@ -425,6 +469,14 @@ class CreatedbyOtherPagesEndpoint(BaseAPIView):
.select_related("owned_by") .select_related("owned_by")
.prefetch_related("labels") .prefetch_related("labels")
.annotate(is_favorite=Exists(subquery)) .annotate(is_favorite=Exists(subquery))
.prefetch_related(
Prefetch(
"blocks",
queryset=PageBlock.objects.select_related(
"page", "issue", "workspace", "project"
),
)
)
.order_by("-is_favorite", "name") .order_by("-is_favorite", "name")
) )
serializer = PageSerializer(pages, many=True) serializer = PageSerializer(pages, many=True)