from rest_framework import generics, permissions, status from rest_framework.decorators import api_view, permission_classes from rest_framework.response import Response from rest_framework_api_key.permissions import HasAPIKey from django.contrib.auth.models import Group from django.contrib.auth import get_user_model from tickets.api.v2.serializers.tickets import TicketSerializer from tickets.models import Ticket import random class TicketPatchAPIView(generics.UpdateAPIView): """ API для частичного обновления тикета """ queryset = Ticket.objects.all() serializer_class = TicketSerializer permission_classes = [ permissions.IsAuthenticated | HasAPIKey ] 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', ) @api_view(['PATCH']) @permission_classes([permissions.IsAuthenticated | HasAPIKey]) def ticket_assigin_someone_user(request, pk): try: ticket = Ticket.objects.get(pk=pk) except Ticket.DoesNotExist: return Response({"error": "Тикет не найден"}, status=status.HTTP_404_NOT_FOUND) users = ticket.ticket_list.group.user_set.all() if not users: return Response( {"error": "Нет доступных пользователей для назначения"}, status=status.HTTP_400_BAD_REQUEST ) # TODO: Сделать алгоритм выбора пользователя по каким-нибудь параметрам # Например по количеству уже назначенных тикетов: # Выбрать пользователя, у кого меньше всего тикетов назначено random_user = random.choice(users) ticket.assigned_to = random_user ticket.save() return Response({ "id": ticket.id, "assigned_to": random_user.username, "status": "Назначение обновлено" }, status=status.HTTP_200_OK)