30 lines
1.2 KiB
SQL
30 lines
1.2 KiB
SQL
CREATE TABLE module_versions (
|
|
module_id TEXT NOT NULL,
|
|
version TEXT NOT NULL,
|
|
game_id TEXT NOT NULL,
|
|
abi TEXT NOT NULL,
|
|
manifest_json TEXT NOT NULL,
|
|
wasm_sha256 TEXT NOT NULL CHECK (length(wasm_sha256) = 64),
|
|
wasm_size_bytes INTEGER NOT NULL CHECK (wasm_size_bytes > 0),
|
|
source TEXT NOT NULL CHECK (source IN ('bundled', 'uploaded')),
|
|
installed_at TEXT NOT NULL,
|
|
PRIMARY KEY (module_id, version)
|
|
);
|
|
|
|
CREATE TABLE instance_module_bindings (
|
|
instance_id TEXT PRIMARY KEY REFERENCES instances(id) ON DELETE CASCADE,
|
|
module_id TEXT NOT NULL,
|
|
module_version TEXT NOT NULL,
|
|
port_id TEXT NOT NULL,
|
|
enabled INTEGER NOT NULL DEFAULT 0 CHECK (enabled IN (0, 1)),
|
|
configuration_json TEXT NOT NULL DEFAULT '{}',
|
|
secret_references_json TEXT NOT NULL DEFAULT '{}',
|
|
last_health TEXT NOT NULL DEFAULT 'unknown' CHECK (last_health IN ('ready', 'degraded', 'offline', 'unknown')),
|
|
last_error_code TEXT,
|
|
activated_at TEXT,
|
|
updated_at TEXT NOT NULL,
|
|
FOREIGN KEY (module_id, module_version) REFERENCES module_versions(module_id, version) ON DELETE RESTRICT
|
|
);
|
|
|
|
CREATE INDEX instance_module_health_idx ON instance_module_bindings(enabled, last_health);
|