From 82bd4f9c34081570f1e096dfd851d12559267de3 Mon Sep 17 00:00:00 2001 From: Sayyid Hamid Mahdavi Date: Thu, 18 Sep 2025 12:33:45 +0330 Subject: [PATCH] wallet with category --- apps/wallet/models.py | 40 +++++++++++++------------------- apps/wallet/serializers.py | 4 ++-- apps/wallet/views/application.py | 8 +++---- 3 files changed, 22 insertions(+), 30 deletions(-) diff --git a/apps/wallet/models.py b/apps/wallet/models.py index 2044c45..477a522 100755 --- a/apps/wallet/models.py +++ b/apps/wallet/models.py @@ -26,6 +26,14 @@ class Wallet(BaseModel): objects = WalletQuerySet.as_manager() + def get_owner(self): + if self.owner_type == TypeChoices.APPLICATION: + owner: Application = Application.objects.get(pk=self.owner_uuid) + else: + owner: User = User.objects.get(pk=self.owner_uuid) + + return owner + class CategoryQuerySet(models.QuerySet): pass @@ -69,15 +77,7 @@ class Category(BaseModel): class TransactionQuerySet(models.QuerySet): - def migrate(self): - for transaction in self: - payer = transaction.get_payer() - payee = transaction.get_payee() - payer_wallet, created = Wallet.objects.get_or_create(owner_uuid=transaction.payer_id, owner_type=transaction.payer_type, defaults={'balance': payer.balance}) - payee_wallet, created = Wallet.objects.get_or_create(owner_uuid=transaction.payee_id, owner_type=transaction.payee_type, defaults={'balance': payee.balance}) - transaction.payer_wallet = payer_wallet - transaction.payee_wallet = payee_wallet - transaction.save() + pass class Transaction(BaseModel): @@ -114,19 +114,11 @@ class Transaction(BaseModel): # unique_together = ('application', 'detail_id',) - def get_pay_entity(self, entity_id, entity_type): - if entity_type == TypeChoices.APPLICATION: - entity: Application = Application.objects.get(pk=entity_id) - else: - entity: User = User.objects.get(pk=entity_id) - - return entity - def get_payer(self): - return self.get_pay_entity(self.payer_id, self.payer_type) + return self.payer_wallet.get_owner() def get_payee(self): - return self.get_pay_entity(self.payee_id, self.payee_type) + return self.payee_wallet.get_owner() def change_state(self, from_state, to_state, error_message=None, **data): if self.state == from_state: @@ -191,9 +183,9 @@ class Transaction(BaseModel): payer_id=payer_id, payer_type=payer_type ) - self.deposit_to_payee_balance() + self.category_deposit_to_payee_balance() - self.withdraw_from_payer_balance() + self.category_withdraw_from_payer_balance() return self def receipt(self): @@ -206,7 +198,7 @@ class Transaction(BaseModel): StateChoices.SUCCESS, error_message='this transaction is not delayed' ) - self.deposit_to_payee_balance() + self.category_deposit_to_payee_balance() return self def category_submit(self): @@ -241,7 +233,7 @@ class Transaction(BaseModel): ) return self - def category_get_role(self, entity): + def get_role(self, entity): if self.payer_wallet.owner_uuid == entity.uuid: return 1 elif self.payee_wallet.owner_uuid == entity.uuid: @@ -249,7 +241,7 @@ class Transaction(BaseModel): else: return 0 - def category_update_details(self, force_update=False): + def update_details(self, force_update=False): if not isinstance(self.details, dict): self.details = {} self.save() diff --git a/apps/wallet/serializers.py b/apps/wallet/serializers.py index b019269..8d5b669 100755 --- a/apps/wallet/serializers.py +++ b/apps/wallet/serializers.py @@ -71,7 +71,7 @@ class DepositSerializer(serializers.ModelSerializer): with atomic(): try: transaction = Transaction.objects.create_transaction(**validated_data) - transaction.submit() + transaction.category_submit() except IntegrityError as e: raise APIException('duplicate uuid') @@ -101,7 +101,7 @@ class WithdrawSerializer(serializers.ModelSerializer): with atomic(): try: transaction = Transaction.objects.create_transaction(**validated_data) - transaction.submit() + transaction.category_submit() except IntegrityError as e: raise APIException('duplicate uuid') diff --git a/apps/wallet/views/application.py b/apps/wallet/views/application.py index c580fed..5f179dd 100755 --- a/apps/wallet/views/application.py +++ b/apps/wallet/views/application.py @@ -102,7 +102,7 @@ class DepositSubmitAPIView(generics.CreateAPIView): payer_type=TypeChoices.APPLICATION.value, application=application) try: - instance.submit() + instance.category_submit() except Exception as e: print(e) APIException('Failed to submit deposit') @@ -123,7 +123,7 @@ class DepositVerifyAPIView(generics.RetrieveAPIView): def retrieve(self, request, *args, **kwargs): instance = self.get_object() if instance.state == StateChoices.PENDING: - instance.verify() + instance.category_verify() serializer = self.get_serializer(instance) return Response(serializer.data) @@ -149,7 +149,7 @@ class WithdrawSubmitAPIView(generics.CreateAPIView): payee_type=TypeChoices.APPLICATION.value, application=application) - instance.submit() + instance.category_submit() class WithdrawVerifyAPIView(generics.RetrieveAPIView): @@ -167,7 +167,7 @@ class WithdrawVerifyAPIView(generics.RetrieveAPIView): def retrieve(self, request, *args, **kwargs): instance = self.get_object() if instance.state == StateChoices.PENDING: - instance.verify() + instance.category_verify() serializer = self.get_serializer(instance) return Response(serializer.data)