Files
prod/migrations/20261010180000_create_game_exports.sql
2026-10-11 01:47:03 +07:00

26 lines
1.0 KiB
SQL

-- +goose Up
CREATE TABLE game_exports (
id TEXT PRIMARY KEY,
game_id INTEGER REFERENCES games(id) ON DELETE SET NULL,
initiator_id INTEGER REFERENCES users(id) ON DELETE SET NULL,
state TEXT NOT NULL DEFAULT 'preparing' CHECK (state IN ('preparing', 'ready', 'failed')),
snapshot JSONB NOT NULL,
source_server TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp(),
owner_id TEXT,
lease_until TIMESTAMPTZ,
package_id TEXT NOT NULL DEFAULT '',
size BIGINT NOT NULL DEFAULT 0,
sha256 TEXT NOT NULL DEFAULT '',
object_key TEXT NOT NULL UNIQUE,
failure TEXT NOT NULL DEFAULT '',
cleaned_at TIMESTAMPTZ,
CHECK (state <> 'ready' OR (package_id <> '' AND size > 0 AND sha256 <> ''))
);
CREATE UNIQUE INDEX game_exports_active ON game_exports(game_id) WHERE state IN ('preparing', 'ready');
CREATE INDEX game_exports_game ON game_exports(game_id, created_at DESC);
CREATE INDEX game_exports_pending ON game_exports(created_at) WHERE state = 'preparing';
-- +goose Down
DROP TABLE game_exports;