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()
|
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):
|
class CategoryQuerySet(models.QuerySet):
|
||||||
pass
|
pass
|
||||||
|
|
@ -69,15 +77,7 @@ class Category(BaseModel):
|
||||||
|
|
||||||
|
|
||||||
class TransactionQuerySet(models.QuerySet):
|
class TransactionQuerySet(models.QuerySet):
|
||||||
def migrate(self):
|
pass
|
||||||
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()
|
|
||||||
|
|
||||||
|
|
||||||
class Transaction(BaseModel):
|
class Transaction(BaseModel):
|
||||||
|
|
@ -114,19 +114,11 @@ class Transaction(BaseModel):
|
||||||
|
|
||||||
# unique_together = ('application', 'detail_id',)
|
# 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):
|
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):
|
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):
|
def change_state(self, from_state, to_state, error_message=None, **data):
|
||||||
if self.state == from_state:
|
if self.state == from_state:
|
||||||
|
|
@ -191,9 +183,9 @@ class Transaction(BaseModel):
|
||||||
payer_id=payer_id,
|
payer_id=payer_id,
|
||||||
payer_type=payer_type
|
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
|
return self
|
||||||
|
|
||||||
def receipt(self):
|
def receipt(self):
|
||||||
|
|
@ -206,7 +198,7 @@ class Transaction(BaseModel):
|
||||||
StateChoices.SUCCESS,
|
StateChoices.SUCCESS,
|
||||||
error_message='this transaction is not delayed'
|
error_message='this transaction is not delayed'
|
||||||
)
|
)
|
||||||
self.deposit_to_payee_balance()
|
self.category_deposit_to_payee_balance()
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def category_submit(self):
|
def category_submit(self):
|
||||||
|
|
@ -241,7 +233,7 @@ class Transaction(BaseModel):
|
||||||
)
|
)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def category_get_role(self, entity):
|
def get_role(self, entity):
|
||||||
if self.payer_wallet.owner_uuid == entity.uuid:
|
if self.payer_wallet.owner_uuid == entity.uuid:
|
||||||
return 1
|
return 1
|
||||||
elif self.payee_wallet.owner_uuid == entity.uuid:
|
elif self.payee_wallet.owner_uuid == entity.uuid:
|
||||||
|
|
@ -249,7 +241,7 @@ class Transaction(BaseModel):
|
||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def category_update_details(self, force_update=False):
|
def update_details(self, force_update=False):
|
||||||
if not isinstance(self.details, dict):
|
if not isinstance(self.details, dict):
|
||||||
self.details = {}
|
self.details = {}
|
||||||
self.save()
|
self.save()
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ class DepositSerializer(serializers.ModelSerializer):
|
||||||
with atomic():
|
with atomic():
|
||||||
try:
|
try:
|
||||||
transaction = Transaction.objects.create_transaction(**validated_data)
|
transaction = Transaction.objects.create_transaction(**validated_data)
|
||||||
transaction.submit()
|
transaction.category_submit()
|
||||||
except IntegrityError as e:
|
except IntegrityError as e:
|
||||||
raise APIException('duplicate uuid')
|
raise APIException('duplicate uuid')
|
||||||
|
|
||||||
|
|
@ -101,7 +101,7 @@ class WithdrawSerializer(serializers.ModelSerializer):
|
||||||
with atomic():
|
with atomic():
|
||||||
try:
|
try:
|
||||||
transaction = Transaction.objects.create_transaction(**validated_data)
|
transaction = Transaction.objects.create_transaction(**validated_data)
|
||||||
transaction.submit()
|
transaction.category_submit()
|
||||||
except IntegrityError as e:
|
except IntegrityError as e:
|
||||||
raise APIException('duplicate uuid')
|
raise APIException('duplicate uuid')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ class DepositSubmitAPIView(generics.CreateAPIView):
|
||||||
payer_type=TypeChoices.APPLICATION.value,
|
payer_type=TypeChoices.APPLICATION.value,
|
||||||
application=application)
|
application=application)
|
||||||
try:
|
try:
|
||||||
instance.submit()
|
instance.category_submit()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
APIException('Failed to submit deposit')
|
APIException('Failed to submit deposit')
|
||||||
|
|
@ -123,7 +123,7 @@ class DepositVerifyAPIView(generics.RetrieveAPIView):
|
||||||
def retrieve(self, request, *args, **kwargs):
|
def retrieve(self, request, *args, **kwargs):
|
||||||
instance = self.get_object()
|
instance = self.get_object()
|
||||||
if instance.state == StateChoices.PENDING:
|
if instance.state == StateChoices.PENDING:
|
||||||
instance.verify()
|
instance.category_verify()
|
||||||
|
|
||||||
serializer = self.get_serializer(instance)
|
serializer = self.get_serializer(instance)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
@ -149,7 +149,7 @@ class WithdrawSubmitAPIView(generics.CreateAPIView):
|
||||||
payee_type=TypeChoices.APPLICATION.value,
|
payee_type=TypeChoices.APPLICATION.value,
|
||||||
application=application)
|
application=application)
|
||||||
|
|
||||||
instance.submit()
|
instance.category_submit()
|
||||||
|
|
||||||
|
|
||||||
class WithdrawVerifyAPIView(generics.RetrieveAPIView):
|
class WithdrawVerifyAPIView(generics.RetrieveAPIView):
|
||||||
|
|
@ -167,7 +167,7 @@ class WithdrawVerifyAPIView(generics.RetrieveAPIView):
|
||||||
def retrieve(self, request, *args, **kwargs):
|
def retrieve(self, request, *args, **kwargs):
|
||||||
instance = self.get_object()
|
instance = self.get_object()
|
||||||
if instance.state == StateChoices.PENDING:
|
if instance.state == StateChoices.PENDING:
|
||||||
instance.verify()
|
instance.category_verify()
|
||||||
|
|
||||||
serializer = self.get_serializer(instance)
|
serializer = self.get_serializer(instance)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue