HW-Genie

Hero Wars Automation Toolkit.

View on GitHub

Database Schema

HW-Genie のデータベース構成と各テーブルの説明です。

概要

項目
DB エンジン SQLite (Turso Embedded Replica 同期対応)
ファイル data/hw_genie.db
クラウド Turso hw-genie-db
ORM SQLAlchemy 2.x

テーブル定義

accounts

プレイヤーアカウントの基本情報を保持します。

カラム 制約 説明
id INTEGER PK, AUTOINCREMENT 内部ID
player_id VARCHAR UNIQUE, NOT NULL プレイヤーID(API由来)
alias VARCHAR   アカウント別名(CLIの --account で使用)
player_name VARCHAR   プレイヤー名
level INTEGER   プレイヤーレベル
gold INTEGER   Gold
gems INTEGER   Gems
energy INTEGER   スタミナ
arena_rank INTEGER   アリーナ順位
grand_rank INTEGER   グランドアリーナ順位
last_mission_id INTEGER   最後にレイドしたミッションID
memo VARCHAR   任意メモ(auth --memo で設定)
last_updated DATETIME DEFAULT CURRENT_TIMESTAMP 最終更新日時

account_configs

各アカウントの Key-Value 設定ストア。

カラム 制約 説明
id INTEGER PK, AUTOINCREMENT 内部ID
account_id INTEGER FK -> accounts.id, NOT NULL アカウント参照
config_key VARCHAR NOT NULL Key(下記参照)
config_value JSON   Value(JSON形式)

Unique constraint: (account_id, config_key)

Known config_key values

config_key config_value の型 説明
"headers" dict[str, str] 認証ヘッダー(x-auth-*)
"status" str "success" / "error"
"last_updated" str ISO-8601 タイムスタンプ
"player_{key}" 任意 レガシー: 旧バージョンの保存ロジックが書き込んだ Player 情報(新規書き込みは行われず、SessionManager.load の読み取り互換のためにのみ使用)

run_logs

multi 実行(hwda / hwsa / CLI 直実行 / Docker)1 回ごとの結果サマリーと出力全文。

カラム 制約 説明
id INTEGER PK, AUTOINCREMENT 内部ID
started_at DATETIME NOT NULL 実行開始時刻(UTC)
finished_at DATETIME NOT NULL 実行終了時刻(UTC)
mode VARCHAR NOT NULL ルーチン種別(daily / full / quests / asgard-shop / consumable
status VARCHAR NOT NULL ok / failed(スタミナ切れ等の正常終了は ok。クエスト失敗・consumable 失敗・購入エラー・ステータス取得不能・例外・割り込みは failed
exit_code INTEGER   プロセスの終了コード
accounts JSON NOT NULL アカウント別結果 [{account, ok, error}]error は失敗理由)
error_summary VARCHAR   失敗アカウント一覧とエラー要約(1 件以上失敗した場合のみ)
log_text TEXT   出力全文(ANSI 除去済み)
log_file VARCHAR   対応する data/logs/ のログファイルパス(HWGENIE_LOG_FILE 経由。ラッパーが export した場合のみ記録され、CLI 直実行・Docker では NULL
hostname VARCHAR   実行環境識別子(user@host 形式。HWGENIE_HOST で明示上書き可能。既存行は NULL

古い行は record_run_logcore/run_log.py)が記録のたびに HW_LOG_KEEP_DAYS(デフォルト 7 日、0 で無効化)より古いものを削除します。 閲覧は hw-genie log ls / log show <id>

型定義

コード上では以下の TypedDict でデータ構造を型付けしています(repository.py)。

class HeadersConfig(TypedDict, total=False):
    x_auth_session_id: str
    x_auth_token: str
    x_auth_user_id: str
    x_request_id: str


class PlayerInfo(TypedDict, total=False):
    id: str
    name: str
    level: int
    gold: int
    gems: int
    energy: int
    arena_rank: int
    grand_rank: int


class AccountData(TypedDict, total=False):
    headers: HeadersConfig
    player: PlayerInfo
    status: str
    last_updated: str
    last_item_raid_mission_id: int
    memo: str

データフロー

Read

SessionManager.load(alias)
  → SessionRepository.get_data(alias)
    → Account (alias で検索)
    → AccountConfig (account_id で一括取得)
    → 各 config_key を data dict にマージ(`player_*` はレガシー行として player_info へ再構成)
    → Account カラムを player_info にオーバーレイ
    → AccountData を返す

Write

SessionManager.save(alias, data)
  → SessionRepository.update_config(alias, data)
    → Account: 存在確認 / 作成 → カラム更新
    → AccountConfig: 各 key を upsert
    → commit (write_lock で排他制御)