from pydantic import BaseModel, ConfigDict from typing import List, Optional from datetime import datetime # Heir Schemas class HeirBase(BaseModel): name: str class HeirCreate(HeirBase): pass class HeirOut(HeirBase): id: int user_id: int model_config = ConfigDict(from_attributes=True) # User Schemas class UserCreate(BaseModel): username: str password: str email: str class UserLogin(BaseModel): username: str password: str class UserOut(BaseModel): id: int username: str public_key: Optional[str] = None is_admin: bool = False guale: bool = False tier: Optional[str] = None tier_expires_at: Optional[datetime] = None last_active_at: Optional[datetime] = None #heirs: List[HeirOut] = [] model_config = ConfigDict(from_attributes=True) class LoginResponse(BaseModel): access_token: str token_type: str user: UserOut # Asset Schemas (renamed from Article) class AssetBase(BaseModel): title: str type: Optional[str] = "note" class AssetCreate(AssetBase): private_key_shard: str content_inner_encrypted: str class AssetOut(AssetBase): id: int author_id: int private_key_shard: str content_outer_encrypted: str created_at: Optional[datetime] = None updated_at: Optional[datetime] = None heir_id: Optional[int] = None heir_email: Optional[str] = None model_config = ConfigDict(from_attributes=True) class AssetClaim(BaseModel): asset_id: int private_key_shard: str class AssetClaimOut(AssetClaim): id: int result: str class AssetAssign(BaseModel): asset_id: int heir_email: str class AssetDelete(BaseModel): asset_id: int class DeclareGuale(BaseModel): username: str # AI Proxy Schemas class AIMessage(BaseModel): role: str content: str class AIRequest(BaseModel): messages: List[AIMessage] model: Optional[str] = None class AIResponse(BaseModel): id: str object: str created: int model: str choices: List[dict] usage: dict # Subscription Plans Schemas class SubscriptionPlansBase(BaseModel): name: str max_heirs: int weekly_token_limit: int max_assets: int max_storage_mb: int can_use_ai_proxy: bool description: Optional[str] = None class SubscriptionPlansOut(SubscriptionPlansBase): id: int model_config = ConfigDict(from_attributes=True) # AI Role Schemas class AIRoleBase(BaseModel): id: int name: str description: str systemPrompt: str icon: str iconFamily: str class AIRoleOut(AIRoleBase): model_config = ConfigDict(from_attributes=True)