chore: changed the structure of workspace, project, cycle, module and pages

This commit is contained in:
NarayanBavisetti 2023-12-12 19:05:22 +05:30
parent 9c91b07aa1
commit 9ad33a24c5
6 changed files with 36 additions and 56 deletions

View File

@ -2,7 +2,7 @@
from rest_framework import serializers from rest_framework import serializers
# Module imports # Module imports
from .base import BaseSerializer from .base import BaseSerializer, DynamicBaseSerializer
from .user import UserLiteSerializer from .user import UserLiteSerializer
from .project import ProjectLiteSerializer from .project import ProjectLiteSerializer
from .workspace import WorkspaceLiteSerializer from .workspace import WorkspaceLiteSerializer
@ -159,7 +159,7 @@ class ModuleLinkSerializer(BaseSerializer):
return ModuleLink.objects.create(**validated_data) return ModuleLink.objects.create(**validated_data)
class ModuleSerializer(BaseSerializer): class ModuleSerializer(DynamicBaseSerializer):
project_detail = ProjectLiteSerializer(read_only=True, source="project") project_detail = ProjectLiteSerializer(read_only=True, source="project")
lead_detail = UserLiteSerializer(read_only=True, source="lead") lead_detail = UserLiteSerializer(read_only=True, source="lead")
members_detail = UserLiteSerializer(read_only=True, many=True, source="members") members_detail = UserLiteSerializer(read_only=True, many=True, source="members")

View File

@ -176,6 +176,7 @@ class CycleViewSet(WebhookMixin, BaseViewSet):
def list(self, request, slug, project_id): def list(self, request, slug, project_id):
queryset = self.get_queryset() queryset = self.get_queryset()
cycle_view = request.GET.get("cycle_view", "all") cycle_view = request.GET.get("cycle_view", "all")
fields = [field for field in request.GET.get("fields", "").split(",") if field]
queryset = queryset.order_by("-is_favorite","-created_at") queryset = queryset.order_by("-is_favorite","-created_at")
@ -280,45 +281,10 @@ class CycleViewSet(WebhookMixin, BaseViewSet):
) )
return Response(data, status=status.HTTP_200_OK) return Response(data, status=status.HTTP_200_OK)
# Upcoming Cycles cycles = CycleSerializer(queryset, many=True, fields=fields if fields else None).data
if cycle_view == "upcoming": cycle_dict = {str(cycle["id"]): cycle for cycle in cycles}
queryset = queryset.filter(start_date__gt=timezone.now()) return Response(cycle_dict, status=status.HTTP_200_OK)
return Response(
CycleSerializer(queryset, many=True).data, status=status.HTTP_200_OK
)
# Completed Cycles
if cycle_view == "completed":
queryset = queryset.filter(end_date__lt=timezone.now())
return Response(
CycleSerializer(queryset, many=True).data, status=status.HTTP_200_OK
)
# Draft Cycles
if cycle_view == "draft":
queryset = queryset.filter(
end_date=None,
start_date=None,
)
return Response(
CycleSerializer(queryset, many=True).data, status=status.HTTP_200_OK
)
# Incomplete Cycles
if cycle_view == "incomplete":
queryset = queryset.filter(
Q(end_date__gte=timezone.now().date()) | Q(end_date__isnull=True),
)
return Response(
CycleSerializer(queryset, many=True).data, status=status.HTTP_200_OK
)
# If no matching view is found return all cycles
return Response(
CycleSerializer(queryset, many=True).data, status=status.HTTP_200_OK
)
def create(self, request, slug, project_id): def create(self, request, slug, project_id):
if ( if (

View File

@ -152,6 +152,13 @@ class ModuleViewSet(WebhookMixin, BaseViewSet):
serializer = ModuleSerializer(module) serializer = ModuleSerializer(module)
return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def list(self, request, slug, project_id):
queryset = self.get_queryset()
fields = [field for field in request.GET.get("fields", "").split(",") if field]
modules = ModuleSerializer(queryset, many=True, fields=fields if fields else None).data
modules_dict = {str(module["id"]): module for module in modules}
return Response(modules_dict, status=status.HTTP_200_OK)
def retrieve(self, request, slug, project_id, pk): def retrieve(self, request, slug, project_id, pk):
queryset = self.get_queryset().get(pk=pk) queryset = self.get_queryset().get(pk=pk)

View File

@ -157,9 +157,10 @@ class PageViewSet(BaseViewSet):
def list(self, request, slug, project_id): def list(self, request, slug, project_id):
queryset = self.get_queryset().filter(archived_at__isnull=True) queryset = self.get_queryset().filter(archived_at__isnull=True)
return Response( fields = [field for field in request.GET.get("fields", "").split(",") if field]
PageSerializer(queryset, many=True).data, status=status.HTTP_200_OK pages = PageSerializer(queryset, many=True, fields=fields if fields else None).data
) pages_dict = {str(page["id"]): page for page in pages}
return Response(pages_dict, status=status.HTTP_200_OK)
def archive(self, request, slug, project_id, page_id): def archive(self, request, slug, project_id, page_id):
page = Page.objects.get(pk=page_id, workspace__slug=slug, project_id=project_id) page = Page.objects.get(pk=page_id, workspace__slug=slug, project_id=project_id)
@ -205,14 +206,16 @@ class PageViewSet(BaseViewSet):
return Response(status=status.HTTP_204_NO_CONTENT) return Response(status=status.HTTP_204_NO_CONTENT)
def archive_list(self, request, slug, project_id): def archive_list(self, request, slug, project_id):
fields = [field for field in request.GET.get("fields", "").split(",") if field]
pages = Page.objects.filter( pages = Page.objects.filter(
project_id=project_id, project_id=project_id,
workspace__slug=slug, workspace__slug=slug,
).filter(archived_at__isnull=False) ).filter(archived_at__isnull=False)
return Response( pages = PageSerializer(pages, many=True, fields=fields if fields else None).data
PageSerializer(pages, many=True).data, status=status.HTTP_200_OK pages_dict = {str(page["id"]): page for page in pages}
) return Response(pages_dict, status=status.HTTP_200_OK)
def destroy(self, request, slug, project_id, pk): def destroy(self, request, slug, project_id, pk):
page = Page.objects.get(pk=pk, workspace__slug=slug, project_id=project_id) page = Page.objects.get(pk=pk, workspace__slug=slug, project_id=project_id)

View File

@ -179,12 +179,10 @@ class ProjectViewSet(WebhookMixin, BaseViewSet):
projects, many=True projects, many=True
).data, ).data,
) )
projects = ProjectListSerializer(projects, many=True, fields=fields if fields else None).data
project_dict = {str(project["id"]): project for project in projects}
return Response(project_dict, status=status.HTTP_200_OK)
return Response(
ProjectListSerializer(
projects, many=True, fields=fields if fields else None
).data
)
def create(self, request, slug): def create(self, request, slug):
try: try:

