import uuid from datetime import datetime from typing import Literal from pydantic import BaseModel, EmailStr, field_validator class UserRegister(BaseModel): email: EmailStr password: str full_name: str phone: str | None = None # Role requested at registration: 'member' or 'organizer' requested_role: Literal["member", "organizer"] = "member" # Organizer-only fields organization_name: str | None = None instagram_handle: str | None = None @field_validator("organization_name") @classmethod def org_name_required_for_organizer(cls, v, info): if info.data.get("requested_role") == "organizer" and not v: raise ValueError("Organization name is required for organizer registration") return v class UserLogin(BaseModel): email: EmailStr password: str class UserOut(BaseModel): model_config = {"from_attributes": True} id: uuid.UUID email: str full_name: str phone: str | None role: str status: str organization_name: str | None instagram_handle: str | None expo_push_token: str | None created_at: datetime class UserUpdate(BaseModel): full_name: str | None = None phone: str | None = None organization_name: str | None = None instagram_handle: str | None = None expo_push_token: str | None = None