|
@@ -0,0 +1,69 @@
|
|
|
+from rest_framework import generics, permissions, status
|
|
|
+from rest_framework.response import Response
|
|
|
+from rest_framework_api_key.permissions import HasAPIKey
|
|
|
+from django.contrib.auth import get_user_model
|
|
|
+from tickets.api.v2.serializers.tickets import TicketSerializer
|
|
|
+from tickets.models import Ticket
|
|
|
+
|
|
|
+User = get_user_model()
|
|
|
+class TicketUpdateAPIView(generics.UpdateAPIView):
|
|
|
+ """
|
|
|
+ API для частичного обновления тикета
|
|
|
+ """
|
|
|
+
|
|
|
+ queryset = Ticket.objects.all()
|
|
|
+ serializer_class = TicketSerializer
|
|
|
+ permission_classes = [
|
|
|
+ permissions.IsAuthenticated | HasAPIKey
|
|
|
+ ]
|
|
|
+
|
|
|
+ def perform_update(self, serializer):
|
|
|
+ if 'assignin' in serializer.validated_data:
|
|
|
+ assignin = serializer.validated_data['assignin']
|
|
|
+
|
|
|
+ if isinstance(assignin, int):
|
|
|
+ try:
|
|
|
+ user = User.objects.get(id=assignin)
|
|
|
+ serializer.instance.assigned_to = user
|
|
|
+ except User.DoesNotExist:
|
|
|
+ return Response(
|
|
|
+ {"detail": "Пользователь с таким ID не существует."},
|
|
|
+ status=status.HTTP_404_NOT_FOUND
|
|
|
+ )
|
|
|
+ elif isinstance(assignin, str):
|
|
|
+ match assignin:
|
|
|
+ case "anyone":
|
|
|
+ user = self.get_user_for_assigned_to(serializer.instance)
|
|
|
+ serializer.instance.assigned_to = user
|
|
|
+ case _:
|
|
|
+ return Response(
|
|
|
+ {"detail": "Некорректное значение для 'assigned_to'."},
|
|
|
+ status=status.HTTP_400_BAD_REQUEST
|
|
|
+ )
|
|
|
+
|
|
|
+ serializer.save()
|
|
|
+ return Response(serializer.data)
|
|
|
+
|
|
|
+ def get_user_for_assigned_to(self, ticket: Ticket):
|
|
|
+ return User.objects.filter(groups__name=ticket.ticket_list.group.name, is_active=True).first()
|
|
|
+
|
|
|
+
|
|
|
+class TicketListAPIView(generics.ListAPIView):
|
|
|
+ """
|
|
|
+ API для получения списка тикетов
|
|
|
+ """
|
|
|
+
|
|
|
+ queryset = Ticket.objects.all()
|
|
|
+ serializer_class = TicketSerializer
|
|
|
+ permission_classes = [
|
|
|
+ permissions.IsAuthenticated | HasAPIKey
|
|
|
+ ]
|
|
|
+ filterset_fields = (
|
|
|
+ 'title',
|
|
|
+ 'ticket_list',
|
|
|
+ 'ticket_type',
|
|
|
+ 'status',
|
|
|
+ 'created_by',
|
|
|
+ 'assigned_to',
|
|
|
+ )
|
|
|
+
|