from datetime import datetime from typing import Optional from pydantic import BaseModel class EmergencyContactSchema(BaseModel): name: str = "" relation: str = "" phone: str = "" class UserProfileUpdate(BaseModel): name: Optional[str] = None age: Optional[int] = None phone: Optional[str] = None height: Optional[float] = None pre_pregnancy_weight: Optional[float] = None current_weight: Optional[float] = None blood_type: Optional[str] = None allergies: Optional[list[str]] = None medical_history: Optional[list[str]] = None last_period_date: Optional[datetime] = None due_date: Optional[datetime] = None pregnancy_week: Optional[int] = None pregnancy_day: Optional[int] = None multiple_pregnancy: Optional[str] = None pregnancy_count: Optional[int] = None emergency_contact: Optional[EmergencyContactSchema] = None avatar_url: Optional[str] = None class OnboardingRequest(BaseModel): name: Optional[str] = "" age: Optional[int] = None height: Optional[float] = None pre_pregnancy_weight: Optional[float] = None current_weight: Optional[float] = None blood_type: Optional[str] = None allergies: list[str] = [] medical_history: list[str] = [] last_period_date: Optional[datetime] = None due_date: Optional[datetime] = None pregnancy_week: Optional[int] = None pregnancy_day: Optional[int] = None multiple_pregnancy: Optional[str] = None pregnancy_count: Optional[int] = None emergency_contact: Optional[EmergencyContactSchema] = None class UserProfileResponse(BaseModel): id: str name: str phone: Optional[str] age: Optional[int] height: Optional[float] pre_pregnancy_weight: Optional[float] current_weight: Optional[float] blood_type: Optional[str] allergies: list[str] medical_history: list[str] last_period_date: Optional[datetime] due_date: Optional[datetime] pregnancy_week: Optional[int] pregnancy_day: Optional[int] multiple_pregnancy: Optional[str] pregnancy_count: Optional[int] emergency_contact: Optional[EmergencyContactSchema] is_onboarded: bool avatar_url: Optional[str] created_at: datetime