From 9029772c8017801b10bccf2fb152987a29d71cf5 Mon Sep 17 00:00:00 2001 From: a2a-cloud Date: Sat, 18 Jul 2026 06:08:51 +0000 Subject: [PATCH] a2a-source-edit: write db/migrations/006_quotejudge_studio_v1_contract.sql --- .../006_quotejudge_studio_v1_contract.sql | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 db/migrations/006_quotejudge_studio_v1_contract.sql diff --git a/db/migrations/006_quotejudge_studio_v1_contract.sql b/db/migrations/006_quotejudge_studio_v1_contract.sql new file mode 100644 index 0000000..7581257 --- /dev/null +++ b/db/migrations/006_quotejudge_studio_v1_contract.sql @@ -0,0 +1,59 @@ +-- QuoteJudge Studio v1 current product contract. Additive/idempotent for existing managed databases. +CREATE TABLE IF NOT EXISTS quote_judge_comparisons ( + id BIGSERIAL PRIMARY KEY, + tenant_key TEXT NOT NULL, + comparison_id TEXT NOT NULL, + input_json JSONB NOT NULL DEFAULT '{}'::jsonb, + result_json JSONB NOT NULL DEFAULT '{}'::jsonb, + recommendation_vendor TEXT, + latest_receipt_id TEXT, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + UNIQUE (tenant_key, comparison_id) +); + +ALTER TABLE quote_judge_comparisons ADD COLUMN IF NOT EXISTS input_json JSONB NOT NULL DEFAULT '{}'::jsonb; +ALTER TABLE quote_judge_comparisons ADD COLUMN IF NOT EXISTS result_json JSONB NOT NULL DEFAULT '{}'::jsonb; +ALTER TABLE quote_judge_comparisons ADD COLUMN IF NOT EXISTS recommendation_vendor TEXT; +ALTER TABLE quote_judge_comparisons ADD COLUMN IF NOT EXISTS latest_receipt_id TEXT; +ALTER TABLE quote_judge_comparisons ADD COLUMN IF NOT EXISTS created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(); +ALTER TABLE quote_judge_comparisons ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(); + +CREATE UNIQUE INDEX IF NOT EXISTS quote_judge_comparisons_tenant_comparison_uidx + ON quote_judge_comparisons (tenant_key, comparison_id); + +CREATE INDEX IF NOT EXISTS quote_judge_comparisons_tenant_updated_idx + ON quote_judge_comparisons (tenant_key, updated_at DESC); + +CREATE TABLE IF NOT EXISTS quote_judge_receipts ( + id BIGSERIAL PRIMARY KEY, + receipt_id TEXT, + tenant_key TEXT NOT NULL, + comparison_id TEXT, + skill_name TEXT, + tool_name TEXT, + status TEXT, + input_hash TEXT, + result_hash TEXT, + receipt_json JSONB, + payload JSONB, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); + +ALTER TABLE quote_judge_receipts ADD COLUMN IF NOT EXISTS receipt_id TEXT; +ALTER TABLE quote_judge_receipts ADD COLUMN IF NOT EXISTS tenant_key TEXT; +ALTER TABLE quote_judge_receipts ADD COLUMN IF NOT EXISTS comparison_id TEXT; +ALTER TABLE quote_judge_receipts ADD COLUMN IF NOT EXISTS skill_name TEXT; +ALTER TABLE quote_judge_receipts ADD COLUMN IF NOT EXISTS tool_name TEXT; +ALTER TABLE quote_judge_receipts ADD COLUMN IF NOT EXISTS status TEXT; +ALTER TABLE quote_judge_receipts ADD COLUMN IF NOT EXISTS input_hash TEXT; +ALTER TABLE quote_judge_receipts ADD COLUMN IF NOT EXISTS result_hash TEXT; +ALTER TABLE quote_judge_receipts ADD COLUMN IF NOT EXISTS receipt_json JSONB; +ALTER TABLE quote_judge_receipts ADD COLUMN IF NOT EXISTS payload JSONB; +ALTER TABLE quote_judge_receipts ADD COLUMN IF NOT EXISTS created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(); + +CREATE INDEX IF NOT EXISTS quote_judge_receipts_tenant_comparison_idx + ON quote_judge_receipts (tenant_key, comparison_id, created_at DESC); + +CREATE INDEX IF NOT EXISTS quote_judge_receipts_receipt_id_idx + ON quote_judge_receipts (receipt_id);