mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
chore: changed the structure of workspace, project, cycle, module and pages
This commit is contained in:
parent
9c91b07aa1
commit
9ad33a24c5
@ -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")
|
||||||
|
@ -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")
|
||||||
|
|
||||||
@ -281,44 +282,9 @@ 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 (
|
||||||
|
@ -153,6 +153,13 @@ class ModuleViewSet(WebhookMixin, BaseViewSet):
|
|||||||
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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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:
|
||||||
|
@ -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):
|
||||||
|
Loading…
Reference in New Issue
Block a user