* feat: workspace user preference api * feat: remove sort order calculation * Return 404 error
74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
# Module imports
|
|
from ..base import BaseAPIView
|
|
from plane.db.models.workspace import WorkspaceUserPreference
|
|
from plane.app.serializers.workspace import WorkspaceUserPreferenceSerializer
|
|
from plane.app.permissions import allow_permission, ROLE
|
|
from plane.db.models import Workspace
|
|
|
|
|
|
# Third party imports
|
|
from rest_framework.response import Response
|
|
from rest_framework import status
|
|
|
|
|
|
class WorkspaceUserPreferenceViewSet(BaseAPIView):
|
|
model = WorkspaceUserPreference
|
|
|
|
def get_serializer_class(self):
|
|
return WorkspaceUserPreferenceSerializer
|
|
|
|
@allow_permission([ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST], level="WORKSPACE")
|
|
def get(self, request, slug):
|
|
workspace = Workspace.objects.get(slug=slug)
|
|
|
|
get_preference = WorkspaceUserPreference.objects.filter(
|
|
user=request.user, workspace_id=workspace.id
|
|
)
|
|
|
|
create_preference_keys = []
|
|
|
|
keys = [key for key, _ in WorkspaceUserPreference.UserPreferenceKeys.choices]
|
|
|
|
for preference in keys:
|
|
if preference not in get_preference.values_list("key", flat=True):
|
|
create_preference_keys.append(preference)
|
|
|
|
preference = WorkspaceUserPreference.objects.bulk_create(
|
|
[
|
|
WorkspaceUserPreference(
|
|
key=key, user=request.user, workspace=workspace
|
|
)
|
|
for key in create_preference_keys
|
|
],
|
|
batch_size=10,
|
|
ignore_conflicts=True,
|
|
)
|
|
|
|
preference = WorkspaceUserPreference.objects.filter(
|
|
user=request.user, workspace_id=workspace.id
|
|
)
|
|
|
|
return Response(
|
|
preference.values("key", "is_pinned", "sort_order"),
|
|
status=status.HTTP_200_OK,
|
|
)
|
|
|
|
@allow_permission([ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST], level="WORKSPACE")
|
|
def patch(self, request, slug, key):
|
|
preference = WorkspaceUserPreference.objects.filter(
|
|
key=key, workspace__slug=slug, user=request.user
|
|
).first()
|
|
|
|
if preference:
|
|
serializer = WorkspaceUserPreferenceSerializer(
|
|
preference, data=request.data, partial=True
|
|
)
|
|
|
|
if serializer.is_valid():
|
|
serializer.save()
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
return Response(
|
|
{"detail": "Preference not found"}, status=status.HTTP_404_NOT_FOUND
|
|
)
|