2022-05-18 17:57:03 +08:00
|
|
|
package common
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
2022-05-29 10:06:21 +08:00
|
|
|
"github.com/eryajf/go-ldap-admin/config"
|
|
|
|
"github.com/eryajf/go-ldap-admin/model"
|
2022-05-18 17:57:03 +08:00
|
|
|
|
|
|
|
"gorm.io/driver/mysql"
|
2022-12-30 14:50:59 +08:00
|
|
|
"gorm.io/driver/sqlite"
|
2022-05-18 17:57:03 +08:00
|
|
|
"gorm.io/gorm"
|
|
|
|
)
|
|
|
|
|
2022-12-30 14:50:59 +08:00
|
|
|
// 全局数据库对象
|
2022-05-18 17:57:03 +08:00
|
|
|
var DB *gorm.DB
|
|
|
|
|
2022-12-30 14:50:59 +08:00
|
|
|
// 初始化数据库
|
|
|
|
func InitDB() {
|
|
|
|
if config.Conf.Database.Driver == "mysql" {
|
|
|
|
initMysql()
|
|
|
|
} else if config.Conf.Database.Driver == "sqlite3" {
|
|
|
|
initSqlite3()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func initSqlite3() {
|
|
|
|
db, err := gorm.Open(sqlite.Open(config.Conf.Database.Source), &gorm.Config{
|
|
|
|
// 禁用外键(指定外键时不会在mysql创建真实的外键约束)
|
|
|
|
DisableForeignKeyConstraintWhenMigrating: true,
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
Log.Panicf("failed to connect sqlite3: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
DB = db
|
|
|
|
// 自动迁移表结构
|
|
|
|
dbAutoMigrate()
|
|
|
|
Log.Infof("初始化 sqlite3 数据库完成!")
|
|
|
|
}
|
|
|
|
|
|
|
|
func initMysql() {
|
2022-05-18 17:57:03 +08:00
|
|
|
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&collation=%s&%s",
|
|
|
|
config.Conf.Mysql.Username,
|
|
|
|
config.Conf.Mysql.Password,
|
|
|
|
config.Conf.Mysql.Host,
|
|
|
|
config.Conf.Mysql.Port,
|
|
|
|
config.Conf.Mysql.Database,
|
|
|
|
config.Conf.Mysql.Charset,
|
|
|
|
config.Conf.Mysql.Collation,
|
|
|
|
config.Conf.Mysql.Query,
|
|
|
|
)
|
|
|
|
// 隐藏密码
|
|
|
|
showDsn := fmt.Sprintf(
|
|
|
|
"%s:******@tcp(%s:%d)/%s?charset=%s&collation=%s&%s",
|
|
|
|
config.Conf.Mysql.Username,
|
|
|
|
config.Conf.Mysql.Host,
|
|
|
|
config.Conf.Mysql.Port,
|
|
|
|
config.Conf.Mysql.Database,
|
|
|
|
config.Conf.Mysql.Charset,
|
|
|
|
config.Conf.Mysql.Collation,
|
|
|
|
config.Conf.Mysql.Query,
|
|
|
|
)
|
|
|
|
// Log.Info("数据库连接DSN: ", showDsn)
|
|
|
|
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
|
|
|
|
// 禁用外键(指定外键时不会在mysql创建真实的外键约束)
|
|
|
|
DisableForeignKeyConstraintWhenMigrating: true,
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
Log.Panicf("初始化mysql数据库异常: %v", err)
|
|
|
|
panic(fmt.Errorf("初始化mysql数据库异常: %v", err))
|
|
|
|
}
|
|
|
|
|
|
|
|
// 开启mysql日志
|
|
|
|
if config.Conf.Mysql.LogMode {
|
|
|
|
db.Debug()
|
|
|
|
}
|
|
|
|
// 全局DB赋值
|
|
|
|
DB = db
|
|
|
|
// 自动迁移表结构
|
|
|
|
dbAutoMigrate()
|
|
|
|
Log.Infof("初始化mysql数据库完成! dsn: %s", showDsn)
|
|
|
|
}
|
|
|
|
|
|
|
|
// 自动迁移表结构
|
|
|
|
func dbAutoMigrate() {
|
2022-06-14 11:17:38 +08:00
|
|
|
_ = DB.AutoMigrate(
|
2022-05-18 17:57:03 +08:00
|
|
|
&model.User{},
|
|
|
|
&model.Role{},
|
|
|
|
&model.Group{},
|
|
|
|
&model.Menu{},
|
|
|
|
&model.Api{},
|
|
|
|
&model.OperationLog{},
|
|
|
|
)
|
|
|
|
}
|