View File

@ -75,6 +75,7 @@ from plane.bgtasks.workspace_invitation_task import workspace_invitation
from plane.utils.issue_filters import issue_filters from plane.utils.issue_filters import issue_filters
from plane.bgtasks.event_tracking_task import workspace_invite_event from plane.bgtasks.event_tracking_task import workspace_invite_event
class WorkSpaceViewSet(BaseViewSet): class WorkSpaceViewSet(BaseViewSet):
model = Workspace model = Workspace
serializer_class = WorkSpaceSerializer serializer_class = WorkSpaceSerializer
@ -172,6 +173,7 @@ class UserWorkSpacesEndpoint(BaseAPIView):
] ]
def get(self, request): def get(self, request):
fields = [field for field in request.GET.get("fields", "").split(",") if field]
member_count = ( member_count = (
WorkspaceMember.objects.filter( WorkspaceMember.objects.filter(
workspace=OuterRef("id"), workspace=OuterRef("id"),
@ -207,9 +209,13 @@ class UserWorkSpacesEndpoint(BaseAPIView):
) )
.distinct() .distinct()
) )
workspaces = WorkSpaceSerializer(
serializer = WorkSpaceSerializer(self.filter_queryset(workspace), many=True) self.filter_queryset(workspace),
return Response(serializer.data, status=status.HTTP_200_OK) fields=fields if fields else None,
many=True,
).data
workspace_dict = {str(workspaces["id"]): workspaces for workspace in workspaces}
return Response(workspace_dict, status=status.HTTP_200_OK)
class WorkSpaceAvailabilityCheckEndpoint(BaseAPIView): class WorkSpaceAvailabilityCheckEndpoint(BaseAPIView):
@ -406,7 +412,7 @@ class WorkspaceJoinEndpoint(BaseAPIView):
# Delete the invitation # Delete the invitation
workspace_invite.delete() workspace_invite.delete()
# Send event # Send event
workspace_invite_event.delay( workspace_invite_event.delay(
user=user.id if user is not None else None, user=user.id if user is not None else None,