From 15fe0d45315033c14a2fa33e04ffe81867c5c0b7 Mon Sep 17 00:00:00 2001 From: Sayyid Hamid Mahdavi Date: Sat, 7 Feb 2026 13:47:10 +0330 Subject: [PATCH] grouped transactions --- apps/wallet/serializers.py | 10 +++++++++- apps/wallet/views/user.py | 10 +++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/apps/wallet/serializers.py b/apps/wallet/serializers.py index 4eb2494..455996b 100755 --- a/apps/wallet/serializers.py +++ b/apps/wallet/serializers.py @@ -226,4 +226,12 @@ class ApplicationWithdrawSerializer(serializers.ModelSerializer): class TransactionGroupedSerializer(serializers.Serializer): - pass \ No newline at end of file + reference = serializers.UUIDField(source='details__reference_id') + application = serializers.UUIDField() + total_amount = serializers.FloatField() + total_count = serializers.IntegerField() + transactions = TransactionSerializer(many=True) + + class Meta: + fields = ('reference', 'application', 'total_amount', 'total_count', 'transactions') + read_only_fields = ['reference', 'application', 'total_amount', 'total_count', 'transactions'] diff --git a/apps/wallet/views/user.py b/apps/wallet/views/user.py index 2067f8a..f94d541 100755 --- a/apps/wallet/views/user.py +++ b/apps/wallet/views/user.py @@ -349,14 +349,14 @@ class UserTransactionViewSet(mixins.ListModelMixin, @extend_schema(responses=TransactionGroupedSerializer(many=True)) @action(detail=False, methods=["GET"], serializer_class=TransactionGroupedSerializer) - def grouped(self): + def grouped(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_queryset()) grouped_transaction_list = queryset.values('details__reference_id', 'application').annotate( total_amount=Sum('amount'), total_count=Count('uuid'), - transaction_uuid_list=ArrayAgg('uuid'), + transactions=ArrayAgg('uuid'), ) page = list(self.paginate_queryset(grouped_transaction_list)) @@ -364,15 +364,15 @@ class UserTransactionViewSet(mixins.ListModelMixin, transaction_uuid_list = [] for grouped_transaction in page: - transaction_uuid_list += grouped_transaction['transaction_uuid_list'] + transaction_uuid_list += grouped_transaction['transactions'] transaction_list = Transaction.objects.filter(uuid__in=transaction_uuid_list) transaction_dict = {t.pk: t for t in transaction_list} for grouped_transaction in page: - for i, transaction in enumerate(grouped_transaction['transaction_uuid_list']): - grouped_transaction['transaction_uuid_list'][i] = transaction_dict[transaction] + for i, transaction in enumerate(grouped_transaction['transactions']): + grouped_transaction['transactions'][i] = transaction_dict[transaction] serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data)