from datetime import datetime from typing import Optional from pydantic import BaseModel, EmailStr, Field # Shared properties class UserBase(BaseModel): email: Optional[EmailStr] = None is_active: Optional[bool] = True is_superuser: Optional[bool] = False full_name: Optional[str] = None # Properties to receive on user creation class UserCreate(BaseModel): email: EmailStr password: str = Field(..., min_length=8) full_name: Optional[str] = None # Properties to receive on user update class UserUpdate(UserBase): password: Optional[str] = Field(None, min_length=8) # Properties to return to client class User(UserBase): id: str email_verified: bool created_at: datetime updated_at: Optional[datetime] = None last_login: Optional[datetime] = None class Config: from_attributes = True # Properties to return to admin users class UserAdminRead(User): pass # Properties for user login class UserLogin(BaseModel): email: EmailStr password: str # Token response schema class Token(BaseModel): access_token: str token_type: str = "bearer" # Token payload schema class TokenPayload(BaseModel): sub: str exp: datetime