neon-sprawl/server/db/migrations/V011__contract_instance.sql

18 lines
790 B
SQL

-- NEO-146: per-player contract instance rows (prototype E7.M4 Slice 4).
CREATE TABLE IF NOT EXISTS contract_instance (
contract_instance_id TEXT NOT NULL PRIMARY KEY,
player_id TEXT NOT NULL REFERENCES player_position(player_id) ON DELETE CASCADE,
template_id TEXT NOT NULL,
status TEXT NOT NULL CHECK (status IN ('active', 'completed', 'expired')),
seed_bucket TEXT NOT NULL,
issued_at TIMESTAMPTZ NOT NULL,
completed_at TIMESTAMPTZ,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE UNIQUE INDEX IF NOT EXISTS idx_contract_instance_one_active_per_player
ON contract_instance (player_id)
WHERE status = 'active';
COMMENT ON TABLE contract_instance IS 'Persisted contract instances per player (NEO-146); at most one active row per player.';