-- ============================================
-- 代理短链表
-- 说明：存储推广链接和邀请链接的短链映射关系
--
-- 功能说明：
-- 1. 支持两种类型：promotion（推广报告）和 invite（邀请好友）
-- 2. 为每个链接生成一个短链标识（6位随机字符串）
-- 3. 短链格式：https://推广域名/s/{short_code}
-- 4. 短链重定向到前端传入的target_path
--
-- 执行步骤：
-- 1. 执行此 SQL 创建表
-- 2. 使用 goctl 生成 Model：agent_short_link -> AgentShortLinkModel
-- 3. 在 servicecontext.go 中添加 AgentShortLinkModel
-- ============================================
CREATE TABLE `agent_short_link` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `type` tinyint NOT NULL COMMENT '类型：1=推广报告(promotion)，2=邀请好友(invite)',
    `link_id` bigint DEFAULT NULL COMMENT '推广链接ID（关联agent_link表，仅推广报告类型使用）',
    `invite_code_id` bigint DEFAULT NULL COMMENT '邀请码ID（关联agent_invite_code表，仅邀请好友类型使用）',
    `link_identifier` varchar(200) DEFAULT NULL COMMENT '推广链接标识（加密，仅推广报告类型使用）',
    `invite_code` varchar(50) DEFAULT NULL COMMENT '邀请码（仅邀请好友类型使用）',
    `short_code` varchar(20) NOT NULL COMMENT '短链标识（6位随机字符串）',
    `target_path` varchar(500) NOT NULL COMMENT '目标地址（前端传入，如：/agent/promotionInquire/xxx 或 /register?invite_code=xxx）',
    `promotion_domain` varchar(200) NOT NULL 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`),
    UNIQUE KEY `uk_short_code` (`short_code`, `del_state`) COMMENT '短链标识唯一索引',
    UNIQUE KEY `uk_link_id_type` (
        `link_id`,
        `type`,
        `del_state`
    ) COMMENT '同一推广链接同一类型只能有一个有效短链',
    UNIQUE KEY `uk_invite_code_id_type` (
        `invite_code_id`,
        `type`,
        `del_state`
    ) COMMENT '同一邀请码同一类型只能有一个有效短链',
    KEY `idx_link_identifier` (`link_identifier`) COMMENT '推广链接标识索引',
    KEY `idx_invite_code` (`invite_code`) COMMENT '邀请码索引',
    KEY `idx_type` (`type`) COMMENT '类型索引',
    KEY `idx_create_time` (`create_time`) COMMENT '创建时间索引'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代理短链表';