Spaces:
Sleeping
Sleeping
Commit ·
fbc46d2
1
Parent(s): 918926f
refactor(user_schema): remove deprecated otpIdentifer and add mode validation
Browse filesAdd validation for required fields based on registration mode (OTP/OAuth) and remove deprecated otpIdentifer field
- 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 |
-
|
| 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('
|
| 29 |
-
def
|
| 30 |
-
if v
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
if not
|
| 37 |
-
raise ValueError('
|
| 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)
|