ticket serializer and model update
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
# Generated by Django 5.1.2 on 2025-02-21 17:35
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('ticket', '0010_alter_message_created_at_alter_ticket_created_at_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='ticket',
|
||||||
|
name='content',
|
||||||
|
field=models.TextField(default='', verbose_name='جزيیات تیکت'),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -21,6 +21,7 @@ class Ticket(models.Model):
|
|||||||
('other', 'سایر'),
|
('other', 'سایر'),
|
||||||
]
|
]
|
||||||
subject = models.CharField(max_length=255, verbose_name='موضوع')
|
subject = models.CharField(max_length=255, verbose_name='موضوع')
|
||||||
|
content = models.TextField(verbose_name='جزيیات تیکت')
|
||||||
ticket_category = models.CharField(max_length=30, verbose_name='دسته بندی تیکت', choices=CATEGORY_CHOICES)
|
ticket_category = models.CharField(max_length=30, verbose_name='دسته بندی تیکت', choices=CATEGORY_CHOICES)
|
||||||
customer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="tickets", verbose_name='کاربر')
|
customer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="tickets", verbose_name='کاربر')
|
||||||
admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name="assigned_tickets", verbose_name='ادمین')
|
admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name="assigned_tickets", verbose_name='ادمین')
|
||||||
|
|||||||
@@ -14,3 +14,11 @@ class TicketSerializer(serializers.ModelSerializer):
|
|||||||
model = Ticket
|
model = Ticket
|
||||||
exclude = ('customer', )
|
exclude = ('customer', )
|
||||||
read_only_fields = ('status', 'admin', )
|
read_only_fields = ('status', 'admin', )
|
||||||
|
|
||||||
|
|
||||||
|
class TicketListSerializer(serializers.ModelSerializer):
|
||||||
|
admin = ProfileSerializer(read_only=True)
|
||||||
|
class Meta:
|
||||||
|
model = Ticket
|
||||||
|
exclude = ('customer', )
|
||||||
|
read_only_fields = ('status', 'admin', )
|
||||||
@@ -11,6 +11,5 @@ urlpatterns = [
|
|||||||
path('create', TicketCreateView.as_view(), name='ticket-create'),
|
path('create', TicketCreateView.as_view(), name='ticket-create'),
|
||||||
path('', TicketListView.as_view(), name='ticket-list'),
|
path('', TicketListView.as_view(), name='ticket-list'),
|
||||||
path('<int:pk>', TicketDetailView.as_view(), name='ticket-detail'),
|
path('<int:pk>', TicketDetailView.as_view(), name='ticket-detail'),
|
||||||
path('<int:pk>/messages', MessageCreateView.as_view(), name='message-create'),
|
path('message/<int:pk>', MessageCreateView.as_view(), name='message-create'),
|
||||||
path('<int:pk>/update-status', UpdateTicketStatusView.as_view(), name='update-ticket-status'),
|
|
||||||
]
|
]
|
||||||
+33
-9
@@ -2,7 +2,9 @@ from rest_framework import generics, permissions
|
|||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from .models import Ticket, Message
|
from .models import Ticket, Message
|
||||||
from .serializers import TicketSerializer, MessageSerializer
|
from .serializers import TicketListSerializer, MessageSerializer, TicketSerializer
|
||||||
|
from utils.pagination import StructurePagination
|
||||||
|
from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiTypes
|
||||||
|
|
||||||
class TicketCreateView(generics.CreateAPIView):
|
class TicketCreateView(generics.CreateAPIView):
|
||||||
queryset = Ticket.objects.all()
|
queryset = Ticket.objects.all()
|
||||||
@@ -13,15 +15,37 @@ class TicketCreateView(generics.CreateAPIView):
|
|||||||
serializer.save(customer=self.request.user)
|
serializer.save(customer=self.request.user)
|
||||||
|
|
||||||
|
|
||||||
class TicketListView(generics.ListAPIView):
|
|
||||||
serializer_class = TicketSerializer
|
|
||||||
permission_classes = [permissions.IsAuthenticated]
|
|
||||||
|
|
||||||
def get_queryset(self):
|
class TicketListView(APIView):
|
||||||
user = self.request.user
|
serializer_class = TicketListSerializer
|
||||||
if user.is_staff:
|
permission_classes = [permissions.IsAuthenticated]
|
||||||
return Ticket.objects.all()
|
pagination_class = StructurePagination
|
||||||
return Ticket.objects.filter(customer=user)
|
@extend_schema(
|
||||||
|
parameters=[
|
||||||
|
OpenApiParameter(
|
||||||
|
name="limit",
|
||||||
|
description="لیمیتش",
|
||||||
|
required=False,
|
||||||
|
type=OpenApiTypes.INT,
|
||||||
|
),
|
||||||
|
OpenApiParameter(
|
||||||
|
name="offset",
|
||||||
|
description="افستش",
|
||||||
|
required=False,
|
||||||
|
type=OpenApiTypes.INT,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
responses={
|
||||||
|
200: TicketListSerializer(many=True),
|
||||||
|
404: OpenApiTypes.OBJECT,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
def get(self, request):
|
||||||
|
tickets = Ticket.objects.filter(customer=request.user)
|
||||||
|
paginator = self.pagination_class()
|
||||||
|
paginated_tickets = paginator.paginate_queryset(tickets, request)
|
||||||
|
tickets_ser = self.serializer_class(instance=paginated_tickets, many=True, context={'request': request})
|
||||||
|
return paginator.get_paginated_response(tickets_ser.data)
|
||||||
|
|
||||||
|
|
||||||
class TicketDetailView(generics.RetrieveAPIView):
|
class TicketDetailView(generics.RetrieveAPIView):
|
||||||
|
|||||||
Reference in New Issue
Block a user