You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

18 lines
796 B
SQL

-- Track when the last WebSocket session ended (last tab closed).
ALTER TABLE heroes ADD COLUMN IF NOT EXISTS ws_disconnected_at TIMESTAMPTZ NULL;
-- Accumulated offline session stats (after grace period); cleared when player opens init.
CREATE TABLE IF NOT EXISTS hero_offline_digest (
hero_id BIGINT PRIMARY KEY REFERENCES heroes(id) ON DELETE CASCADE,
monsters_killed INT NOT NULL DEFAULT 0,
xp_gained BIGINT NOT NULL DEFAULT 0,
gold_gained BIGINT NOT NULL DEFAULT 0,
levels_gained INT NOT NULL DEFAULT 0,
deaths INT NOT NULL DEFAULT 0,
revives INT NOT NULL DEFAULT 0,
loot JSONB NOT NULL DEFAULT '[]'::jsonb,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_hero_offline_digest_updated ON hero_offline_digest (updated_at);