from decimal import Decimal from pydantic import BaseModel, EmailStr from datetime import datetime, date from typing import Optional, List # ── Auth ── class RegisterRequest(BaseModel): email: str password: str class LoginRequest(BaseModel): email: str password: str class TokenResponse(BaseModel): access_token: str refresh_token: Optional[str] = None token_type: str = "bearer" class RefreshRequest(BaseModel): refresh_token: str class ForgotPasswordRequest(BaseModel): email: str class ResetPasswordRequest(BaseModel): token: str new_password: str class UserResponse(BaseModel): id: str email: str balance: Decimal status: str created_at: datetime class Config: from_attributes = True # ── API Key ── class CreateKeyRequest(BaseModel): name: str = "" class ApiKeyResponse(BaseModel): id: str name: str key_prefix: str key_suffix: str status: str created_at: datetime class Config: from_attributes = True class ApiKeyCreatedResponse(BaseModel): id: str name: str key: str key_prefix: str key_suffix: str created_at: datetime # ── Wallet ── class RedeemCodeRequest(BaseModel): code: str class TransactionResponse(BaseModel): id: str type: str amount: Decimal balance_after: Decimal reference_id: str created_at: datetime class Config: from_attributes = True class BalanceResponse(BaseModel): balance: Decimal # ── Models ── class ModelPricingResponse(BaseModel): id: int model_name: str provider: str input_price_per_1k: Decimal output_price_per_1k: Decimal status: str updated_at: datetime class Config: from_attributes = True # ── Example (legacy) ── class ExampleCreate(BaseModel): name: str description: str = "" class ExampleResponse(BaseModel): id: str name: str description: str created_at: datetime # ── Common ── class MessageResponse(BaseModel): message: str # ── Usage ── class UsageSummaryResponse(BaseModel): today_tokens: int today_cost: Decimal month_tokens: int month_cost: Decimal total_requests: int class DailyUsageResponse(BaseModel): date: date total_tokens: int cost: Decimal requests: int class ModelUsageResponse(BaseModel): model: str total_tokens: int cost: Decimal requests: int class KeyUsageResponse(BaseModel): key_id: str key_name: str key_prefix: str key_suffix: str total_tokens: int cost: Decimal requests: int class UsageLogResponse(BaseModel): id: int key_id: str model: str prompt_tokens: int completion_tokens: int total_tokens: int cost: Decimal request_time: datetime status: str class Config: from_attributes = True