113 lines
2.7 KiB
Go
113 lines
2.7 KiB
Go
package initialize
|
|
|
|
import (
|
|
"os"
|
|
|
|
"git.echol.cn/loser/ai_proxy/server/global"
|
|
"git.echol.cn/loser/ai_proxy/server/model/app"
|
|
"git.echol.cn/loser/ai_proxy/server/model/system"
|
|
|
|
"go.uber.org/zap"
|
|
"golang.org/x/crypto/bcrypt"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func Gorm() *gorm.DB {
|
|
switch global.GVA_CONFIG.System.DbType {
|
|
case "mysql":
|
|
global.GVA_ACTIVE_DBNAME = &global.GVA_CONFIG.Mysql.Dbname
|
|
return GormMysql()
|
|
case "pgsql":
|
|
global.GVA_ACTIVE_DBNAME = &global.GVA_CONFIG.Pgsql.Dbname
|
|
return GormPgSql()
|
|
case "oracle":
|
|
global.GVA_ACTIVE_DBNAME = &global.GVA_CONFIG.Oracle.Dbname
|
|
return GormOracle()
|
|
case "mssql":
|
|
global.GVA_ACTIVE_DBNAME = &global.GVA_CONFIG.Mssql.Dbname
|
|
return GormMssql()
|
|
case "sqlite":
|
|
global.GVA_ACTIVE_DBNAME = &global.GVA_CONFIG.Sqlite.Dbname
|
|
return GormSqlite()
|
|
default:
|
|
global.GVA_ACTIVE_DBNAME = &global.GVA_CONFIG.Mysql.Dbname
|
|
return GormMysql()
|
|
}
|
|
}
|
|
|
|
func RegisterTables() {
|
|
if global.GVA_CONFIG.System.DisableAutoMigrate {
|
|
global.GVA_LOG.Info("auto-migrate is disabled, skipping table registration")
|
|
return
|
|
}
|
|
|
|
db := global.GVA_DB
|
|
err := db.AutoMigrate(
|
|
|
|
// System tables (管理后台表)
|
|
system.SysApi{},
|
|
system.SysUser{},
|
|
|
|
// App tables (前台应用表)
|
|
app.AiPreset{},
|
|
app.AiProvider{},
|
|
app.AiPresetBinding{},
|
|
app.AiRequestLog{},
|
|
)
|
|
if err != nil {
|
|
global.GVA_LOG.Error("register table failed", zap.Error(err))
|
|
os.Exit(0)
|
|
}
|
|
|
|
err = bizModel()
|
|
|
|
if err != nil {
|
|
global.GVA_LOG.Error("register biz_table failed", zap.Error(err))
|
|
os.Exit(0)
|
|
}
|
|
global.GVA_LOG.Info("register table success")
|
|
|
|
// 初始化默认管理员账号
|
|
initDefaultAdmin()
|
|
}
|
|
|
|
// initDefaultAdmin 初始化默认管理员账号
|
|
func initDefaultAdmin() {
|
|
var count int64
|
|
err := global.GVA_DB.Model(&system.SysUser{}).Where("username = ?", "root").Count(&count).Error
|
|
if err != nil {
|
|
global.GVA_LOG.Error("check admin user failed", zap.Error(err))
|
|
return
|
|
}
|
|
|
|
// 如果已存在 root 用户,则跳过
|
|
if count > 0 {
|
|
global.GVA_LOG.Info("default admin user already exists, skip initialization")
|
|
return
|
|
}
|
|
|
|
// 加密密码
|
|
hashedPassword, err := bcrypt.GenerateFromPassword([]byte("root123"), bcrypt.DefaultCost)
|
|
if err != nil {
|
|
global.GVA_LOG.Error("hash password failed", zap.Error(err))
|
|
return
|
|
}
|
|
|
|
// 创建默认管理员账号
|
|
adminUser := system.SysUser{
|
|
Username: "root",
|
|
Password: string(hashedPassword),
|
|
Nickname: "超级管理员",
|
|
Email: "admin@example.com",
|
|
Role: "admin",
|
|
Status: "active",
|
|
}
|
|
|
|
if err := global.GVA_DB.Create(&adminUser).Error; err != nil {
|
|
global.GVA_LOG.Error("create default admin user failed", zap.Error(err))
|
|
return
|
|
}
|
|
|
|
global.GVA_LOG.Info("default admin user created successfully (username: root, password: root123)")
|
|
}
|