|
| 1 | +from django.db.models import Q |
| 2 | +from drf_yasg.utils import swagger_auto_schema |
| 3 | +from rest_framework import permissions, viewsets |
| 4 | + |
| 5 | +from kanban.models import Board |
| 6 | +from kanban.serializers import BoardSerializer |
| 7 | +from projects.models import Collaborator |
| 8 | + |
| 9 | + |
| 10 | +class BoardViewSet(viewsets.ModelViewSet): |
| 11 | + serializer_class = BoardSerializer |
| 12 | + permission_classes = [permissions.IsAuthenticated] |
| 13 | + |
| 14 | + def get_queryset(self): |
| 15 | + user = self.request.user |
| 16 | + collaborator_projects = Collaborator.objects.filter(user=user).values( |
| 17 | + "project_id" |
| 18 | + ) |
| 19 | + return ( |
| 20 | + Board.objects.select_related("project") |
| 21 | + .prefetch_related("columns") |
| 22 | + .filter( |
| 23 | + Q(project__leader_id=user.id) | Q(project_id__in=collaborator_projects) |
| 24 | + ) |
| 25 | + .distinct() |
| 26 | + ) |
| 27 | + |
| 28 | + def perform_destroy(self, instance): |
| 29 | + # TODO: в будущем реализовать проверку прав на удаление досок |
| 30 | + return super().perform_destroy(instance) |
| 31 | + |
| 32 | + @swagger_auto_schema(tags=["Kanban Boards"]) |
| 33 | + def create(self, request, *args, **kwargs): |
| 34 | + return super().create(request, *args, **kwargs) |
| 35 | + |
| 36 | + @swagger_auto_schema(tags=["Kanban Boards"]) |
| 37 | + def list(self, request, *args, **kwargs): |
| 38 | + return super().list(request, *args, **kwargs) |
| 39 | + |
| 40 | + @swagger_auto_schema(tags=["Kanban Boards"]) |
| 41 | + def retrieve(self, request, *args, **kwargs): |
| 42 | + return super().retrieve(request, *args, **kwargs) |
| 43 | + |
| 44 | + @swagger_auto_schema(tags=["Kanban Boards"]) |
| 45 | + def partial_update(self, request, *args, **kwargs): |
| 46 | + return super().partial_update(request, *args, **kwargs) |
| 47 | + |
| 48 | + @swagger_auto_schema(tags=["Kanban Boards"]) |
| 49 | + def update(self, request, *args, **kwargs): |
| 50 | + return super().update(request, *args, **kwargs) |
| 51 | + |
| 52 | + @swagger_auto_schema(tags=["Kanban Boards"]) |
| 53 | + def destroy(self, request, *args, **kwargs): |
| 54 | + return super().destroy(request, *args, **kwargs) |
0 commit comments