from django.contrib.auth import get_user_model from rest_framework import serializers from apps.accounts.models import OtpChannel, PhoneOTP User = get_user_model() class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ["id", "email", "phone_number", "first_name", "last_name", "role", "is_phone_verified"] read_only_fields = ["id", "role", "is_phone_verified"] class RegisterSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True, min_length=8) class Meta: model = User fields = ["email", "password", "phone_number", "first_name", "last_name"] def create(self, validated_data): return User.objects.create_user(**validated_data) class OTPRequestSerializer(serializers.Serializer): phone_number = serializers.CharField(max_length=20) channel = serializers.ChoiceField(choices=OtpChannel.choices) class OTPVerifySerializer(serializers.Serializer): request_id = serializers.UUIDField() code = serializers.CharField(max_length=6) class OTPStatusSerializer(serializers.ModelSerializer): class Meta: model = PhoneOTP fields = ["id", "phone_number", "channel", "provider", "created_at", "expires_at", "verified_at"] read_only_fields = fields