Files
oneterm/backend/db/mysql.go
2024-10-22 11:09:21 +08:00

53 lines
1.3 KiB
Go

package mysql
import (
"fmt"
"strings"
"go.uber.org/zap"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"github.com/veops/oneterm/conf"
"github.com/veops/oneterm/logger"
"github.com/veops/oneterm/model"
)
var (
DB *gorm.DB
)
func init() {
var err error
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/oneterm?charset=utf8mb4&parseTime=True&loc=Local",
conf.Cfg.Mysql.User, conf.Cfg.Mysql.Password, conf.Cfg.Mysql.Host, conf.Cfg.Mysql.Port)
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
DisableForeignKeyConstraintWhenMigrating: true,
})
if err != nil {
logger.L().Fatal("init mysql failed", zap.Error(err))
}
err = DB.AutoMigrate(
model.DefaultAccount, model.DefaultAsset, model.DefaultAuthorization, model.DefaultCommand,
model.DefaultConfig, model.DefaultFileHistory, model.DefaultGateway, model.DefaultHistory,
model.DefaultNode, model.DefaultPublicKey, model.DefaultSession, model.DefaultSessionCmd,
model.DefaultShare,
)
if err != nil {
logger.L().Fatal("auto migrate mysql failed", zap.Error(err))
}
dropIndexs := map[string]any{
"asset_account_id_del": &model.Authorization{},
}
for k, v := range dropIndexs {
if !DB.Migrator().HasIndex(v, k) {
continue
}
if err = DB.Migrator().DropIndex(v, k); err != nil && !strings.Contains(err.Error(), "1091") {
logger.L().Fatal("drop index failed", zap.Error(err))
}
}
}