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