add filter and sort for ticket and update status ticket

This commit is contained in:
Parsa Nazer
2025-02-21 22:05:46 +03:30
parent d9e40705e8
commit a71213b148
3 changed files with 46 additions and 2 deletions
@@ -0,0 +1,18 @@
# Generated by Django 5.1.2 on 2025-02-21 18:35
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ticket', '0011_ticket_content'),
]
operations = [
migrations.AlterField(
model_name='ticket',
name='status',
field=models.CharField(choices=[('in_progress', 'در حال پردازش'), ('resolved', 'حل شده'), ('closed', 'بسته')], default='open', max_length=20, verbose_name='وضعیت تیکت'),
),
]
-1
View File
@@ -6,7 +6,6 @@ from django_jalali.db import models as jmodels
class Ticket(models.Model):
objects = jmodels.jManager()
STATUS_CHOICES = [
('open', 'باز'),
('in_progress', 'در حال پردازش'),
('resolved', 'حل شده'),
('closed', 'بسته'),
+28 -1
View File
@@ -33,7 +33,26 @@ class TicketListView(APIView):
description="افستش",
required=False,
type=OpenApiTypes.INT,
)
),
OpenApiParameter(
name="filter",
description=(
"filter results by one of the following fields:\n"
"`in_progress`, `closed`, `resolved`."
),
required=False,
type=OpenApiTypes.STR,
),
OpenApiParameter(
name="sort",
description=(
"Sort results by one of the following fields:\n"
" `created_at`, `-created_at`."
"\nPrefix with `-` for descending order."
),
required=False,
type=OpenApiTypes.STR,
),
],
responses={
200: TicketListSerializer(many=True),
@@ -42,6 +61,14 @@ class TicketListView(APIView):
)
def get(self, request):
tickets = Ticket.objects.filter(customer=request.user)
filter_by = request.query_params.get('filter', None)
sort = request.query_params.get('sort', None)
if filter_by:
tickets.filter(status=str(filter_by))
if sort:
if sort not in ['created_at', '-created_at']:
return Response({'detail': 'wrong sort paramter'}, status=status.HTTP_400_BAD_REQUEST)
tickets.order_by(sort)
paginator = self.pagination_class()
paginated_tickets = paginator.paginate_queryset(tickets, request)
tickets_ser = self.serializer_class(instance=paginated_tickets, many=True, context={'request': request})