Files
panel/controller/internal/db/migrations/012_empyrion.sql
T
dbledeez a00bd620a1 Panel — public source drop (v0.9.0)
Self-hostable game-server control panel: controller + agent + 26 game
modules. One-line install (prebuilt release, no Go required):

  curl -fsSL https://git.pdxtechs.com/dbledeez/panel/raw/branch/main/install.sh | sudo bash

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 21:17:39 -07:00

67 lines
2.8 KiB
SQL

-- Empyrion EAH-style features. Three tables:
--
-- 1. empyrion_events — append-only log of unsolicited Event_* packages
-- streamed from the bridge. Powers the player-history view, chat log,
-- and the "what happened while I was away" overview.
--
-- 2. empyrion_inv_templates — operator-defined inventory kits (name +
-- JSON list of {itemId, count}). Click "Apply" on a player row to
-- drop the whole kit via Request_Player_AddItem fan-out.
--
-- 3. empyrion_known_players — projected from empyrion_events. Cached
-- last-seen / first-seen / login count for the players-list view so
-- we don't aggregate the events table on every refresh.
--
-- All tables are scoped by instance_id so two running empyrion instances
-- on the same agent (rare but allowed) keep separate state.
CREATE TABLE IF NOT EXISTS empyrion_events (
id BIGSERIAL PRIMARY KEY,
instance_id TEXT NOT NULL,
ts TIMESTAMPTZ NOT NULL DEFAULT NOW(),
cmd TEXT NOT NULL,
player_id INTEGER,
steam_id TEXT,
player_name TEXT,
playfield TEXT,
msg TEXT,
raw JSONB
);
CREATE INDEX IF NOT EXISTS empyrion_events_instance_ts
ON empyrion_events (instance_id, ts DESC);
CREATE INDEX IF NOT EXISTS empyrion_events_player_ts
ON empyrion_events (player_id, ts DESC) WHERE player_id IS NOT NULL;
CREATE INDEX IF NOT EXISTS empyrion_events_steam_ts
ON empyrion_events (steam_id, ts DESC) WHERE steam_id IS NOT NULL;
CREATE INDEX IF NOT EXISTS empyrion_events_cmd
ON empyrion_events (instance_id, cmd, ts DESC);
CREATE TABLE IF NOT EXISTS empyrion_inv_templates (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
description TEXT NOT NULL DEFAULT '',
items JSONB NOT NULL DEFAULT '[]'::jsonb,
-- items shape: [{ "itemId": 4307, "count": 1, "ammo": 0, "decay": 0 }, ...]
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS empyrion_inv_templates_name
ON empyrion_inv_templates (name);
CREATE TABLE IF NOT EXISTS empyrion_known_players (
instance_id TEXT NOT NULL,
player_id INTEGER NOT NULL,
steam_id TEXT NOT NULL DEFAULT '',
player_name TEXT NOT NULL DEFAULT '',
first_seen TIMESTAMPTZ NOT NULL DEFAULT NOW(),
last_seen TIMESTAMPTZ NOT NULL DEFAULT NOW(),
login_count INTEGER NOT NULL DEFAULT 0,
last_playfield TEXT NOT NULL DEFAULT '',
notes TEXT NOT NULL DEFAULT '',
PRIMARY KEY (instance_id, player_id)
);
CREATE INDEX IF NOT EXISTS empyrion_known_players_steam
ON empyrion_known_players (steam_id) WHERE steam_id != '';
CREATE INDEX IF NOT EXISTS empyrion_known_players_lastseen
ON empyrion_known_players (instance_id, last_seen DESC);