Compare commits

...

2 Commits

Author SHA1 Message Date
NarayanBavisetti
48fd08a563 chore: paginated the response 2024-12-23 15:39:09 +05:30
NarayanBavisetti
7528ab0556 chore: created crud endpoints for sticky 2024-12-23 14:45:06 +05:30
6 changed files with 92 additions and 0 deletions

View File

@@ -124,3 +124,5 @@ from .draft import (
DraftIssueSerializer,
DraftIssueDetailSerializer,
)
from .sticky import StickySerializer

View File

@@ -0,0 +1,16 @@
# Module imports
from .base import BaseSerializer
from plane.db.models import Sticky
class StickySerializer(BaseSerializer):
class Meta:
model = Sticky
fields = "__all__"
read_only_fields = ["workspace", "owner"]
extra_kwargs = {
'name': {'required': False},
}

View File

@@ -13,6 +13,7 @@ from .page import urlpatterns as page_urls
from .project import urlpatterns as project_urls
from .search import urlpatterns as search_urls
from .state import urlpatterns as state_urls
from .sticky import urlpatterns as sticky_urls
from .user import urlpatterns as user_urls
from .views import urlpatterns as view_urls
from .webhook import urlpatterns as webhook_urls
@@ -34,6 +35,7 @@ urlpatterns = [
*project_urls,
*search_urls,
*state_urls,
*sticky_urls,
*user_urls,
*view_urls,
*workspace_urls,

View File

@@ -0,0 +1,20 @@
from django.urls import path
from plane.app.views import StickyViewSet
urlpatterns = [
path(
"workspaces/<str:slug>/stickies/",
StickyViewSet.as_view({"get": "list", "post": "create"}),
name="workspace-sticky",
),
path(
"workspaces/<str:slug>/stickies/<uuid:pk>/",
StickyViewSet.as_view(
{"get": "retrieve", "patch": "partial_update", "delete": "destroy"}
),
name="workspace-sticky",
),
]

View File

@@ -57,6 +57,7 @@ from .workspace.invite import (
WorkspaceJoinEndpoint,
UserWorkspaceInvitationsViewSet,
)
from .workspace.sticky import StickyViewSet
from .workspace.label import WorkspaceLabelsEndpoint
from .workspace.state import WorkspaceStatesEndpoint
from .workspace.user import (

View File

@@ -0,0 +1,51 @@
# Third party imports
from rest_framework.response import Response
from rest_framework import status
# Module imports
from .. import BaseViewSet
from plane.app.permissions import WorkSpaceBasePermission, ROLE, allow_permission
from plane.db.models import Sticky, Workspace
from plane.app.serializers import StickySerializer
class StickyViewSet(BaseViewSet):
serializer_class = StickySerializer
model = Sticky
permission_classes = [WorkSpaceBasePermission]
def get_queryset(self):
return self.filter_queryset(
super()
.get_queryset()
.filter(workspace__slug=self.kwargs.get("slug"))
.filter(owner_id=self.request.user.id)
.select_related("workspace", "owner")
.distinct()
)
@allow_permission([ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST], level="WORKSPACE")
def create(self, request, slug):
workspace = Workspace.objects.get(slug=slug)
serializer = StickySerializer(data=request.data)
if serializer.is_valid():
serializer.save(workspace_id=workspace.id, owner_id=request.user.id)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def list(self, request, slug):
return self.paginate(
request=request,
queryset=(self.get_queryset()),
on_results=lambda stickies: StickySerializer(
stickies, many=True
).data,
)
@allow_permission([ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST], level="WORKSPACE")
def partial_update(self, request, *args, **kwargs):
return super().partial_update(request, *args, **kwargs)
@allow_permission([ROLE.ADMIN, ROLE.MEMBER], creator=True, level="WORKSPACE")
def destroy(self, request, *args, **kwargs):
return super().destroy(request, *args, **kwargs)