wallet with category
This commit is contained in:
parent
a491adbd81
commit
82bd4f9c34
3 changed files with 22 additions and 30 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue