From a71213b148d8c6543719b5b2a253165a910cf13a Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Fri, 21 Feb 2025 22:05:46 +0330 Subject: [PATCH] add filter and sort for ticket and update status ticket --- .../migrations/0012_alter_ticket_status.py | 18 ++++++++++++ backend/ticket/models.py | 1 - backend/ticket/views.py | 29 ++++++++++++++++++- 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 backend/ticket/migrations/0012_alter_ticket_status.py diff --git a/backend/ticket/migrations/0012_alter_ticket_status.py b/backend/ticket/migrations/0012_alter_ticket_status.py new file mode 100644 index 0000000..817c709 --- /dev/null +++ b/backend/ticket/migrations/0012_alter_ticket_status.py @@ -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='وضعیت تیکت'), + ), + ] diff --git a/backend/ticket/models.py b/backend/ticket/models.py index 3d74b4e..edfd231 100644 --- a/backend/ticket/models.py +++ b/backend/ticket/models.py @@ -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', 'بسته'), diff --git a/backend/ticket/views.py b/backend/ticket/views.py index 5315656..d8a5e10 100644 --- a/backend/ticket/views.py +++ b/backend/ticket/views.py @@ -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})