ticket serializer and model update

This commit is contained in:
Parsa Nazer
2025-02-21 21:41:01 +03:30
parent 36716f245d
commit e86e100e8c
5 changed files with 62 additions and 11 deletions
@@ -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,
),
]
+1
View File
@@ -21,6 +21,7 @@ class Ticket(models.Model):
('other', 'سایر'),
]
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)
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='ادمین')
+8
View File
@@ -14,3 +14,11 @@ class TicketSerializer(serializers.ModelSerializer):
model = Ticket
exclude = ('customer', )
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', )
+1 -2
View File
@@ -11,6 +11,5 @@ urlpatterns = [
path('create', TicketCreateView.as_view(), name='ticket-create'),
path('', TicketListView.as_view(), name='ticket-list'),
path('<int:pk>', TicketDetailView.as_view(), name='ticket-detail'),
path('<int:pk>/messages', MessageCreateView.as_view(), name='message-create'),
path('<int:pk>/update-status', UpdateTicketStatusView.as_view(), name='update-ticket-status'),
path('message/<int:pk>', MessageCreateView.as_view(), name='message-create'),
]
+33 -9
View File
@@ -2,7 +2,9 @@ from rest_framework import generics, permissions
from rest_framework.response import Response
from rest_framework.views import APIView
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):
queryset = Ticket.objects.all()
@@ -13,15 +15,37 @@ class TicketCreateView(generics.CreateAPIView):
serializer.save(customer=self.request.user)
class TicketListView(generics.ListAPIView):
serializer_class = TicketSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
user = self.request.user
if user.is_staff:
return Ticket.objects.all()
return Ticket.objects.filter(customer=user)
class TicketListView(APIView):
serializer_class = TicketListSerializer
permission_classes = [permissions.IsAuthenticated]
pagination_class = StructurePagination
@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):