Эх сурвалжийг харах

Merge branch 'unstable' of ShariX_Open/sharix-open-tickets into master

Панюкова Александра Анатольевна 4 долоо хоног өмнө
parent
commit
eff04f92be

+ 38 - 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,32 @@ class TicketListAPIView(generics.ListAPIView):
         'assigned_to',
     )
 
+
+# TODO: add to redoc
+@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)

+ 1 - 2
api/views/ticket_list.py

@@ -6,7 +6,7 @@ from rest_framework_api_key.permissions import HasAPIKey
 from tickets.api.permissions import UserCanReadTicketListPermission
 from tickets.api.serializers import TicketListSerializer, TicketSerializer
 from tickets.models import Ticket, TicketList
-
+from rest_framework.exceptions import NotFound
 
 class TicketListListAPIView(generics.ListAPIView):
     permission_classes = [permissions.IsAuthenticated | HasAPIKey]
@@ -21,7 +21,6 @@ class TicketListListAPIView(generics.ListAPIView):
             if user_groups_ids:
                 ticket_lists = ticket_lists.filter(group__id__in=user_groups_ids)
             else:
-                # ERROR:FIXME:NOTE:BUG: NotFound is not declarated. Need import some module
                 raise NotFound("You do not yet belong to any groups. Ask your administrator to add you to one.")
 
         return ticket_lists

+ 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 = [