Update registration Step
This commit is contained in:
75
server.py
75
server.py
@@ -59,8 +59,7 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
# Pydantic Models
|
||||
class RegisterRequest(BaseModel):
|
||||
email: EmailStr
|
||||
password: str = Field(min_length=6)
|
||||
# Step 1: Personal & Partner Information
|
||||
first_name: str
|
||||
last_name: str
|
||||
phone: str
|
||||
@@ -74,7 +73,48 @@ class RegisterRequest(BaseModel):
|
||||
partner_last_name: Optional[str] = None
|
||||
partner_is_member: Optional[bool] = False
|
||||
partner_plan_to_become_member: Optional[bool] = False
|
||||
|
||||
# Step 2: Newsletter, Volunteer & Scholarship
|
||||
referred_by_member_name: Optional[str] = None
|
||||
newsletter_publish_name: bool
|
||||
newsletter_publish_photo: bool
|
||||
newsletter_publish_birthday: bool
|
||||
newsletter_publish_none: bool
|
||||
volunteer_interests: List[str] = []
|
||||
scholarship_requested: bool = False
|
||||
scholarship_reason: Optional[str] = None
|
||||
|
||||
# Step 3: Directory Settings
|
||||
show_in_directory: bool = False
|
||||
directory_email: Optional[str] = None
|
||||
directory_bio: Optional[str] = None
|
||||
directory_address: Optional[str] = None
|
||||
directory_phone: Optional[str] = None
|
||||
directory_dob: Optional[datetime] = None
|
||||
directory_partner_name: Optional[str] = None
|
||||
|
||||
# Step 4: Account Credentials
|
||||
email: EmailStr
|
||||
password: str = Field(min_length=6)
|
||||
|
||||
@validator('newsletter_publish_none')
|
||||
def validate_newsletter_preferences(cls, v, values):
|
||||
"""At least one newsletter preference must be selected"""
|
||||
name = values.get('newsletter_publish_name', False)
|
||||
photo = values.get('newsletter_publish_photo', False)
|
||||
birthday = values.get('newsletter_publish_birthday', False)
|
||||
|
||||
if not (name or photo or birthday or v):
|
||||
raise ValueError('At least one newsletter publication preference must be selected')
|
||||
return v
|
||||
|
||||
@validator('scholarship_reason')
|
||||
def validate_scholarship_reason(cls, v, values):
|
||||
"""If scholarship requested, reason must be provided"""
|
||||
requested = values.get('scholarship_requested', False)
|
||||
if requested and not v:
|
||||
raise ValueError('Scholarship reason is required when requesting scholarship')
|
||||
return v
|
||||
|
||||
class LoginRequest(BaseModel):
|
||||
email: EmailStr
|
||||
@@ -179,8 +219,11 @@ async def register(request: RegisterRequest, db: Session = Depends(get_db)):
|
||||
|
||||
# Create user
|
||||
user = User(
|
||||
# Account credentials (Step 4)
|
||||
email=request.email,
|
||||
password_hash=get_password_hash(request.password),
|
||||
|
||||
# Personal information (Step 1)
|
||||
first_name=request.first_name,
|
||||
last_name=request.last_name,
|
||||
phone=request.phone,
|
||||
@@ -190,11 +233,39 @@ async def register(request: RegisterRequest, db: Session = Depends(get_db)):
|
||||
zipcode=request.zipcode,
|
||||
date_of_birth=request.date_of_birth,
|
||||
lead_sources=request.lead_sources,
|
||||
|
||||
# Partner information (Step 1)
|
||||
partner_first_name=request.partner_first_name,
|
||||
partner_last_name=request.partner_last_name,
|
||||
partner_is_member=request.partner_is_member,
|
||||
partner_plan_to_become_member=request.partner_plan_to_become_member,
|
||||
|
||||
# Referral (Step 2)
|
||||
referred_by_member_name=request.referred_by_member_name,
|
||||
|
||||
# Newsletter publication preferences (Step 2)
|
||||
newsletter_publish_name=request.newsletter_publish_name,
|
||||
newsletter_publish_photo=request.newsletter_publish_photo,
|
||||
newsletter_publish_birthday=request.newsletter_publish_birthday,
|
||||
newsletter_publish_none=request.newsletter_publish_none,
|
||||
|
||||
# Volunteer interests (Step 2)
|
||||
volunteer_interests=request.volunteer_interests,
|
||||
|
||||
# Scholarship (Step 2)
|
||||
scholarship_requested=request.scholarship_requested,
|
||||
scholarship_reason=request.scholarship_reason,
|
||||
|
||||
# Directory settings (Step 3)
|
||||
show_in_directory=request.show_in_directory,
|
||||
directory_email=request.directory_email,
|
||||
directory_bio=request.directory_bio,
|
||||
directory_address=request.directory_address,
|
||||
directory_phone=request.directory_phone,
|
||||
directory_dob=request.directory_dob,
|
||||
directory_partner_name=request.directory_partner_name,
|
||||
|
||||
# Status fields
|
||||
status=UserStatus.pending_email,
|
||||
role=UserRole.guest,
|
||||
email_verified=False,
|
||||
|
||||
Reference in New Issue
Block a user