-- 迁移：新增 time_slot_sale 字段 + 合并 commodity_code 为数组类型
-- 日期：2026-02-21
-- 关联需求：dataflow 字段差异修复（time_slot_sale 未映射 + commoditycode 合并）
--
-- 变更 1: ods.store_goods_master 新增 time_slot_sale（API 返回但 ODS 未收录）
-- 变更 2: dwd.dim_store_goods_ex 新增 time_slot_sale（ODS→DWD 传递）
-- 变更 3: dwd.dim_tenant_goods_ex.commodity_code_list 改为 TEXT[]（支持多编码数组）

BEGIN;

-- ============================================================
-- 变更 1: ODS 层 — store_goods_master 新增 time_slot_sale
-- ============================================================
ALTER TABLE ods.store_goods_master
    ADD COLUMN IF NOT EXISTS time_slot_sale INTEGER;

COMMENT ON COLUMN ods.store_goods_master.time_slot_sale IS
    '【说明】分时段销售标记（API 返回值，当前观测全部为 2）。     【示例】2。     【JSON字段】store_goods_master.json - data.orderGoodsList - time_slot_sale。';

-- ============================================================
-- 变更 2: DWD 层 — dim_store_goods_ex 新增 time_slot_sale
-- ============================================================
ALTER TABLE dwd.dim_store_goods_ex
    ADD COLUMN IF NOT EXISTS time_slot_sale INTEGER;

COMMENT ON COLUMN dwd.dim_store_goods_ex.time_slot_sale IS
    '【说明】分时段销售标记（当前观测全部为 2）。     【ODS来源】store_goods_master - time_slot_sale。     【JSON字段】store_goods_master.json - data.orderGoodsList - time_slot_sale。';

-- ============================================================
-- 变更 3: DWD 层 — dim_tenant_goods_ex.commodity_code_list 改为 TEXT[]
-- ============================================================
-- 先将现有 VARCHAR 数据迁移到数组类型
ALTER TABLE dwd.dim_tenant_goods_ex
    ALTER COLUMN commodity_code_list TYPE TEXT[]
    USING CASE
        WHEN commodity_code_list IS NULL THEN NULL
        WHEN commodity_code_list = '' THEN '{}'::TEXT[]
        ELSE ARRAY[commodity_code_list]
    END;

COMMENT ON COLUMN dwd.dim_tenant_goods_ex.commodity_code_list IS
    '【说明】商品编码数组（合并自 ODS commodityCode 数组字段）。单值时为单元素数组。     【ODS来源】tenant_goods_master - commodityCode（JSON 数组格式，如 ["10000028"]）。     【JSON字段】tenant_goods_master.json - data.tenantGoodsList - commodityCode。';

COMMIT;

-- ============================================================
-- 回滚策略
-- ============================================================
-- BEGIN;
-- ALTER TABLE ods.store_goods_master DROP COLUMN IF EXISTS time_slot_sale;
-- ALTER TABLE dwd.dim_store_goods_ex DROP COLUMN IF EXISTS time_slot_sale;
-- ALTER TABLE dwd.dim_tenant_goods_ex
--     ALTER COLUMN commodity_code_list TYPE VARCHAR(256)
--     USING CASE
--         WHEN commodity_code_list IS NULL THEN NULL
--         WHEN array_length(commodity_code_list, 1) IS NULL THEN ''
--         ELSE commodity_code_list[1]
--     END;
-- COMMIT;

-- ============================================================
-- 验证 SQL
-- ============================================================

-- 1. 确认 ODS time_slot_sale 列已创建
-- SELECT column_name, data_type
-- FROM information_schema.columns
-- WHERE table_schema = 'ods' AND table_name = 'store_goods_master'
--   AND column_name = 'time_slot_sale';

-- 2. 确认 DWD time_slot_sale 列已创建
-- SELECT column_name, data_type
-- FROM information_schema.columns
-- WHERE table_schema = 'dwd' AND table_name = 'dim_store_goods_ex'
--   AND column_name = 'time_slot_sale';

-- 3. 确认 commodity_code_list 类型已变更为 ARRAY
-- SELECT column_name, data_type, udt_name
-- FROM information_schema.columns
-- WHERE table_schema = 'dwd' AND table_name = 'dim_tenant_goods_ex'
--   AND column_name = 'commodity_code_list';

-- 4. 确认现有 commodity_code_list 数据已正确迁移
-- SELECT tenant_goods_id, commodity_code_list
-- FROM dwd.dim_tenant_goods_ex
-- WHERE scd2_is_current = 1 AND commodity_code_list IS NOT NULL
-- LIMIT 5;
