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)") }