123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 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',
- )
|