wallet/apps/users/serializers.py
2020-11-15 13:33:26 +03:30

85 lines
2.3 KiB
Python

from rest_framework import serializers
from apps.users.models import User
from django.utils import timezone
class PublicUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('avatar', 'name', 'username', "first_name", "last_name", "uuid")
read_only_fields = ['avatar', 'name', 'username', 'first_name', 'last_name', "uuid"]
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = (
"uuid",
'username',
'email',
'phone_number',
"first_name",
"last_name",
'name',
'balance',
'avatar',
'iban',
'iban_verified',
# 'country',
'province',
'province_name',
'city',
'city_name',
'postal_code',
'address',
)
read_only_fields = ['uuid', 'balance', 'email', 'phone_number', 'iban_verified', 'province_name', 'city_name',]
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):
# TODO: move it to query set
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()
user.save()
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_field = serializers.CharField(default='password')
new_password = serializers.CharField(required=True)