101 lines
2.9 KiB
Python
Executable file
101 lines
2.9 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
|
|
|
|
|
|
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
|