From 8c2be24f414ffd774bf751d37fcea8235af54eaa Mon Sep 17 00:00:00 2001 From: Mostafa Asaad Date: Thu, 16 Apr 2026 21:24:43 +0200 Subject: [PATCH] feat: add specialty validation for doctor signup --- ...r_date_of_birth_alter_user_phone_number.py | 24 +++++++++++++++++++ users/serializers.py | 14 +++++------ users/views.py | 5 ++-- 3 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 users/migrations/0007_alter_user_date_of_birth_alter_user_phone_number.py diff --git a/users/migrations/0007_alter_user_date_of_birth_alter_user_phone_number.py b/users/migrations/0007_alter_user_date_of_birth_alter_user_phone_number.py new file mode 100644 index 0000000..a7e1f2f --- /dev/null +++ b/users/migrations/0007_alter_user_date_of_birth_alter_user_phone_number.py @@ -0,0 +1,24 @@ +# Generated by Django 5.2.13 on 2026-04-15 12:12 + +import users.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0006_user_optional_phone_and_dob'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='date_of_birth', + field=models.DateField(blank=True, null=True, validators=[users.models.validate_date_of_birth]), + ), + migrations.AlterField( + model_name='user', + name='phone_number', + field=models.CharField(blank=True, max_length=11, null=True, validators=[users.models.validate_phone_number]), + ), + ] diff --git a/users/serializers.py b/users/serializers.py index a3a3183..21cc6fe 100644 --- a/users/serializers.py +++ b/users/serializers.py @@ -1,7 +1,6 @@ from __future__ import annotations import logging -from dataclasses import dataclass from datetime import date from django.contrib.auth import authenticate, get_user_model, password_validation @@ -19,12 +18,6 @@ logger = logging.getLogger(__name__) -@dataclass(frozen=True) -class TokenPair: - access: str - refresh: str - - class TokenRefreshRequestSerializer(serializers.Serializer): refresh = serializers.CharField(help_text="Valid refresh token.") @@ -60,6 +53,7 @@ class Meta: "phone_number", "date_of_birth", "role", + "specialty", ] def validate_date_of_birth(self, value: date) -> date: @@ -69,6 +63,12 @@ def validate_date_of_birth(self, value: date) -> date: raise serializers.ValidationError("dateOfBirth must be in the past.") return value + def validate(self, attrs: dict) -> dict: + role: str = attrs.get("role", "") + if role == "doctor" and not str(attrs.get("specialty") or "").strip(): + raise serializers.ValidationError({"specialty": "specialty is required for doctor signup."}) + return attrs + def validate_password(self, value: str) -> str: try: password_validation.validate_password(value) diff --git a/users/views.py b/users/views.py index 057aed6..38c25d2 100644 --- a/users/views.py +++ b/users/views.py @@ -15,7 +15,6 @@ from drf_spectacular.utils import extend_schema from users.google_oauth_service import GoogleOAuthService, GoogleOneTimeCodePayload -from users.models import User from users.permissions import IsApproved from users.password_otp import verify_otp from users.serializers import ( @@ -34,11 +33,11 @@ SignupSerializer, UserMeSerializer, ) - -User = get_user_model() from django.contrib.auth.models import Group from users.welcome_email import send_welcome_email +User = get_user_model() + class SignupView(APIView): permission_classes = [AllowAny]