accounts/apps/wallet/serializers.py
2022-09-27 18:03:16 +03:30

108 lines
3 KiB
Python
Executable file

from django.db import IntegrityError
from django.db.transaction import atomic
from rest_framework import serializers
from rest_framework.exceptions import APIException
from apps.users.serializers import PublicUserSerializer
from .models import Transaction
from ..users.models import User
class TransactionSerializer(serializers.ModelSerializer):
payer = PublicUserSerializer(required=False)
payee = PublicUserSerializer(required=False, read_only=True)
class Meta:
model = Transaction
fields = ('uuid',
'payer',
'payee',
"create",
"state",
'amount',
'delay',
'last_update',
# 'detail_id',
)
read_only_fields = ['uuid', 'last_update', 'state', 'create'] # , 'detail_id']
def create(self, validated_data):
# payer = validated_data.get('payer')
# request = self.context.get('request')
# user = request.user if request else payer
# if user == payer:
# with atomic():
# transaction = Transaction.objects.create_transaction(**validated_data)
# transaction.pay()
#
# else:
transaction = Transaction.objects.create_transaction(**validated_data)
return transaction
class DepositSerializer(serializers.ModelSerializer):
uuid = serializers.UUIDField(required=True)
class Meta:
model = Transaction
fields = (
'uuid',
'payer',
'payee',
"create",
"state",
'amount',
'delay',
'last_update',
# 'detail_id',
)
read_only_fields = ['last_update', 'state', 'create', 'payer'] # , 'detail_id']
def create(self, validated_data):
with atomic():
try:
transaction = Transaction.objects.create_transaction(**validated_data)
transaction.submit()
except IntegrityError as e:
raise APIException('duplicate uuid')
return transaction
class WithdrawSerializer(serializers.ModelSerializer):
uuid = serializers.UUIDField(required=True)
class Meta:
model = Transaction
fields = (
'uuid',
'payer',
'payee',
"create",
"state",
'amount',
'delay',
'last_update',
# 'detail_id',
)
read_only_fields = ['last_update', 'state', 'create', 'payee'] # , 'detail_id']
def create(self, validated_data):
with atomic():
try:
transaction = Transaction.objects.create_transaction(**validated_data)
transaction.submit()
except IntegrityError as e:
raise APIException('duplicate uuid')
return transaction
class WalletSerializer(serializers.ModelSerializer):
class Meta:
model=User
fields = ['balance']