wallet/apps/users/serializers.py
2019-11-14 12:32:11 +03:30

82 lines
2.3 KiB
Python

from django.contrib.auth.models import Group
from rest_framework import serializers
from apps.users.models import User
from django.utils import timezone
# public data
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('avatar', 'name', 'username', 'email', "first_name", "last_name", "code")
read_only_fields = ['avatar', 'name', 'username', 'email', 'first_name', 'last_name']
def to_internal_value(self, data):
code = data.get('code')
if code:
return User.objects.get(code=code)
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = (
"code",
'username',
'email',
'phone_number',
"first_name",
"last_name",
'name',
'balance',
'avatar',
'iban',
'iban_verified',
)
read_only_fields = ['code', 'balance', 'email', 'phone_number', 'iban_verified']
class RequestOTPSerializer(serializers.ModelSerializer):
phone_number = serializers.CharField(required=True)
ttl = serializers.SerializerMethodField()
class Meta:
model = User
fields = (
'phone_number',
'otp_expire',
'ttl'
)
read_only_fields = ['otp_expire', 'ttl']
write_only_fields = []
def save(self, **kwargs):
validated_data = self.validated_data
user = User.objects.filter(phone_number=validated_data['phone_number']).first()
if not user:
user = User.objects.create_user(**validated_data)
if not user.otp_is_valid():
user.set_otp(with_save=True)
user.send_otp()
self.instance = user
return user
def get_ttl(self, obj: User):
if obj.otp_expire > timezone.now():
ttl = obj.otp_expire - timezone.now()
result = ttl.total_seconds()
else:
result = 0
return result
class ChangePasswordSerializer(serializers.Serializer):
old_password = serializers.CharField(required=True)
old_password_gateway = serializers.CharField(default='password')
new_password = serializers.CharField(required=True)