This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import type Database from 'better-sqlite3';
|
||||
|
||||
/** Accounts, receipts and audit evidence deliberately outlive matches and servers. */
|
||||
export function migrateAfk(handle: Database.Database): void {
|
||||
handle.exec(`
|
||||
CREATE TABLE IF NOT EXISTS afk_accounts (
|
||||
guid TEXT PRIMARY KEY, free_seconds INTEGER NOT NULL CHECK(free_seconds >= 0),
|
||||
saved_seconds INTEGER NOT NULL DEFAULT 0 CHECK(saved_seconds >= 0),
|
||||
free_started_at INTEGER NOT NULL, active_seconds INTEGER NOT NULL DEFAULT 0,
|
||||
kill_progress INTEGER NOT NULL DEFAULT 0, headshot_progress INTEGER NOT NULL DEFAULT 0,
|
||||
bonus_hour INTEGER NOT NULL DEFAULT 0, bonus_seconds INTEGER NOT NULL DEFAULT 0
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS afk_operations (
|
||||
server TEXT NOT NULL, request_id TEXT NOT NULL, instance_id TEXT NOT NULL,
|
||||
guid TEXT NOT NULL, fingerprint TEXT NOT NULL, result TEXT NOT NULL,
|
||||
created_at TEXT NOT NULL, PRIMARY KEY(server,request_id)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS afk_progress (
|
||||
instance_id TEXT NOT NULL, match_key TEXT NOT NULL, guid TEXT NOT NULL,
|
||||
seq INTEGER NOT NULL, active_seconds INTEGER NOT NULL, kills INTEGER NOT NULL,
|
||||
headshots INTEGER NOT NULL, rounds INTEGER NOT NULL, revives INTEGER NOT NULL,
|
||||
PRIMARY KEY(instance_id,match_key,guid)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS afk_bonus_rewards (
|
||||
guid TEXT NOT NULL, active_second INTEGER NOT NULL, seconds INTEGER NOT NULL
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS afk_bonus_rewards_guid ON afk_bonus_rewards(guid,active_second);
|
||||
CREATE TABLE IF NOT EXISTS afk_sessions (
|
||||
session_id TEXT PRIMARY KEY, server TEXT NOT NULL, instance_id TEXT NOT NULL,
|
||||
guid TEXT NOT NULL, match_key TEXT NOT NULL, match_id INTEGER,
|
||||
state TEXT NOT NULL CHECK(state IN ('reserved','started','settled','unresolved','corrected')),
|
||||
authorized_seconds INTEGER NOT NULL, free_seconds INTEGER NOT NULL,
|
||||
saved_seconds INTEGER NOT NULL, free_started_at INTEGER NOT NULL,
|
||||
consumed_seconds INTEGER, charged_seconds INTEGER, free_charge_at INTEGER, confirmed_seconds INTEGER NOT NULL DEFAULT 0,
|
||||
end_reason TEXT, created_at TEXT NOT NULL, started_at TEXT, ended_at TEXT
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS afk_pending_guid ON afk_sessions(guid)
|
||||
WHERE state IN ('reserved','started','unresolved');
|
||||
CREATE TABLE IF NOT EXISTS afk_ledger (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT, guid TEXT NOT NULL, server TEXT NOT NULL,
|
||||
match_id INTEGER, operation_id TEXT NOT NULL, session_id TEXT,
|
||||
kind TEXT NOT NULL, free_delta INTEGER NOT NULL, saved_delta INTEGER NOT NULL,
|
||||
free_seconds INTEGER NOT NULL, saved_seconds INTEGER NOT NULL,
|
||||
event_at TEXT NOT NULL, created_at TEXT NOT NULL, details TEXT NOT NULL DEFAULT '{}'
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS afk_ledger_guid ON afk_ledger(guid,id DESC);
|
||||
CREATE INDEX IF NOT EXISTS afk_sessions_guid ON afk_sessions(guid,created_at DESC);
|
||||
`);
|
||||
}
|
||||
Reference in New Issue
Block a user