1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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)
|