-- ========================================
-- 团播机构 v1.0.1 数据库升级脚本
-- 创建时间: 2025-01-10
-- 说明: 包含首页弹窗功能和Banner跳转功能的数据库修改
-- ========================================

-- 检查脚本执行环境
PRINT '开始执行 v1.0.1 数据库升级脚本...'
PRINT '执行时间: ' + CONVERT(VARCHAR, GETDATE(), 120)

-- ========================================
-- 1. 创建首页弹窗表 T_HomePopups
-- ========================================
PRINT '正在创建首页弹窗表 T_HomePopups...'

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'T_HomePopups')
BEGIN
    CREATE TABLE T_HomePopups (
        Id INT PRIMARY KEY IDENTITY(1,1),
        Title NVARCHAR(100) NULL COMMENT '弹窗标题',
        ImageUrl NVARCHAR(500) NOT NULL COMMENT '弹窗图片URL地址',
        LinkType INT NULL COMMENT '链接类型：1-外部链接，2-内部页面(帖子)，3-内部页面(通知)，4-无链接',
        LinkUrl NVARCHAR(500) NULL COMMENT '点击跳转的链接地址',
        TargetId BIGINT NULL COMMENT '目标ID（如帖子ID或通知ID，配合LinkType使用）',
        IsActive BIT NOT NULL DEFAULT 1 COMMENT '是否启用该弹窗',
        StartTime DATETIME2 NULL COMMENT '弹窗开始展示时间',
        EndTime DATETIME2 NULL COMMENT '弹窗结束展示时间',
        SortOrder INT NOT NULL DEFAULT 0 COMMENT '排序顺序，数字越小越靠前',
        ViewCount INT NOT NULL DEFAULT 0 COMMENT '弹窗浏览次数',
        ClickCount INT NOT NULL DEFAULT 0 COMMENT '弹窗点击次数',
        CreatedAt DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '弹窗创建时间',
        UpdatedAt DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '弹窗更新时间'
    );
    
    PRINT '✓ T_HomePopups 表创建成功'
END
ELSE
BEGIN
    PRINT '⚠ T_HomePopups 表已存在，跳过创建'
END

-- ========================================
-- 2. 为 T_HomePopups 表添加索引
-- ========================================
PRINT '正在为 T_HomePopups 表添加索引...'

-- 添加复合索引用于查询启用的弹窗
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_T_HomePopups_IsActive_StartTime_EndTime')
BEGIN
    CREATE INDEX IX_T_HomePopups_IsActive_StartTime_EndTime ON T_HomePopups (IsActive, StartTime, EndTime);
    PRINT '✓ 索引 IX_T_HomePopups_IsActive_StartTime_EndTime 创建成功'
END

-- 添加排序索引
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_T_HomePopups_SortOrder')
BEGIN
    CREATE INDEX IX_T_HomePopups_SortOrder ON T_HomePopups (SortOrder);
    PRINT '✓ 索引 IX_T_HomePopups_SortOrder 创建成功'
END

-- ========================================
-- 3. 更新 T_Banners 表的 LinkType 约束
-- ========================================
PRINT '正在更新 T_Banners 表的 LinkType 约束...'

-- 检查并删除旧约束
IF EXISTS (SELECT * FROM sys.check_constraints WHERE name = 'CK_T_Banners_LinkType')
BEGIN
    ALTER TABLE T_Banners DROP CONSTRAINT CK_T_Banners_LinkType;
    PRINT '✓ 删除旧的 LinkType 约束'
END

-- ========================================
-- 4. 添加弹窗链接类型字典
-- ========================================
PRINT '正在添加弹窗链接类型字典...'

-- 添加字典类型
IF NOT EXISTS (SELECT * FROM sys_dict_type WHERE DictType = 'liveforum_popup_linktype')
BEGIN
    INSERT INTO sys_dict_type (DictName, DictType, Status, Type, Create_by, Create_time, Remark) 
    VALUES ('弹窗链接类型', 'liveforum_popup_linktype', '0', 'N', 'admin', GETDATE(), '首页弹窗链接类型配置');
    PRINT '✓ 添加弹窗链接类型字典类型'
END
ELSE
BEGIN
    PRINT '⚠ 弹窗链接类型字典类型已存在，跳过添加'
END

-- 添加字典数据
IF NOT EXISTS (SELECT * FROM sys_dict_data WHERE DictType = 'liveforum_popup_linktype' AND DictValue = '1')
BEGIN
    INSERT INTO sys_dict_data (DictSort, DictLabel, DictValue, DictType, Status, Create_by, Create_time) VALUES
    (1, '外部链接', '1', 'liveforum_popup_linktype', '0', 'admin', GETDATE()),
    (2, '帖子详情', '2', 'liveforum_popup_linktype', '0', 'admin', GETDATE()),
    (4, '无链接', '4', 'liveforum_popup_linktype', '0', 'admin', GETDATE());
    PRINT '✓ 添加弹窗链接类型字典数据'
END
ELSE
BEGIN
    PRINT '⚠ 弹窗链接类型字典数据已存在，跳过添加'
END

-- ========================================
-- 6. 插入示例数据（可选，生产环境可注释掉）
-- ========================================
PRINT '正在插入示例数据...'

-- 插入首页弹窗示例数据
IF NOT EXISTS (SELECT * FROM T_HomePopups WHERE Title = '欢迎使用')
BEGIN
    INSERT INTO T_HomePopups (Title, ImageUrl, LinkType, IsActive, SortOrder) 
    VALUES ('欢迎使用', 'https://example.com/popup.jpg', 4, 1, 1);
    PRINT '✓ 插入首页弹窗示例数据'
END

-- ========================================
-- 7. 验证升级结果
-- ========================================
PRINT '正在验证升级结果...'

-- 验证 T_HomePopups 表
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'T_HomePopups')
    PRINT '✓ T_HomePopups 表验证通过'
ELSE
    PRINT '✗ T_HomePopups 表验证失败'

-- 验证约束
IF EXISTS (SELECT * FROM sys.check_constraints WHERE name = 'CK_T_Banners_LinkType' AND definition LIKE '%[LinkType]=(4)%')
    PRINT '✓ T_Banners LinkType 约束验证通过'
ELSE
    PRINT '✗ T_Banners LinkType 约束验证失败'


-- ========================================
-- 升级完成
-- ========================================
PRINT ''
PRINT '========================================='
PRINT 'v1.0.1 数据库升级脚本执行完成！'
PRINT '完成时间: ' + CONVERT(VARCHAR, GETDATE(), 120)
PRINT '========================================='
PRINT ''
PRINT '升级内容总结:'
PRINT '1. ✓ 创建首页弹窗表 T_HomePopups'
PRINT '2. ✓ 添加相关索引优化查询性能'
PRINT '3. ✓ 更新 T_Banners 表约束支持新的链接类型'
PRINT '4. ✓ 添加弹窗链接类型字典配置'
PRINT '5. ✓ 更新 Banner 链接类型字典'
PRINT '6. ✓ 插入必要的示例数据'
PRINT ''
PRINT '注意事项:'
PRINT '- 请确保应用程序代码已同步更新'
PRINT '- 建议在低峰期执行此脚本'
PRINT '- 执行前请备份数据库'
PRINT '========================================='