50 lines
2.5 KiB
PL/PgSQL
50 lines
2.5 KiB
PL/PgSQL
BEGIN;
|
|||
|
|
|
||
|
|
CREATE TABLE integration_issue (
|
||
|
|
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),
|
||
|
|
phenomenon varchar(2000) NOT NULL,
|
||
|
|
device_id uuid,
|
||
|
|
conversation_id uuid,
|
||
|
|
occurred_at timestamptz NOT NULL,
|
||
|
|
request_id varchar(128),
|
||
|
|
responsible_party varchar(120) NOT NULL,
|
||
|
|
status varchar(24) NOT NULL DEFAULT 'OPEN'
|
||
|
|
CHECK (status IN ('OPEN','IN_PROGRESS','RESOLVED','VERIFIED','CLOSED')),
|
||
|
|
resolution_result varchar(4000),
|
||
|
|
regression_conclusion varchar(4000),
|
||
|
|
created_by uuid NOT NULL,
|
||
|
|
updated_by uuid NOT NULL,
|
||
|
|
version bigint NOT NULL DEFAULT 1 CHECK (version > 0),
|
||
|
|
created_at timestamptz NOT NULL DEFAULT now(),
|
||
|
|
updated_at timestamptz NOT NULL DEFAULT now(),
|
||
|
|
CONSTRAINT integration_issue_device_tenant_fk
|
||
|
|
FOREIGN KEY (device_id, tenant_id) REFERENCES device(id, tenant_id),
|
||
|
|
CONSTRAINT integration_issue_conversation_tenant_fk
|
||
|
|
FOREIGN KEY (conversation_id, tenant_id) REFERENCES conversation(id, tenant_id),
|
||
|
|
CONSTRAINT integration_issue_creator_tenant_fk
|
||
|
|
FOREIGN KEY (created_by, tenant_id) REFERENCES user_account(id, tenant_id),
|
||
|
|
CONSTRAINT integration_issue_updater_tenant_fk
|
||
|
|
FOREIGN KEY (updated_by, tenant_id) REFERENCES user_account(id, tenant_id),
|
||
|
|
CONSTRAINT integration_issue_resolution_check CHECK (
|
||
|
|
status NOT IN ('RESOLVED','VERIFIED','CLOSED') OR NULLIF(btrim(resolution_result),'') IS NOT NULL
|
||
|
|
),
|
||
|
|
CONSTRAINT integration_issue_regression_check CHECK (
|
||
|
|
status NOT IN ('VERIFIED','CLOSED') OR NULLIF(btrim(regression_conclusion),'') IS NOT NULL
|
||
|
|
)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX integration_issue_tenant_status_updated_idx
|
||
|
|
ON integration_issue (tenant_id, status, updated_at DESC, id DESC);
|
||
|
|
CREATE INDEX integration_issue_device_idx
|
||
|
|
ON integration_issue (tenant_id, device_id, occurred_at DESC)
|
||
|
|
WHERE device_id IS NOT NULL;
|
||
|
|
CREATE INDEX integration_issue_conversation_idx
|
||
|
|
ON integration_issue (tenant_id, conversation_id, occurred_at DESC)
|
||
|
|
WHERE conversation_id IS NOT NULL;
|
||
|
|
|
||
|
|
COMMENT ON TABLE integration_issue IS 'Tenant-scoped integration issue ledger required by P0282; stores only diagnostic references and resolution workflow, never transcript or recording content.';
|
||
|
|
|
||
|
|
COMMIT;
|