-- ============================================
-- 邀请码使用历史表
-- 说明：记录每次邀请码的使用情况，支持统计和查询
--
-- 功能说明：
-- 1. 记录每个邀请码每次使用的详细信息
-- 2. 支持统计每个邀请码邀请了多少代理
-- 3. 支持查询某个代理是通过哪个邀请码成为代理的
-- 4. 保留完整的使用历史记录
--
-- 执行步骤：
-- 1. 执行此 SQL 创建表和添加字段
-- 2. 使用 goctl 生成 Model：agent_invite_code_usage -> AgentInviteCodeUsageModel
-- 3. 在 servicecontext.go 中添加 AgentInviteCodeUsageModel
-- ============================================
CREATE TABLE `agent_invite_code_usage` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `invite_code_id` bigint NOT NULL COMMENT '邀请码ID（关联agent_invite_code表）',
    `code` varchar(50) NOT NULL COMMENT '邀请码（冗余字段，便于查询）',
    `user_id` bigint NOT NULL COMMENT '使用用户ID',
    `agent_id` bigint NOT NULL COMMENT '成为的代理ID',
    `agent_level` tinyint NOT NULL COMMENT '代理等级：1=普通，2=黄金，3=钻石',
    `used_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '使用时间',
    `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 '版本号（乐观锁）',
    PRIMARY KEY (`id`),
    KEY `idx_invite_code_id` (`invite_code_id`) COMMENT '关联邀请码ID',
    KEY `idx_code` (`code`) COMMENT '邀请码索引',
    KEY `idx_user_id` (`user_id`) COMMENT '用户ID索引',
    KEY `idx_agent_id` (`agent_id`) COMMENT '代理ID索引',
    KEY `idx_used_time` (`used_time`) COMMENT '使用时间索引',
    KEY `idx_create_time` (`create_time`) COMMENT '创建时间索引',
    KEY `idx_code_time` (`code`, `used_time`) COMMENT '邀请码和使用时间复合索引'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '邀请码使用历史表';

-- ============================================
-- 在agent表中添加invite_code_id字段（可选，便于直接查询代理是通过哪个邀请码成为的）
-- ============================================
ALTER TABLE `agent`
ADD COLUMN `invite_code_id` bigint DEFAULT NULL COMMENT '通过哪个邀请码成为代理（关联agent_invite_code表）' AFTER `team_leader_id`;

ALTER TABLE `agent`
ADD KEY `idx_invite_code_id` (`invite_code_id`) COMMENT '邀请码ID索引';