20260215_user_software_subscription.sql 1.8 KB

123456789101112131415161718192021222324252627282930
  1. -- 用户-软件订阅表:支持多软件共用一套用户表,每个用户在每个软件下独立卡密/到期时间
  2. -- 执行前请确认 software 表已存在且存在 code='buff-xp-steam-sh' 的记录
  3. CREATE TABLE IF NOT EXISTS `user_software_subscription` (
  4. `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  5. `user_id` int NOT NULL COMMENT '用户ID',
  6. `software_id` int NOT NULL COMMENT '软件ID',
  7. `card_id` int DEFAULT NULL COMMENT '当前卡密ID',
  8. `expire_time` datetime DEFAULT NULL COMMENT '到期时间',
  9. `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除: 0-否, 1-是',
  10. `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  11. `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  12. PRIMARY KEY (`id`),
  13. UNIQUE KEY `uq_user_software` (`user_id`,`software_id`),
  14. KEY `idx_user_software_subscription_user_id` (`user_id`),
  15. KEY `idx_user_software_subscription_software_id` (`software_id`),
  16. KEY `idx_user_software_subscription_expire_time` (`expire_time`)
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户软件订阅:多软件共用用户表时,每用户每软件一条';
  18. -- 将现有用户的 card_id/expire_time 迁移到订阅表(默认归属 buff-xp-steam-sh)
  19. INSERT INTO `user_software_subscription` (`user_id`, `software_id`, `card_id`, `expire_time`, `is_deleted`, `created_at`, `updated_at`)
  20. SELECT u.`id`, s.`id`, u.`card_id`, u.`expire_time`, 0, NOW(), NOW()
  21. FROM `users` u
  22. CROSS JOIN (SELECT `id` FROM `software` WHERE `code` = 'buff-xp-steam-sh' AND `is_deleted` = 0 LIMIT 1) s
  23. WHERE u.`is_deleted` = 0
  24. AND (u.`card_id` IS NOT NULL OR u.`expire_time` IS NOT NULL)
  25. AND NOT EXISTS (
  26. SELECT 1 FROM `user_software_subscription` sub
  27. WHERE sub.`user_id` = u.`id` AND sub.`software_id` = s.`id`
  28. );