CREATE TABLE IF NOT EXISTS `vip_level_config` (
  `id` bigint NOT NULL COMMENT '主键ID',
  `sys_origin` varchar(32) NOT NULL COMMENT '来源系统',
  `level` int NOT NULL COMMENT 'VIP等级 1-5',
  `level_code` varchar(16) NOT NULL DEFAULT '' COMMENT '等级编码 VIP1-VIP5',
  `display_name` varchar(64) NOT NULL DEFAULT '' COMMENT '显示名称',
  `enabled` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否启用',
  `duration_days` int NOT NULL DEFAULT '30' COMMENT '售卖时长，当前固定30天',
  `price_gold` bigint NOT NULL DEFAULT '0' COMMENT '购买价格，金币',
  `badge_resource_id` bigint NOT NULL DEFAULT '0' COMMENT '徽章资源ID',
  `badge_name` varchar(128) NOT NULL DEFAULT '' COMMENT '徽章名称',
  `badge_url` varchar(512) NOT NULL DEFAULT '' COMMENT '徽章资源URL',
  `avatar_frame_resource_id` bigint NOT NULL DEFAULT '0' COMMENT '头像框资源ID',
  `avatar_frame_name` varchar(128) NOT NULL DEFAULT '' COMMENT '头像框名称',
  `avatar_frame_url` varchar(512) NOT NULL DEFAULT '' COMMENT '头像框资源URL',
  `entry_effect_resource_id` bigint NOT NULL DEFAULT '0' COMMENT '进场特效资源ID',
  `entry_effect_name` varchar(128) NOT NULL DEFAULT '' COMMENT '进场特效名称',
  `entry_effect_url` varchar(512) NOT NULL DEFAULT '' COMMENT '进场特效资源URL',
  `chat_bubble_resource_id` bigint NOT NULL DEFAULT '0' COMMENT '聊天气泡资源ID',
  `chat_bubble_name` varchar(128) NOT NULL DEFAULT '' COMMENT '聊天气泡名称',
  `chat_bubble_url` varchar(512) NOT NULL DEFAULT '' COMMENT '聊天气泡资源URL',
  `float_picture_resource_id` bigint NOT NULL DEFAULT '0' COMMENT '飘窗资源ID',
  `float_picture_name` varchar(128) NOT NULL DEFAULT '' COMMENT '飘窗名称',
  `float_picture_url` varchar(512) NOT NULL DEFAULT '' COMMENT '飘窗资源URL',
  `create_time` datetime(3) DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime(3) DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_vip_level_config` (`sys_origin`, `level`),
  KEY `idx_vip_level_config_sys_origin` (`sys_origin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='VIP等级配置';

CREATE TABLE IF NOT EXISTS `user_vip_state` (
  `id` bigint NOT NULL COMMENT '主键ID',
  `sys_origin` varchar(32) NOT NULL COMMENT '来源系统',
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `level` int NOT NULL DEFAULT '0' COMMENT '当前VIP等级',
  `level_code` varchar(16) NOT NULL DEFAULT '' COMMENT '当前等级编码',
  `display_name` varchar(64) NOT NULL DEFAULT '' COMMENT '当前显示名称',
  `status` varchar(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态 ACTIVE/EXPIRED',
  `start_at` datetime(3) DEFAULT NULL COMMENT '开始时间',
  `expire_at` datetime(3) DEFAULT NULL COMMENT '到期时间',
  `badge_resource_id` bigint NOT NULL DEFAULT '0' COMMENT '当前徽章资源ID',
  `badge_name` varchar(128) NOT NULL DEFAULT '' COMMENT '当前徽章名称',
  `badge_url` varchar(512) NOT NULL DEFAULT '' COMMENT '当前徽章资源URL',
  `avatar_frame_resource_id` bigint NOT NULL DEFAULT '0' COMMENT '当前头像框资源ID',
  `avatar_frame_name` varchar(128) NOT NULL DEFAULT '' COMMENT '当前头像框名称',
  `avatar_frame_url` varchar(512) NOT NULL DEFAULT '' COMMENT '当前头像框资源URL',
  `entry_effect_resource_id` bigint NOT NULL DEFAULT '0' COMMENT '当前进场特效资源ID',
  `entry_effect_name` varchar(128) NOT NULL DEFAULT '' COMMENT '当前进场特效名称',
  `entry_effect_url` varchar(512) NOT NULL DEFAULT '' COMMENT '当前进场特效资源URL',
  `chat_bubble_resource_id` bigint NOT NULL DEFAULT '0' COMMENT '当前聊天气泡资源ID',
  `chat_bubble_name` varchar(128) NOT NULL DEFAULT '' COMMENT '当前聊天气泡名称',
  `chat_bubble_url` varchar(512) NOT NULL DEFAULT '' COMMENT '当前聊天气泡资源URL',
  `float_picture_resource_id` bigint NOT NULL DEFAULT '0' COMMENT '当前飘窗资源ID',
  `float_picture_name` varchar(128) NOT NULL DEFAULT '' COMMENT '当前飘窗名称',
  `float_picture_url` varchar(512) NOT NULL DEFAULT '' COMMENT '当前飘窗资源URL',
  `create_time` datetime(3) DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime(3) DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_vip_state` (`sys_origin`, `user_id`),
  KEY `idx_user_vip_state_lookup` (`sys_origin`, `user_id`, `status`),
  KEY `idx_user_vip_expire` (`expire_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户VIP当前状态';

CREATE TABLE IF NOT EXISTS `vip_order_record` (
  `id` bigint NOT NULL COMMENT '主键ID',
  `event_id` varchar(128) NOT NULL COMMENT '钱包幂等事件ID',
  `sys_origin` varchar(32) NOT NULL COMMENT '来源系统',
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `order_type` varchar(32) NOT NULL DEFAULT '' COMMENT '订单类型 PURCHASE/RENEW/UPGRADE',
  `from_level` int NOT NULL DEFAULT '0' COMMENT '购买前等级',
  `to_level` int NOT NULL DEFAULT '0' COMMENT '目标等级',
  `duration_days` int NOT NULL DEFAULT '30' COMMENT '购买时长',
  `original_price_gold` bigint NOT NULL DEFAULT '0' COMMENT '目标等级原价',
  `paid_gold` bigint NOT NULL DEFAULT '0' COMMENT '实际支付金币',
  `status` varchar(32) NOT NULL DEFAULT 'INIT' COMMENT '订单状态 INIT/SUCCESS/FAILED',
  `start_at` datetime(3) DEFAULT NULL COMMENT '权益开始时间',
  `expire_at` datetime(3) DEFAULT NULL COMMENT '权益到期时间',
  `error_message` varchar(512) NOT NULL DEFAULT '' COMMENT '失败原因',
  `create_time` datetime(3) DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime(3) DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_vip_order_event` (`event_id`),
  KEY `idx_vip_order_user_time` (`sys_origin`, `user_id`, `create_time`),
  KEY `idx_vip_order_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='VIP购买订单记录';
