You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
2.9 KiB

package system
import (
"fmt"
"path/filepath"
"github.com/flipped-aurora/gin-vue-admin/server/config"
"github.com/flipped-aurora/gin-vue-admin/server/global"
model "github.com/flipped-aurora/gin-vue-admin/server/model/system"
"github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
"github.com/flipped-aurora/gin-vue-admin/server/source/example"
"github.com/flipped-aurora/gin-vue-admin/server/source/system"
"github.com/flipped-aurora/gin-vue-admin/server/utils"
uuid "github.com/satori/go.uuid"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// writeMysqlConfig mysql回写配置
// Author [SliverHorn](https://github.com/SliverHorn)
// Author [songzhibin97](https://github.com/songzhibin97)
func (initDBService *InitDBService) writeMysqlConfig(mysql config.Mysql) error {
global.GVA_CONFIG.Mysql = mysql
cs := utils.StructToMap(global.GVA_CONFIG)
for k, v := range cs {
global.GVA_VP.Set(k, v)
}
global.GVA_VP.Set("jwt.signing-key", uuid.NewV4().String())
return global.GVA_VP.WriteConfig()
}
// initMsqlDB 创建数据库并初始化 mysql
// Author [piexlmax](https://github.com/piexlmax)
// Author [SliverHorn](https://github.com/SliverHorn)
// Author: [songzhibin97](https://github.com/songzhibin97)
func (initDBService *InitDBService) initMsqlDB(conf request.InitDB) error {
dsn := conf.MysqlEmptyDsn()
createSql := fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;", conf.DBName)
if err := initDBService.createDatabase(dsn, "mysql", createSql); err != nil {
return err
} // 创建数据库
mysqlConfig := conf.ToMysqlConfig()
if mysqlConfig.Dbname == "" {
return nil
} // 如果没有数据库名, 则跳出初始化数据
if db, err := gorm.Open(mysql.New(mysql.Config{
DSN: mysqlConfig.Dsn(), // DSN data source name
DefaultStringSize: 191, // string 类型字段的默认长度
SkipInitializeWithVersion: true, // 根据版本自动配置
}), &gorm.Config{DisableForeignKeyConstraintWhenMigrating: true}); err != nil {
return nil
} else {
global.GVA_DB = db
}
if err := initDBService.initTables(); err != nil {
global.GVA_DB = nil
return err
}
if err := initDBService.initMysqlData(); err != nil {
global.GVA_DB = nil
return err
}
if err := initDBService.writeMysqlConfig(mysqlConfig); err != nil {
return err
}
global.GVA_CONFIG.AutoCode.Root, _ = filepath.Abs("..")
return nil
}
// initData mysql 初始化数据
// Author [SliverHorn](https://github.com/SliverHorn)
// Author: [songzhibin97](https://github.com/songzhibin97)
func (initDBService *InitDBService) initMysqlData() error {
return model.MysqlDataInitialize(
system.Api,
system.User,
system.Casbin,
system.BaseMenu,
system.Authority,
system.Dictionary,
system.UserAuthority,
system.DataAuthorities,
system.AuthoritiesMenus,
system.DictionaryDetail,
system.ViewAuthorityMenuMysql,
example.FileMysql,
)
}