CREATE TABLE playback_decisions ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), user_id uuid NOT NULL REFERENCES users(id), media_id uuid NOT NULL, library_id uuid NOT NULL, source_id uuid NOT NULL, device_id text NOT NULL, route_id text, allowed boolean NOT NULL, deny_code text, max_bitrate bigint NOT NULL DEFAULT 0 CHECK (max_bitrate >= 0), allow_download boolean NOT NULL DEFAULT false, max_playbacks integer NOT NULL DEFAULT 0 CHECK (max_playbacks >= 0), max_device_playbacks integer NOT NULL DEFAULT 0 CHECK (max_device_playbacks >= 0), policy_revision bigint NOT NULL CHECK (policy_revision >= 0), expires_at timestamptz NOT NULL, consumed_at timestamptz, created_at timestamptz NOT NULL DEFAULT now() ); CREATE INDEX playback_decisions_expiry_idx ON playback_decisions(expires_at); CREATE INDEX playback_decisions_user_idx ON playback_decisions(user_id, created_at DESC);