grouped transactions

This commit is contained in:
Sayyid Hamid Mahdavi 2026-02-07 13:47:10 +03:30
parent e045ffd9b1
commit 15fe0d4531
2 changed files with 14 additions and 6 deletions

View file

@ -226,4 +226,12 @@ class ApplicationWithdrawSerializer(serializers.ModelSerializer):
class TransactionGroupedSerializer(serializers.Serializer):
pass
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']

View file

@ -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)