MukeshKapoor25 commited on
Commit
fbc46d2
·
1 Parent(s): 918926f

refactor(user_schema): remove deprecated otpIdentifer and add mode validation

Browse files

Add validation for required fields based on registration mode (OTP/OAuth) and remove deprecated otpIdentifer field

Files changed (1) hide show
  1. app/schemas/user_schema.py +13 -14
app/schemas/user_schema.py CHANGED
@@ -8,11 +8,10 @@ class UserRegisterRequest(BaseModel):
8
  name: str
9
  email: EmailStr # Mandatory for all registration modes
10
  phone: str # Mandatory for all registration modes (always used as OTP identifier)
11
- otpIdentifer: Optional[str] = None # Deprecated - phone is always the OTP identifier
12
- otp: Optional[str] = None
13
  dob: Optional[str] = None # ISO format date string
14
- oauth_token: Optional[str] = None
15
- provider: Optional[Literal["google", "apple", "facebook"]] = None
16
  mode: Literal["otp", "oauth"]
17
 
18
  @validator('phone')
@@ -25,16 +24,16 @@ class UserRegisterRequest(BaseModel):
25
  raise ValueError('Invalid phone number format')
26
  return v
27
 
28
- @validator('otpIdentifer')
29
- def validate_otp_identifier(cls, v):
30
- if v is not None:
31
- # Check if it's either email or phone
32
- email_pattern = r"[^@]+@[^@]+\.[^@]+"
33
- phone_cleaned = re.sub(r'[^\d+]', '', v)
34
- phone_pattern = r'^\+?[1-9]\d{7,14}$'
35
-
36
- if not (re.match(email_pattern, v) or re.match(phone_pattern, phone_cleaned)):
37
- raise ValueError('OTP identifier must be a valid email address or phone number')
38
  return v
39
 
40
  # Used in login form (optional display name prefilled from local storage)
 
8
  name: str
9
  email: EmailStr # Mandatory for all registration modes
10
  phone: str # Mandatory for all registration modes (always used as OTP identifier)
11
+ otp: Optional[str] = None # Required for OTP mode
 
12
  dob: Optional[str] = None # ISO format date string
13
+ oauth_token: Optional[str] = None # Required for OAuth mode
14
+ provider: Optional[Literal["google", "apple", "facebook"]] = None # Required for OAuth mode
15
  mode: Literal["otp", "oauth"]
16
 
17
  @validator('phone')
 
24
  raise ValueError('Invalid phone number format')
25
  return v
26
 
27
+ @validator('mode')
28
+ def validate_mode_dependent_fields(cls, v, values):
29
+ if v == "otp":
30
+ if not values.get('otp'):
31
+ raise ValueError('OTP is required for OTP registration mode')
32
+ elif v == "oauth":
33
+ if not values.get('oauth_token'):
34
+ raise ValueError('OAuth token is required for OAuth registration mode')
35
+ if not values.get('provider'):
36
+ raise ValueError('Provider is required for OAuth registration mode')
37
  return v
38
 
39
  # Used in login form (optional display name prefilled from local storage)