Files
bl/cool/initdb.go
2025-06-20 17:13:51 +08:00

93 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package cool
import (
"github.com/cool-team-official/cool-admin-go/cool/cooldb"
"github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gres"
"gorm.io/gorm"
)
// 初始化数据库连接供gorm使用
func InitDB(group string) (*gorm.DB, error) {
// var ctx context.Context
var db *gorm.DB
// 如果group为空则使用默认的group否则使用group参数
if group == "" {
group = "default"
}
defer func() {
if err := recover(); err != nil {
panic("failed to connect database")
}
}()
config := g.DB(group).GetConfig()
db, err := cooldb.GetConn(config)
if err != nil {
panic(err.Error())
}
GormDBS[group] = db
return db, nil
}
// 根据entity结构体获取 *gorm.DB
func getDBbyModel(model IModel) *gorm.DB {
group := model.GroupName()
// 判断是否存在 GormDBS[group] 字段如果存在则使用该字段的值作为DB否则初始化DB
if _, ok := GormDBS[group]; ok {
return GormDBS[group]
} else {
db, err := InitDB(group)
if err != nil {
panic("failed to connect database")
}
// 把重新初始化的GormDBS存入全局变量中
GormDBS[group] = db
return db
}
}
// 根据entity结构体创建表
func CreateTable(model IModel) error {
if Config.AutoMigrate {
db := getDBbyModel(model)
return db.AutoMigrate(model)
}
return nil
}
// FillInitData 数据库填充初始数据
func FillInitData(ctx g.Ctx, moduleName string, model IModel) error {
mInit := g.DB("default").Model("base_sys_init")
n, err := mInit.Clone().Where("group", model.GroupName()).Where("table", model.TableName()).Count()
if err != nil {
g.Log().Error(ctx, "读取表 base_sys_init 失败 ", err.Error())
return err
}
if n > 0 {
g.Log().Debug(ctx, "分组", model.GroupName(), "中的表", model.TableName(), "已经初始化过,跳过本次初始化.")
return nil
}
m := g.DB(model.GroupName()).Model(model.TableName())
jsonData, _ := gjson.LoadContent(gres.GetContent("modules/" + moduleName + "/resource/initjson/" + model.TableName() + ".json"))
if jsonData.Var().Clone().IsEmpty() {
g.Log().Debug(ctx, "分组", model.GroupName(), "中的表", model.TableName(), "无可用的初始化数据,跳过本次初始化.")
return nil
}
_, err = m.Data(jsonData).Insert()
if err != nil {
g.Log().Error(ctx, err.Error())
return err
}
_, err = mInit.Insert(g.Map{"group": model.GroupName(), "table": model.TableName()})
if err != nil {
g.Log().Error(ctx, err.Error())
return err
}
g.Log().Info(ctx, "分组", model.GroupName(), "中的表", model.TableName(), "初始化完成.")
return nil
}