23 lines
950 B
SQL
23 lines
950 B
SQL
-- +goose Up
|
|
CREATE TABLE game_imports (
|
|
id TEXT PRIMARY KEY,
|
|
package_id TEXT NOT NULL,
|
|
source_server TEXT NOT NULL,
|
|
source_game_id INTEGER NOT NULL,
|
|
sha256 TEXT NOT NULL,
|
|
initiator_id INTEGER REFERENCES users(id) ON DELETE SET NULL,
|
|
manifest JSONB NOT NULL,
|
|
original_data JSONB NOT NULL,
|
|
mappings JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
object_keys TEXT[] NOT NULL,
|
|
state TEXT NOT NULL DEFAULT 'preparing' CHECK (state IN ('preparing', 'ready', 'failed')),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp(),
|
|
lease_until TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp() + INTERVAL '2 minutes',
|
|
cleaned_at TIMESTAMPTZ
|
|
);
|
|
CREATE UNIQUE INDEX game_imports_active_package ON game_imports(package_id) WHERE state IN ('preparing', 'ready');
|
|
CREATE UNIQUE INDEX game_imports_active_game ON game_imports(source_game_id) WHERE state IN ('preparing', 'ready');
|
|
|
|
-- +goose Down
|
|
DROP TABLE game_imports;
|