180 lines
2.9 KiB
Python
180 lines
2.9 KiB
Python
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
|