Files
geekai/api/store/mysql.go
2025-09-01 09:26:12 +08:00

94 lines
2.9 KiB
Go

package store
// * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// * Copyright 2023 The Geek-AI Authors. All rights reserved.
// * Use of this source code is governed by a Apache-2.0 license
// * that can be found in the LICENSE file.
// * @Author yangjian102621@163.com
// * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
import (
"fmt"
"geekai/core/types"
logger2 "geekai/logger"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
)
var log = logger2.GetLogger()
func NewGormConfig() *gorm.Config {
return &gorm.Config{
Logger: logger.Default.LogMode(logger.Warn),
NamingStrategy: schema.NamingStrategy{
TablePrefix: "geekai_", // 设置表前缀
SingularTable: false, // 使用单数表名形式
},
}
}
func NewMysql(config *gorm.Config, appConfig *types.AppConfig) (*gorm.DB, error) {
db, err := gorm.Open(mysql.Open(appConfig.MysqlDns), config)
if err != nil {
return nil, err
}
sqlDB, err := db.DB()
if err != nil {
return nil, err
}
sqlDB.SetMaxIdleConns(32)
sqlDB.SetMaxOpenConns(512)
sqlDB.SetConnMaxLifetime(time.Hour)
log.Info("开始重命名数据表...")
// 重命名数据表
tableRenames := map[string]string{
"chatgpt_chat_roles": "geekai_chat_roles",
"chatgpt_admin_users": "geekai_admin_users",
"chatgpt_api_keys": "geekai_api_keys",
"chatgpt_app_types": "geekai_app_types",
"chatgpt_chat_history": "geekai_chat_history",
"chatgpt_chat_items": "geekai_chat_items",
"chatgpt_chat_models": "geekai_chat_models",
"chatgpt_users": "geekai_users",
"chatgpt_orders": "geekai_orders",
"chatgpt_products": "geekai_products",
"chatgpt_configs": "geekai_configs",
"chatgpt_sd_jobs": "geekai_sd_jobs",
"chatgpt_mj_jobs": "geekai_mj_jobs",
"chatgpt_suno_jobs": "geekai_suno_jobs",
"chatgpt_dall_jobs": "geekai_dall_jobs",
"chatgpt_video_jobs": "geekai_video_jobs",
"chatgpt_jimeng_jobs": "geekai_jimeng_jobs",
"chatgpt_files": "geekai_files",
"chatgpt_menus": "geekai_menus",
"chatgpt_functions": "geekai_functions",
"chatgpt_invite_codes": "geekai_invite_codes",
"chatgpt_invite_logs": "geekai_invite_logs",
"chatgpt_redeems": "geekai_redeems",
"chatgpt_power_logs": "geekai_power_logs",
"chatgpt_user_login_logs": "geekai_user_login_logs",
}
// 执行重命名操作
for oldTableName, newTableName := range tableRenames {
// 检查新表是否已存在
if !db.Migrator().HasTable(newTableName) {
err := db.Exec(fmt.Sprintf("ALTER TABLE %s RENAME TO %s", oldTableName, newTableName)).Error
if err != nil {
log.Errorf("重命名数据表 %s 到 %s 失败: %v", oldTableName, newTableName, err)
} else {
log.Infof("成功重命名数据表: %s -> %s", oldTableName, newTableName)
}
}
}
return db, nil
}