tickets.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from rest_framework import generics, permissions, status
  2. from rest_framework.decorators import api_view, permission_classes
  3. from rest_framework.response import Response
  4. from rest_framework_api_key.permissions import HasAPIKey
  5. from django.contrib.auth.models import Group
  6. from django.contrib.auth import get_user_model
  7. from tickets.api.v2.serializers.tickets import TicketSerializer
  8. from tickets.models import Ticket
  9. import random
  10. class TicketPatchAPIView(generics.UpdateAPIView):
  11. """
  12. API для частичного обновления тикета
  13. """
  14. queryset = Ticket.objects.all()
  15. serializer_class = TicketSerializer
  16. permission_classes = [
  17. permissions.IsAuthenticated | HasAPIKey
  18. ]
  19. class TicketListAPIView(generics.ListAPIView):
  20. """
  21. API для получения списка тикетов
  22. """
  23. queryset = Ticket.objects.all()
  24. serializer_class = TicketSerializer
  25. permission_classes = [
  26. permissions.IsAuthenticated | HasAPIKey
  27. ]
  28. filterset_fields = (
  29. 'title',
  30. 'ticket_list',
  31. 'ticket_type',
  32. 'status',
  33. 'created_by',
  34. 'assigned_to',
  35. )
  36. @api_view(['PATCH'])
  37. @permission_classes([permissions.IsAuthenticated | HasAPIKey])
  38. def ticket_assigin_someone_user(request, pk):
  39. try:
  40. ticket = Ticket.objects.get(pk=pk)
  41. except Ticket.DoesNotExist:
  42. return Response({"error": "Тикет не найден"}, status=status.HTTP_404_NOT_FOUND)
  43. users = ticket.ticket_list.group.user_set.all()
  44. if not users:
  45. return Response(
  46. {"error": "Нет доступных пользователей для назначения"},
  47. status=status.HTTP_400_BAD_REQUEST
  48. )
  49. # TODO: Сделать алгоритм выбора пользователя по каким-нибудь параметрам
  50. # Например по количеству уже назначенных тикетов:
  51. # Выбрать пользователя, у кого меньше всего тикетов назначено
  52. random_user = random.choice(users)
  53. ticket.assigned_to = random_user
  54. ticket.save()
  55. return Response({
  56. "id": ticket.id,
  57. "assigned_to": random_user.username,
  58. "status": "Назначение обновлено"
  59. }, status=status.HTTP_200_OK)