FIX(wallet): fix category deposit and set logger
update wallet client
This commit is contained in:
parent
1443658656
commit
4f3c1a565a
3 changed files with 43 additions and 4 deletions
|
|
@ -174,6 +174,7 @@ class ApplicationTransactionSerializer(BaseTransactionSerializer):
|
|||
pass
|
||||
|
||||
class ApplicationDepositSerializer(serializers.ModelSerializer):
|
||||
uuid = serializers.UUIDField(required=False, validators=[])
|
||||
payee_id = serializers.UUIDField(required=True)
|
||||
payee_type = serializers.IntegerField(required=True)
|
||||
amount = serializers.IntegerField(required=True, validators=[MinValueValidator(1)])
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ from apps.wallet.constans import TypeChoices, StateChoices
|
|||
from apps.wallet.models import Transaction, Category, Wallet
|
||||
from apps.wallet.serializers import ApplicationDepositSerializer, ApplicationWithdrawSerializer, \
|
||||
ApplicationTransactionSerializer, ApplicationBalanceSerializer, MyWalletSerializer
|
||||
from wallet.exceptions import UnprocessableEntity
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
@ -276,7 +278,9 @@ class CategoryDepositSubmitAPIView(generics.CreateAPIView):
|
|||
def perform_create(self, serializer):
|
||||
# TODO: get_or_create instead of create if uuid given
|
||||
# TODO: it is possible to merage create and submit in one step for improve performance
|
||||
logger.info("Starting perform_create for Transaction")
|
||||
application = get_application(self.request)
|
||||
logger.debug(f"Application UUID: {application.uuid}")
|
||||
category_uuid = self.kwargs.get('category_uuid')
|
||||
if category_uuid:
|
||||
category = get_object_or_404(Category.objects.all(), uuid=category_uuid)
|
||||
|
|
@ -286,10 +290,38 @@ class CategoryDepositSubmitAPIView(generics.CreateAPIView):
|
|||
payee_type = serializer.validated_data.pop('payee_type')
|
||||
payer_wallet, _ = Wallet.objects.get_or_create(owner_uuid=application.uuid, owner_type=TypeChoices.APPLICATION,
|
||||
category=category)
|
||||
logger.debug(f"Payer wallet: {payer_wallet.uuid}")
|
||||
payee_wallet, _ = Wallet.objects.get_or_create(owner_uuid=payee_id, owner_type=payee_type, category=category)
|
||||
|
||||
instance = serializer.save(payer_wallet=payer_wallet, application=application, payee_wallet=payee_wallet)
|
||||
instance.category_submit()
|
||||
logger.debug(f"Payee wallet: {payee_wallet.uuid}")
|
||||
uuid = serializer.validated_data.pop('uuid')
|
||||
details = serializer.validated_data.get('details', {})
|
||||
reference_id = details.get('reference_id', None)
|
||||
logger.debug(f"Transaction UUID: {uuid}, Reference ID: {reference_id}")
|
||||
transaction_params = {
|
||||
'application': application,
|
||||
'payer_wallet': payer_wallet,
|
||||
'payee_wallet': payee_wallet,
|
||||
'amount': serializer.validated_data.get('amount'),
|
||||
}
|
||||
if uuid:
|
||||
transaction_params['uuid'] = uuid
|
||||
elif reference_id:
|
||||
transaction_params['details__reference_id'] = reference_id
|
||||
else:
|
||||
logger.error('Missing UUID and Reference ID')
|
||||
raise UnprocessableEntity('Missing UUID or reference_id')
|
||||
instance, created = Transaction.objects.get_or_create(**transaction_params, defaults={
|
||||
'details': details
|
||||
})
|
||||
serializer.instance = instance
|
||||
logger.info(f"Transaction {'created' if created else 'retrieved'} successfully: {instance.uuid}")
|
||||
if instance.state == StateChoices.PENDING:
|
||||
return
|
||||
if created or instance.state == StateChoices.CREATED:
|
||||
instance.category_submit()
|
||||
else:
|
||||
logger.warning(f"Transaction was not in processable state! for {instance.uuid}: {instance.state}")
|
||||
raise UnprocessableEntity(_('Transaction was not in processable state!'))
|
||||
|
||||
|
||||
class CategoryDepositVerifyAPIView(generics.RetrieveAPIView):
|
||||
|
|
@ -312,7 +344,7 @@ class CategoryDepositVerifyAPIView(generics.RetrieveAPIView):
|
|||
instance = self.get_object()
|
||||
if instance.state == StateChoices.PENDING:
|
||||
instance.category_verify()
|
||||
|
||||
logger.warning(f"Transaction was retrieved for {instance.uuid}: {instance.state}")
|
||||
serializer = self.get_serializer(instance)
|
||||
return Response(serializer.data)
|
||||
|
||||
|
|
|
|||
6
wallet/exceptions.py
Normal file
6
wallet/exceptions.py
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
from rest_framework.exceptions import APIException
|
||||
|
||||
class UnprocessableEntity(APIException):
|
||||
status_code = 422
|
||||
default_detail = 'The request was well-formed but cannot be processed due to semantic errors.'
|
||||
default_code = 'unprocessable_entity'
|
||||
Loading…
Add table
Reference in a new issue