-- 多档会员：权益绑价格包 + 老数据洗到年档
-- 月卡/体验等价格包请在 admin「会员套餐」页新增，不要用本脚本灌业务数据。

-- ========== 1) DDL（若已执行过可跳过）==========
ALTER TABLE adam_member_rights
    ADD COLUMN member_price_id VARCHAR(64) NULL COMMENT '绑定价格包ID（必绑具体档；空仅历史兼容，执行下方洗数后应无空）' AFTER member_id;

CREATE INDEX idx_amember_rights_price_id ON adam_member_rights (member_price_id);

-- ========== 2) 洗数：NULL 权益绑到该会员「天数最大」的价格包（视为年档）==========
-- 若同一 member 有多条 days 并列最大，取 member_price_id 字典序最小的一条
UPDATE adam_member_rights r
    INNER JOIN (
        SELECT p.member_id, MIN(p.member_price_id) AS year_price_id
        FROM adam_member_price p
        INNER JOIN (
            SELECT member_id, MAX(days) AS max_days
            FROM adam_member_price
            WHERE state IN (1, 2)
            GROUP BY member_id
        ) m ON m.member_id = p.member_id AND m.max_days = p.days
        WHERE p.state IN (1, 2)
        GROUP BY p.member_id
    ) y ON y.member_id = r.member_id
SET r.member_price_id = y.year_price_id
WHERE r.member_price_id IS NULL
  AND r.state = 1;

-- 检查是否还有空绑定（期望 0 行）
-- SELECT mid, mrights_id, member_id, title FROM adam_member_rights WHERE state = 1 AND member_price_id IS NULL;

-- ========== 3) Redis（会员价/权益读 Redis，Mongo 已注释不用）==========
-- 洗数后必须刷缓存，否则线上仍是旧 rights（缺 memberPriceId）。
-- 任选其一：
--   A) admin 打开会员套餐，随便保存一条该卡权益（会 refreshMemberRightsRedis）
--   B) 手工删 key（memberId 按实际替换，登登登一般是 1）：
--      DEL adam:info:member:rights:1
--      DEL adam:info:member:price:1
--      （若有 V 版）DEL adam:info:member:rights:v:1
-- 下次请求会按代码从 DB/逻辑重建；价格包建议在 admin 保存一次价格以确保 price 列表正确。

-- ========== 4) 后续运营 ==========
-- admin 新增月卡/体验价格包后，在「编辑」弹窗内配置本档权益与券张数。
