-- MySQL 测试数据库初始化脚本
-- 数据库: test（在 config.json 中配置 "mysql": {"name": "test", ...}）
-- 执行前确保已连接到 test 数据库：USE test;

-- ===================== DDL =====================

CREATE TABLE IF NOT EXISTS `admin` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `state` int(2) DEFAULT '0',
  `password` varchar(100) DEFAULT NULL,
  `role_id` int(11) DEFAULT '0',
  `title` varchar(100) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `modify_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_phone` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员表';

CREATE TABLE IF NOT EXISTS `ctg` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `state` int(2) DEFAULT '0',
  `create_time` datetime DEFAULT NULL,
  `modify_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分类表';

CREATE TABLE IF NOT EXISTS `article` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(200) DEFAULT NULL,
  `author` varchar(100) DEFAULT NULL,
  `content` text,
  `state` int(2) DEFAULT '0' COMMENT '0正常 1归档 2隐藏',
  `click_num` int(11) DEFAULT '0',
  `sort` int(11) DEFAULT '0',
  `img` varchar(500) DEFAULT NULL,
  `ctg_id` int(11) DEFAULT '0',
  `admin_id` int(11) DEFAULT '0',
  `create_time` datetime DEFAULT NULL,
  `modify_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_state` (`state`),
  KEY `idx_ctg_id` (`ctg_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章表';

CREATE TABLE IF NOT EXISTS `test_batch` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `title` varchar(200) DEFAULT NULL,
  `state` int(2) DEFAULT '0',
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='批量测试表';

CREATE TABLE IF NOT EXISTS `cached` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `key` varchar(64) DEFAULT NULL,
  `value` text,
  `endtime` bigint(20) DEFAULT NULL,
  `time` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='老版本缓存表';

CREATE TABLE IF NOT EXISTS `hotime_cache` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `key` varchar(64) NOT NULL COMMENT '缓存键',
  `value` text DEFAULT NULL COMMENT '缓存值',
  `end_time` datetime DEFAULT NULL COMMENT '过期时间',
  `state` int(2) DEFAULT '0',
  `create_time` datetime DEFAULT NULL,
  `modify_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_key` (`key`),
  KEY `idx_end_time` (`end_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='缓存管理';

-- ===================== DML 种子数据 =====================

INSERT IGNORE INTO `ctg` (`name`, `state`, `create_time`, `modify_time`) VALUES
('新闻资讯', 0, NOW(), NOW()),
('技术文档', 0, NOW(), NOW()),
('公告通知', 0, NOW(), NOW()),
('产品介绍', 0, NOW(), NOW()),
('已归档', 1, NOW(), NOW());

INSERT IGNORE INTO `admin` (`name`, `phone`, `state`, `password`, `role_id`, `title`, `create_time`, `modify_time`) VALUES
('超级管理员', '13800000001', 1, 'admin123', 1, '系统管理员', NOW(), NOW()),
('编辑员',     '13800000002', 1, 'editor123', 2, '内容编辑', NOW(), NOW()),
('审核员',     '13800000003', 1, 'review123', 3, '内容审核', NOW(), NOW());

INSERT INTO `article` (`title`, `author`, `content`, `state`, `click_num`, `sort`, `ctg_id`, `admin_id`, `create_time`, `modify_time`) VALUES
('数据库入门指南',         '管理员', '国产关系型数据库管理系统入门...',     0, 128,  10, 1, 1, NOW(), NOW()),
('新闻发布系统上线公告',   '编辑员', '本系统已正式上线运行...',             0, 256,   5, 1, 2, NOW(), NOW()),
('Go语言最佳实践',         '管理员', 'Go语言在后端开发中的最佳实践总结...', 0, 512,   8, 2, 1, NOW(), NOW()),
('API接口设计规范',        '审核员', 'RESTful API设计的基本规范和标准...',  0,  64,  15, 2, 3, NOW(), NOW()),
('系统维护通知',           '管理员', '系统将于本周日凌晨进行维护升级...',   0,  32,   1, 3, 1, NOW(), NOW()),
('产品功能更新说明',       '编辑员', '新版本增加了以下功能...',             0,  96,  12, 4, 2, NOW(), NOW()),
('数据库性能优化指南',     '管理员', '数据库性能优化的常见方法和技巧...',   0, 1024,  3, 2, 1, NOW(), NOW()),
('缓存机制深入分析',       '审核员', '缓存在Web应用中的重要作用...',        0, 200,   7, 2, 3, NOW(), NOW()),
('旧版公告（已归档）',     '管理员', '此公告已过期归档...',                 1,  10,   0, 5, 1, NOW(), NOW()),
('测试文章（隐藏）',       '编辑员', '测试用文章不公开显示...',             2,   0,   0, 1, 2, NOW(), NOW()),
('高点击量文章',           '编辑员', '这是一篇点击量很高的文章...',         0, 9999,  2, 1, 2, NOW(), NOW());
