Files
llm-intelligence/db/migrations/008_plan_catalog_inventory.sql
phamnazage-jpg 958245537a feat(imports): add real pricing and subscription collectors
Add plan catalog and subscription schema support, seed baselines, and real importers for core domestic subscriptions plus stable official pricing sources.

This commit also hardens the shared fetch layers so the importers can support live collection and database writes instead of relying on manual placeholders alone.
2026-05-15 22:32:57 +08:00

62 lines
2.9 KiB
SQL

-- Phase 2: Token Plan / Coding Plan 基础目录清单
CREATE TABLE IF NOT EXISTS plan_catalog_inventory (
id BIGSERIAL PRIMARY KEY,
provider_id BIGINT REFERENCES model_provider(id) ON DELETE SET NULL,
operator_id BIGINT REFERENCES operator(id) ON DELETE SET NULL,
catalog_code TEXT NOT NULL UNIQUE,
platform_name TEXT NOT NULL,
platform_name_cn TEXT,
platform_type TEXT NOT NULL,
plan_family TEXT NOT NULL,
plan_status TEXT NOT NULL DEFAULT 'confirmed',
source_url TEXT NOT NULL,
source_title TEXT,
source_kind TEXT NOT NULL DEFAULT 'official_doc',
region TEXT NOT NULL DEFAULT 'global',
currency TEXT,
billing_cycle TEXT,
last_checked_at TIMESTAMP NOT NULL,
importer_key TEXT,
notes TEXT,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
created_by TEXT DEFAULT 'system',
updated_by TEXT DEFAULT 'system',
CONSTRAINT chk_plan_catalog_platform_type
CHECK (platform_type IN ('official_vendor', 'cloud_operator', 'relay_platform')),
CONSTRAINT chk_plan_catalog_family
CHECK (plan_family IN ('token_plan', 'coding_plan', 'package_plan', 'pay_as_you_go', 'unknown')),
CONSTRAINT chk_plan_catalog_status
CHECK (plan_status IN ('confirmed', 'pending_verification', 'retired')),
CONSTRAINT chk_plan_catalog_source_kind
CHECK (source_kind IN ('official_doc', 'official_pricing', 'official_product_page', 'official_community', 'inferred')),
CONSTRAINT chk_plan_catalog_currency
CHECK (currency IS NULL OR currency IN ('CNY', 'USD', 'EUR'))
);
CREATE INDEX IF NOT EXISTS idx_plan_catalog_provider_id ON plan_catalog_inventory(provider_id);
CREATE INDEX IF NOT EXISTS idx_plan_catalog_operator_id ON plan_catalog_inventory(operator_id);
CREATE INDEX IF NOT EXISTS idx_plan_catalog_family ON plan_catalog_inventory(plan_family);
CREATE INDEX IF NOT EXISTS idx_plan_catalog_platform_type ON plan_catalog_inventory(platform_type);
CREATE INDEX IF NOT EXISTS idx_plan_catalog_status ON plan_catalog_inventory(plan_status);
CREATE INDEX IF NOT EXISTS idx_plan_catalog_last_checked_at ON plan_catalog_inventory(last_checked_at);
COMMENT ON TABLE plan_catalog_inventory IS 'Token Plan / Coding Plan / 套餐包 / 按量计费基础目录清单,用于后续 importer 排期与证据管理';
DO $$
BEGIN
IF EXISTS (SELECT 1 FROM pg_proc WHERE proname = 'update_updated_at_column')
AND NOT EXISTS (
SELECT 1
FROM pg_trigger
WHERE tgname = 'plan_catalog_inventory_updated_at'
) THEN
CREATE TRIGGER plan_catalog_inventory_updated_at
BEFORE UPDATE ON plan_catalog_inventory
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
END IF;
END
$$;