1CREATE TABLE IF NOT EXISTS games (2 id TEXT PRIMARY KEY,3 seed TEXT NOT NULL,4 width INTEGER NOT NULL,5 height INTEGER NOT NULL,6 mine_count INTEGER NOT NULL,7 mines TEXT NOT NULL,8 revealed TEXT NOT NULL,9 flags TEXT NOT NULL,10 status TEXT NOT NULL CHECK (status IN ('playing', 'won', 'lost')),11 revision INTEGER NOT NULL DEFAULT 0,12 exploded_index INTEGER,13 certified_no_guess INTEGER NOT NULL DEFAULT 0,14 created_at TEXT NOT NULL,15 updated_at TEXT NOT NULL16);1718CREATE TABLE IF NOT EXISTS moves (19 game_id TEXT NOT NULL,20 revision INTEGER NOT NULL,21 intent TEXT NOT NULL DEFAULT '',22 action_json TEXT NOT NULL,23 event_json TEXT NOT NULL,24 created_at TEXT NOT NULL,25 PRIMARY KEY (game_id, revision),26 FOREIGN KEY (game_id) REFERENCES games(id) ON DELETE CASCADE27);2829CREATE INDEX IF NOT EXISTS idx_games_updated_at ON games(updated_at);30CREATE INDEX IF NOT EXISTS idx_moves_game_revision ON moves(game_id, revision);