chore: establish local platform baseline
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
BEGIN;
|
||||
|
||||
ALTER TABLE user_account
|
||||
ADD COLUMN platform_role varchar(24) NOT NULL DEFAULT 'customer'
|
||||
CHECK (platform_role IN ('customer','ops_viewer','ops_operator','ops_approver','ops_admin'));
|
||||
|
||||
CREATE TABLE runtime_config_version (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
public_id uuid NOT NULL UNIQUE DEFAULT gen_random_uuid(),
|
||||
tenant_id uuid NOT NULL REFERENCES tenant(id),
|
||||
config_key varchar(100) NOT NULL CHECK (config_key ~ '^[a-z][a-z0-9_.-]{2,99}$'),
|
||||
display_name varchar(200) NOT NULL CHECK (length(trim(display_name))>0),
|
||||
config_kind varchar(24) NOT NULL CHECK (config_kind IN ('PERSONA','VOICE','MODEL','ROUTING','AGENT_BUNDLE')),
|
||||
version_no integer NOT NULL CHECK (version_no>0),
|
||||
status varchar(24) NOT NULL DEFAULT 'DRAFT'
|
||||
CHECK (status IN ('DRAFT','PENDING_APPROVAL','PUBLISHED','RETIRED')),
|
||||
payload jsonb NOT NULL CHECK (jsonb_typeof(payload)='object'),
|
||||
secret_refs jsonb NOT NULL DEFAULT '{}'::jsonb CHECK (jsonb_typeof(secret_refs)='object'),
|
||||
change_summary varchar(500) NOT NULL CHECK (length(trim(change_summary))>0),
|
||||
validation_result jsonb NOT NULL DEFAULT '{}'::jsonb CHECK (jsonb_typeof(validation_result)='object'),
|
||||
created_by uuid NOT NULL,
|
||||
submitted_by uuid,
|
||||
submitted_at timestamptz,
|
||||
approved_by uuid,
|
||||
approved_at timestamptz,
|
||||
published_by uuid,
|
||||
published_at timestamptz,
|
||||
retired_at timestamptz,
|
||||
supersedes_id uuid REFERENCES runtime_config_version(id),
|
||||
rollback_of_id uuid REFERENCES runtime_config_version(id),
|
||||
row_version bigint NOT NULL DEFAULT 1 CHECK (row_version>0),
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now(),
|
||||
CONSTRAINT runtime_config_creator_tenant_fk FOREIGN KEY (created_by,tenant_id) REFERENCES user_account(id,tenant_id),
|
||||
CONSTRAINT runtime_config_submitter_tenant_fk FOREIGN KEY (submitted_by,tenant_id) REFERENCES user_account(id,tenant_id),
|
||||
CONSTRAINT runtime_config_approver_tenant_fk FOREIGN KEY (approved_by,tenant_id) REFERENCES user_account(id,tenant_id),
|
||||
CONSTRAINT runtime_config_publisher_tenant_fk FOREIGN KEY (published_by,tenant_id) REFERENCES user_account(id,tenant_id),
|
||||
CONSTRAINT runtime_config_version_key UNIQUE (tenant_id,config_key,version_no),
|
||||
CONSTRAINT runtime_config_submission_check CHECK (
|
||||
(status='DRAFT' AND submitted_at IS NULL AND approved_at IS NULL AND published_at IS NULL) OR
|
||||
(status='PENDING_APPROVAL' AND submitted_by IS NOT NULL AND submitted_at IS NOT NULL AND approved_at IS NULL AND published_at IS NULL) OR
|
||||
(status='PUBLISHED' AND submitted_by IS NOT NULL AND submitted_at IS NOT NULL AND approved_by IS NOT NULL AND approved_at IS NOT NULL AND published_by IS NOT NULL AND published_at IS NOT NULL) OR
|
||||
(status='RETIRED' AND retired_at IS NOT NULL)
|
||||
)
|
||||
);
|
||||
CREATE UNIQUE INDEX runtime_config_one_published_key
|
||||
ON runtime_config_version(tenant_id,config_key) WHERE status='PUBLISHED';
|
||||
CREATE INDEX runtime_config_list_idx
|
||||
ON runtime_config_version(tenant_id,config_key,version_no DESC);
|
||||
CREATE INDEX runtime_config_status_idx
|
||||
ON runtime_config_version(tenant_id,status,updated_at DESC);
|
||||
|
||||
COMMIT;
|
||||
Reference in New Issue
Block a user