18 lines
790 B
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.';
|