From 1de71c99695fe33ae917d04363209f67d093b96e Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Fri, 21 Feb 2025 21:46:27 +0330 Subject: [PATCH 01/58] update ticket list serializer fields --- backend/ticket/serializers.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/backend/ticket/serializers.py b/backend/ticket/serializers.py index fa3355c..099b020 100644 --- a/backend/ticket/serializers.py +++ b/backend/ticket/serializers.py @@ -17,8 +17,7 @@ class TicketSerializer(serializers.ModelSerializer): class TicketListSerializer(serializers.ModelSerializer): - admin = ProfileSerializer(read_only=True) class Meta: model = Ticket - exclude = ('customer', ) - read_only_fields = ('status', 'admin', ) \ No newline at end of file + exclude = ('customer', 'admin', 'order') + read_only_fields = ('status',) \ No newline at end of file From d9e40705e8a2b839829b0975cd0ead927713a181 Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Fri, 21 Feb 2025 21:47:45 +0330 Subject: [PATCH 02/58] remove content from ticket list serilaizer --- backend/ticket/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/ticket/serializers.py b/backend/ticket/serializers.py index 099b020..5c7c24f 100644 --- a/backend/ticket/serializers.py +++ b/backend/ticket/serializers.py @@ -19,5 +19,5 @@ class TicketSerializer(serializers.ModelSerializer): class TicketListSerializer(serializers.ModelSerializer): class Meta: model = Ticket - exclude = ('customer', 'admin', 'order') + exclude = ('customer', 'admin', 'order', 'content') read_only_fields = ('status',) \ No newline at end of file From a71213b148d8c6543719b5b2a253165a910cf13a Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Fri, 21 Feb 2025 22:05:46 +0330 Subject: [PATCH 03/58] 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}) From b9b2dee3ec2cfcf411a4399962f30f756ed6c4d6 Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Fri, 21 Feb 2025 23:11:11 +0330 Subject: [PATCH 04/58] added ticket type --- frontend/types/global.d.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/frontend/types/global.d.ts b/frontend/types/global.d.ts index 72a5ca9..a64145c 100644 --- a/frontend/types/global.d.ts +++ b/frontend/types/global.d.ts @@ -119,4 +119,13 @@ declare global { iconClass?: string; onClick?: () => void; }; + + type Ticket = { + id: number; + subject: string; + ticket_category: string; + status: string; + created_at: string; + updated_at: string; + }; } From 2eb035efab956a36188f1c07ecf914f2d3b8222f Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Fri, 21 Feb 2025 23:11:32 +0330 Subject: [PATCH 05/58] added computed --- frontend/components/global/Pagination.vue | 25 +++++++++++------------ 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/frontend/components/global/Pagination.vue b/frontend/components/global/Pagination.vue index 4a29a83..875201c 100644 --- a/frontend/components/global/Pagination.vue +++ b/frontend/components/global/Pagination.vue @@ -1,5 +1,4 @@ From 74c361905d1a71a7b4f5d1d950ca97d3ececd209 Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Fri, 21 Feb 2025 23:11:41 +0330 Subject: [PATCH 06/58] changed style --- frontend/components/global/Placeholder.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/components/global/Placeholder.vue b/frontend/components/global/Placeholder.vue index bcb252f..019b32f 100644 --- a/frontend/components/global/Placeholder.vue +++ b/frontend/components/global/Placeholder.vue @@ -13,7 +13,7 @@ defineProps(); diff --git a/frontend/components/product/ChatBox/ChatBoxContainer.vue b/frontend/components/product/ChatBox/ChatBoxContainer.vue index cedb98c..91eafa5 100644 --- a/frontend/components/product/ChatBox/ChatBoxContainer.vue +++ b/frontend/components/product/ChatBox/ChatBoxContainer.vue @@ -29,17 +29,17 @@ const { isPending: isChatPending, isFetchingNextPage: isNextChatPagePending, hasNextPage: hasMoreChat, - fetchNextPage: loadMoreChat + fetchNextPage: loadMoreChat, } = useGetChat(id, isOpen); const isCreateMessagePending = useIsMutating({ - mutationKey: [MUTATION_KEYS.create_chat] + mutationKey: [MUTATION_KEYS.create_chat], }); const canLoadMoreChat = ref(false); const isChatScrollLocked = useScrollLock(chatContainerEl); const { y: chatContainerScrollY } = useScroll(chatContainerEl, { - behavior: "smooth" + behavior: "smooth", }); useInfiniteScroll( @@ -56,11 +56,11 @@ useInfiniteScroll( distance: 10, direction: "top", throttle: 1000, - canLoadMore: () => canLoadMoreChat.value + canLoadMore: () => canLoadMoreChat.value, } ); -// method +// methods const scrollToBottom = () => { chatContainerScrollY.value = chatContainerEl.value?.scrollHeight ?? 0; @@ -116,7 +116,7 @@ whenever( }, 2000); }, { - once: true + once: true, } ); @@ -131,16 +131,15 @@ whenever( -
+
Please sign in first
diff --git a/frontend/components/product/ChatBox/ChatButton.vue b/frontend/components/product/ChatBox/ChatButton.vue index 22ab002..114b7c2 100644 --- a/frontend/components/product/ChatBox/ChatButton.vue +++ b/frontend/components/product/ChatBox/ChatButton.vue @@ -1,24 +1,21 @@ diff --git a/frontend/components/product/ChatBox/ChatInput.vue b/frontend/components/product/ChatBox/ChatInput.vue index 69cfea4..d59a17c 100644 --- a/frontend/components/product/ChatBox/ChatInput.vue +++ b/frontend/components/product/ChatBox/ChatInput.vue @@ -1,5 +1,4 @@ @@ -303,4 +316,4 @@ const sendMessage = async () => { transform: translate(-50%, -50%) rotate(443deg); } } - \ No newline at end of file + diff --git a/frontend/components/product/ChatBox/ChatMessage.vue b/frontend/components/product/ChatBox/ChatMessage.vue index c142dce..97ecf3b 100644 --- a/frontend/components/product/ChatBox/ChatMessage.vue +++ b/frontend/components/product/ChatBox/ChatMessage.vue @@ -1,14 +1,13 @@ \ No newline at end of file + diff --git a/frontend/components/product/ProductComments.vue b/frontend/components/product/ProductComments.vue index 2d38b65..1b0bcd8 100644 --- a/frontend/components/product/ProductComments.vue +++ b/frontend/components/product/ProductComments.vue @@ -1,5 +1,4 @@