Some checks failed
Release / release (push) Has been cancelled
Full-stack dashboard for controlling, automating, and analyzing Artifacts MMO characters via the game's HTTP API. Backend (FastAPI): - Async Artifacts API client with rate limiting and retry - 6 automation strategies (combat, gathering, crafting, trading, task, leveling) - Automation engine with runner, manager, cooldown tracker, pathfinder - WebSocket relay (game server -> frontend) - Game data cache, character snapshots, price history, analytics - 9 API routers, 7 database tables, 3 Alembic migrations - 108 unit tests Frontend (Next.js 15 + shadcn/ui): - Live character dashboard with HP/XP bars and cooldowns - Character detail with stats, equipment, inventory, skills, manual actions - Automation management with live log streaming - Interactive canvas map with content-type coloring and zoom/pan - Bank management, Grand Exchange with price charts - Events, logs, analytics pages with Recharts - WebSocket auto-reconnect with query cache invalidation - Settings page, error boundaries, dark theme Infrastructure: - Docker Compose (dev + prod) - GitHub Actions CI/CD - Documentation (Architecture, Automation, Deployment, API)
51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
"""Pydantic schemas for Grand Exchange responses."""
|
|
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class OrderResponse(BaseModel):
|
|
"""A single GE order."""
|
|
|
|
id: str = ""
|
|
code: str = ""
|
|
quantity: int = 0
|
|
price: int = 0
|
|
order: str = Field(default="", description="Order type: 'buy' or 'sell'")
|
|
created_at: datetime | None = None
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class PriceHistoryResponse(BaseModel):
|
|
"""A single price history entry."""
|
|
|
|
id: int
|
|
item_code: str
|
|
buy_price: float | None = None
|
|
sell_price: float | None = None
|
|
volume: int = 0
|
|
captured_at: datetime | None = None
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class PriceHistoryListResponse(BaseModel):
|
|
"""Response for price history queries."""
|
|
|
|
item_code: str
|
|
days: int
|
|
entries: list[PriceHistoryResponse] = Field(default_factory=list)
|
|
|
|
|
|
class ExchangeOrdersResponse(BaseModel):
|
|
"""Response wrapping a list of GE orders."""
|
|
|
|
orders: list[dict] = Field(default_factory=list)
|
|
|
|
|
|
class ExchangeHistoryResponse(BaseModel):
|
|
"""Response wrapping GE transaction history."""
|
|
|
|
history: list[dict] = Field(default_factory=list)
|