Browse Source

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

3 changed files with 42 additions and 4 deletions
  1. 38 1
      api/v2/views/tickets.py
  2. 1 2
      api/views/ticket_list.py
  3. 3 1
      urls.py

+ 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 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.api.v2.serializers.tickets import TicketSerializer
 from tickets.models import Ticket
 from tickets.models import Ticket
 
 
+import random
+
 
 
 class TicketPatchAPIView(generics.UpdateAPIView):
 class TicketPatchAPIView(generics.UpdateAPIView):
     """
     """
@@ -36,3 +44,32 @@ class TicketListAPIView(generics.ListAPIView):
         'assigned_to',
         '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.permissions import UserCanReadTicketListPermission
 from tickets.api.serializers import TicketListSerializer, TicketSerializer
 from tickets.api.serializers import TicketListSerializer, TicketSerializer
 from tickets.models import Ticket, TicketList
 from tickets.models import Ticket, TicketList
-
+from rest_framework.exceptions import NotFound
 
 
 class TicketListListAPIView(generics.ListAPIView):
 class TicketListListAPIView(generics.ListAPIView):
     permission_classes = [permissions.IsAuthenticated | HasAPIKey]
     permission_classes = [permissions.IsAuthenticated | HasAPIKey]
@@ -21,7 +21,6 @@ class TicketListListAPIView(generics.ListAPIView):
             if user_groups_ids:
             if user_groups_ids:
                 ticket_lists = ticket_lists.filter(group__id__in=user_groups_ids)
                 ticket_lists = ticket_lists.filter(group__id__in=user_groups_ids)
             else:
             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.")
                 raise NotFound("You do not yet belong to any groups. Ask your administrator to add you to one.")
 
 
         return ticket_lists
         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.api import views as apiviews
 from tickets.views import *
 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"
 app_name = "tickets"
 
 
@@ -18,6 +18,8 @@ api_v1_patterns = [
 api_v2_patterns = [
 api_v2_patterns = [
     path('ticket/<int:pk>', TicketPatchAPIView.as_view()),
     path('ticket/<int:pk>', TicketPatchAPIView.as_view()),
     path('ticket/', TicketListAPIView.as_view()),
     path('ticket/', TicketListAPIView.as_view()),
+
+    path('ticket/<int:pk>/assigin_someone_user', ticket_assigin_someone_user)
 ]
 ]
 
 
 urlpatterns = [
 urlpatterns = [