26 lines
1.0 KiB
SQL
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;
|