-- ============================================
-- 用户模块白名单表 - 创建表
-- ============================================
-- 说明：创建 user_feature_whitelist 表，用于记录用户身份证号对应的feature屏蔽白名单
-- 执行时间：2024-XX-XX
-- ============================================

CREATE TABLE `user_feature_whitelist` (
  `id` CHAR(36) NOT NULL COMMENT 'UUID主键',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
  `del_state` tinyint NOT NULL DEFAULT '0' COMMENT '删除状态：0=未删除，1=已删除',
  `version` bigint NOT NULL DEFAULT '0' COMMENT '版本号（乐观锁）',

/* 业务字段 */

`id_card` varchar(50) NOT NULL COMMENT '身份证号（查询对象标识）',
  `feature_id` CHAR(36) NOT NULL COMMENT 'Feature的UUID',
  `feature_api_id` varchar(100) NOT NULL COMMENT 'Feature的API标识（冗余字段，方便查询）',
  `user_id` CHAR(36) NOT NULL COMMENT '操作用户ID（代理的user_id，以后可扩展为普通用户）',
  `order_id` CHAR(36) DEFAULT NULL COMMENT '关联的查询订单ID（可选，记录来源）',
  `whitelist_order_id` CHAR(36) DEFAULT NULL COMMENT '关联的白名单订单ID（用于付费）',
  `amount` decimal(10,2) NOT NULL COMMENT '费用（单位：元）',
  `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态：1=生效，2=已失效',
  
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_id_card_feature_id` (`id_card`, `feature_id`, `del_state`) COMMENT '身份证号和feature_id联合唯一索引',
  UNIQUE KEY `uk_id_card_feature_api_id` (`id_card`, `feature_api_id`, `del_state`) COMMENT '身份证号和feature_api_id联合唯一索引',
  UNIQUE KEY `uk_whitelist_order_id` (`whitelist_order_id`) COMMENT '白名单订单ID唯一索引',
  KEY `idx_id_card` (`id_card`) COMMENT '优化按身份证号查询',
  KEY `idx_feature_id` (`feature_id`) COMMENT '优化按feature查询',
  KEY `idx_feature_api_id` (`feature_api_id`) COMMENT '优化按API标识查询',
  KEY `idx_user_id` (`user_id`) COMMENT '优化按用户查询',
  KEY `idx_status` (`status`) COMMENT '优化按状态查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户模块白名单表';

-- ============================================
-- 说明：
-- 1. 以身份证号（id_card）+ feature_id 为单位，记录白名单屏蔽关系
-- 2. user_id 使用操作用户的ID（代理的user_id），便于以后扩展为普通用户操作
-- 3. status=1表示生效，status=2表示已失效（可手动失效或系统失效）
-- 4. 一旦生效，该身份证号+feature组合永久屏蔽，除非手动失效
-- ============================================