82 lines
2.3 KiB
Python
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)
|