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', '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() 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_gateway = serializers.CharField(default='password') new_password = serializers.CharField(required=True)