Browse Source

add assigin_someone_user in APIv2

blezz-tech 9 hours ago
parent
commit
675bb1138c
2 changed files with 40 additions and 2 deletions
  1. 37 1
      api/v2/views/tickets.py
  2. 3 1
      urls.py

+ 37 - 1
api/v2/views/tickets.py

@@ -1,9 +1,17 @@
-from rest_framework import generics, permissions
+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):
     """
@@ -36,3 +44,31 @@ class TicketListAPIView(generics.ListAPIView):
         '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)

+ 3 - 1
urls.py

@@ -2,7 +2,7 @@ from django.urls import path, include
 
 from tickets.api import views as apiviews
 from tickets.views import *
-from tickets.api.v2.views.tickets import TicketPatchAPIView, TicketListAPIView
+from tickets.api.v2.views.tickets import TicketPatchAPIView, TicketListAPIView, ticket_assigin_someone_user
 
 app_name = "tickets"
 
@@ -18,6 +18,8 @@ api_v1_patterns = [
 api_v2_patterns = [
     path('ticket/<int:pk>', TicketPatchAPIView.as_view()),
     path('ticket/', TicketListAPIView.as_view()),
+
+    path('ticket/<int:pk>/assigin_someone_user', ticket_assigin_someone_user)
 ]
 
 urlpatterns = [