-- ============================================================
-- discount 模块迁移脚本：新增 discount_detail 表
-- 从旧版 discount 表迁移折扣值到 discount_detail
-- 日期: 2026-05-24
-- 执行前请备份数据库！
-- ============================================================

-- 1. 创建 discount_detail 表
CREATE TABLE IF NOT EXISTS discount_detail
(
  `id` VARCHAR(32)   NOT NULL COMMENT 'id',
  `discountid` VARCHAR(32)   NOT NULL COMMENT '折扣id',
  `resellerid` VARCHAR(32)   DEFAULT '*' COMMENT '商户id',
  `prodtypeid` VARCHAR(32)   DEFAULT NULL COMMENT '产品类型id',
  `productid` VARCHAR(32)   DEFAULT NULL COMMENT '产品id',
  `discount` double(5,4)   COMMENT '折扣值',
  PRIMARY KEY(id),
  INDEX idx_dd_discountid (discountid),
  INDEX idx_dd_product (discountid, prodtypeid, productid)
)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
engine=innodb
COMMENT '折扣产品明细';

-- 2. 为 discount 表添加 name 字段（如果不存在）
ALTER TABLE discount ADD COLUMN IF NOT EXISTS `name` VARCHAR(100) COMMENT '折扣名称';

-- 3. 将现有 discount 记录的 discount 值迁移到 discount_detail
--    为每条 discount 记录创建一条默认明细（prodtypeid=NULL, productid=NULL）
INSERT IGNORE INTO discount_detail (id, discountid, resellerid, prodtypeid, productid, discount)
SELECT
  CONCAT('mig_', id, '_default') AS id,
  d.id AS discountid,
  d.resellerid,
  NULL AS prodtypeid,
  NULL AS productid,
  d.discount
FROM discount d
WHERE d.discount IS NOT NULL AND d.discount > 0
AND NOT EXISTS (
  SELECT 1 FROM discount_detail dd
  WHERE dd.discountid = d.id
    AND dd.prodtypeid IS NULL
    AND dd.productid IS NULL
);

-- ============================================================
-- 验证步骤（执行后运行）:
-- 1. 确认表创建成功:
--    SHOW TABLES LIKE 'discount_detail';
-- 2. 确认明细记录已迁移:
--    SELECT COUNT(*) FROM discount_detail;
--    SELECT * FROM discount_detail ORDER BY discountid;
-- 3. 确认 discount 表 name 字段存在:
--    DESCRIBE discount;
-- ============================================================
-- 回滚步骤（如需撤销）:
-- DROP TABLE IF EXISTS discount_detail;
-- ALTER TABLE discount DROP COLUMN IF EXISTS name;
-- ============================================================
