2026-03-20 10:46:51 +08:00
|
|
|
|
package app
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
|
|
. "code.hoteas.com/golang/hotime/db"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// SetupMySQLDatabase 为 MySQL 数据库创建测试表并灌入测试数据
|
|
|
|
|
|
func SetupMySQLDatabase(db *HoTimeDB) {
|
|
|
|
|
|
if db.Type != "mysql" {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fmt.Println("[MySQL Setup] 开始初始化 MySQL 数据库测试环境...")
|
|
|
|
|
|
|
|
|
|
|
|
prefix := db.GetPrefix()
|
|
|
|
|
|
createMySQLTables(db, prefix)
|
|
|
|
|
|
seedTestData(db, "MySQL")
|
|
|
|
|
|
|
|
|
|
|
|
fmt.Println("[MySQL Setup] MySQL 数据库测试环境初始化完成")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func mysqlTableExists(db *HoTimeDB, tableName string) bool {
|
|
|
|
|
|
rows := db.Query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=?", tableName)
|
|
|
|
|
|
return len(rows) > 0
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func createMySQLTables(db *HoTimeDB, prefix string) {
|
|
|
|
|
|
// admin 表
|
|
|
|
|
|
tbl := prefix + "admin"
|
|
|
|
|
|
if !mysqlTableExists(db, tbl) {
|
|
|
|
|
|
fmt.Println("[MySQL Setup] 创建表:", tbl)
|
|
|
|
|
|
db.Exec("CREATE TABLE `" + tbl + "` (" +
|
|
|
|
|
|
"`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")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ctg 分类表
|
|
|
|
|
|
tbl = prefix + "ctg"
|
|
|
|
|
|
if !mysqlTableExists(db, tbl) {
|
|
|
|
|
|
fmt.Println("[MySQL Setup] 创建表:", tbl)
|
|
|
|
|
|
db.Exec("CREATE TABLE `" + tbl + "` (" +
|
|
|
|
|
|
"`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")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// article 文章表
|
|
|
|
|
|
tbl = prefix + "article"
|
|
|
|
|
|
if !mysqlTableExists(db, tbl) {
|
|
|
|
|
|
fmt.Println("[MySQL Setup] 创建表:", tbl)
|
|
|
|
|
|
db.Exec("CREATE TABLE `" + tbl + "` (" +
|
|
|
|
|
|
"`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'," +
|
|
|
|
|
|
"`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")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-07-22 08:58:46 +08:00
|
|
|
|
// department 部门表(树形结构,供通用 CRUD 树查询测试使用;
|
|
|
|
|
|
// 不叫 org 是因为 config/admin.json 遗留 flow 会给 org 注入 admin_id 过滤)
|
|
|
|
|
|
// 注意:MakeCode 路由在 Init 时按库中已有表生成,
|
|
|
|
|
|
// 全新空库首次运行建表晚于 Init,/admin/department/search 需第二次运行才可用
|
|
|
|
|
|
tbl = prefix + "department"
|
|
|
|
|
|
if !mysqlTableExists(db, tbl) {
|
|
|
|
|
|
fmt.Println("[MySQL Setup] 创建表:", tbl)
|
|
|
|
|
|
db.Exec("CREATE TABLE `" + tbl + "` (" +
|
|
|
|
|
|
"`id` int(11) unsigned NOT NULL AUTO_INCREMENT," +
|
|
|
|
|
|
"`name` varchar(100) DEFAULT NULL COMMENT '部门名称'," +
|
|
|
|
|
|
"`parent_id` int(11) DEFAULT NULL COMMENT '父级ID'," +
|
|
|
|
|
|
"`parent_ids` varchar(255) DEFAULT NULL COMMENT '层级路径'," +
|
|
|
|
|
|
"`state` int(2) DEFAULT '0'," +
|
|
|
|
|
|
"`create_time` datetime DEFAULT NULL," +
|
|
|
|
|
|
"`modify_time` datetime DEFAULT NULL," +
|
|
|
|
|
|
"PRIMARY KEY (`id`)," +
|
|
|
|
|
|
"KEY `idx_parent_id` (`parent_id`)" +
|
|
|
|
|
|
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门表'")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-20 10:46:51 +08:00
|
|
|
|
// test_batch 测试批量表
|
|
|
|
|
|
tbl = prefix + "test_batch"
|
|
|
|
|
|
if !mysqlTableExists(db, tbl) {
|
|
|
|
|
|
fmt.Println("[MySQL Setup] 创建表:", tbl)
|
|
|
|
|
|
db.Exec("CREATE TABLE `" + tbl + "` (" +
|
|
|
|
|
|
"`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")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// cached 老版本缓存表(兼容模式测试需要)
|
|
|
|
|
|
tbl = prefix + "cached"
|
|
|
|
|
|
if !mysqlTableExists(db, tbl) {
|
|
|
|
|
|
fmt.Println("[MySQL Setup] 创建表:", tbl)
|
|
|
|
|
|
db.Exec("CREATE TABLE `" + tbl + "` (" +
|
|
|
|
|
|
"`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")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// hotime_cache 新版缓存表
|
|
|
|
|
|
tbl = prefix + "hotime_cache"
|
|
|
|
|
|
if !mysqlTableExists(db, tbl) {
|
|
|
|
|
|
fmt.Println("[MySQL Setup] 创建表:", tbl)
|
|
|
|
|
|
db.Exec("CREATE TABLE `" + tbl + "` (" +
|
|
|
|
|
|
"`id` int(11) unsigned NOT NULL AUTO_INCREMENT," +
|
|
|
|
|
|
"`key` varchar(64) NOT NULL," +
|
|
|
|
|
|
"`value` text," +
|
|
|
|
|
|
"`end_time` datetime DEFAULT NULL," +
|
|
|
|
|
|
"`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")
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|