Add comprehensive API documentation for user management endpoints including profile updates, user listing, and admin user management features. Update appointment model to include additional status options (completed, cancelled) and add max_length constraint to email field. Change appointment creation endpoint to require user authentication instead of being public. Changes: - Add API docs for update_profile, get_profile, all-users endpoints - Add API docs for activate-deactivate-user and delete-user admin endpoints - Update appointment creation to require authentication - Add 'completed' and 'cancelled' status options to Appointment model - Add max_length constraint to EncryptedEmailField - Regenerate initial migration with updated model definitions
56 lines
2.3 KiB
Python
56 lines
2.3 KiB
Python
from rest_framework import serializers
|
|
from django.contrib.auth.password_validation import validate_password
|
|
from .models import CustomUser, UserProfile
|
|
|
|
class UserProfileSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = UserProfile
|
|
fields = ['bio', 'timezone', 'created_at', 'updated_at']
|
|
|
|
class UserRegistrationSerializer(serializers.ModelSerializer):
|
|
password = serializers.CharField(write_only=True, required=True, validators=[validate_password])
|
|
password2 = serializers.CharField(write_only=True, required=True)
|
|
|
|
class Meta:
|
|
model = CustomUser
|
|
fields = ('email', 'first_name', 'last_name', 'phone_number', 'password', 'password2')
|
|
|
|
def validate(self, attrs):
|
|
if attrs['password'] != attrs['password2']:
|
|
raise serializers.ValidationError({"password": "Password fields didn't match."})
|
|
return attrs
|
|
|
|
def create(self, validated_data):
|
|
validated_data.pop('password2')
|
|
password = validated_data.pop('password')
|
|
|
|
user = CustomUser.objects.create_user(**validated_data)
|
|
user.set_password(password)
|
|
user.is_active = True
|
|
user.isVerified = False
|
|
user.save()
|
|
|
|
return user
|
|
|
|
class ForgotPasswordSerializer(serializers.Serializer):
|
|
email = serializers.EmailField(required=True)
|
|
|
|
class VerifyPasswordResetOTPSerializer(serializers.Serializer):
|
|
email = serializers.EmailField(required=True)
|
|
otp = serializers.CharField(required=True, max_length=6)
|
|
|
|
class ResetPasswordSerializer(serializers.Serializer):
|
|
email = serializers.EmailField(required=True)
|
|
otp = serializers.CharField(required=True, max_length=6)
|
|
new_password = serializers.CharField(required=True, write_only=True, validators=[validate_password])
|
|
confirm_password = serializers.CharField(required=True, write_only=True)
|
|
|
|
def validate(self, attrs):
|
|
if attrs['new_password'] != attrs['confirm_password']:
|
|
raise serializers.ValidationError({"password": "Password fields didn't match."})
|
|
return attrs
|
|
|
|
class UserSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = CustomUser
|
|
fields = ('id', 'email', 'first_name', 'last_name', 'phone_number', 'isVerified', 'date_joined', 'last_login', 'is_staff', 'is_superuser', 'is_active') |