
* beta:2.7.8-a 增加自动化创建树形结构 (#1941) * feat: 支持创建树形结构 --------- Co-authored-by: piexlMax(奇淼 <qimiaojiangjizhao@gmail.com> * 优化user store部分写法 * Update user.js * feat: 升级版本号 * Dev 278 beta2 (#1954) * 在关闭详情弹窗后 detailFrom为空对象,arr为undefined 使用slice控制台会报错 * 查询不重置pageSize * 优化主题模式相关内容 * 优化弹窗手机端显示 * bugfix:PostgreSQL initdb (#1953) * bugfix:postgresql增加显示指定template --------- Co-authored-by: PiexlMax(奇淼 <165128580+pixelmaxQm@users.noreply.github.com> --------- Co-authored-by: zayn <972858472@qq.com> Co-authored-by: Azir <2075125282@qq.com> Co-authored-by: Qing Liang <106448173+xue-ding-e@users.noreply.github.com> * docs:调整部分代码注释以及代码格式 * feat: 自动化代码字典支持多选 * fix:调整值接收器和指针接收器 * feat: 支持导出表格复制,优化增加方法页面。 * chore:初始化代码规范化。 --------- Co-authored-by: piexlMax(奇淼 <qimiaojiangjizhao@gmail.com> Co-authored-by: Azir <2075125282@qq.com> Co-authored-by: zayn <972858472@qq.com> Co-authored-by: Qing Liang <106448173+xue-ding-e@users.noreply.github.com> Co-authored-by: cjb <75364055@qq.com>
102 lines
2.9 KiB
Go
102 lines
2.9 KiB
Go
package system
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"path/filepath"
|
|
|
|
"github.com/flipped-aurora/gin-vue-admin/server/config"
|
|
"github.com/gookit/color"
|
|
|
|
"github.com/flipped-aurora/gin-vue-admin/server/utils"
|
|
|
|
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
|
"github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
|
|
"github.com/gofrs/uuid/v5"
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type PgsqlInitHandler struct{}
|
|
|
|
func NewPgsqlInitHandler() *PgsqlInitHandler {
|
|
return &PgsqlInitHandler{}
|
|
}
|
|
|
|
// WriteConfig pgsql 回写配置
|
|
func (h PgsqlInitHandler) WriteConfig(ctx context.Context) error {
|
|
c, ok := ctx.Value("config").(config.Pgsql)
|
|
if !ok {
|
|
return errors.New("postgresql config invalid")
|
|
}
|
|
global.GVA_CONFIG.System.DbType = "pgsql"
|
|
global.GVA_CONFIG.Pgsql = c
|
|
global.GVA_CONFIG.JWT.SigningKey = uuid.Must(uuid.NewV4()).String()
|
|
cs := utils.StructToMap(global.GVA_CONFIG)
|
|
for k, v := range cs {
|
|
global.GVA_VP.Set(k, v)
|
|
}
|
|
global.GVA_ACTIVE_DBNAME = &c.Dbname
|
|
return global.GVA_VP.WriteConfig()
|
|
}
|
|
|
|
// EnsureDB 创建数据库并初始化 pg
|
|
func (h PgsqlInitHandler) EnsureDB(ctx context.Context, conf *request.InitDB) (next context.Context, err error) {
|
|
if s, ok := ctx.Value("dbtype").(string); !ok || s != "pgsql" {
|
|
return ctx, ErrDBTypeMismatch
|
|
}
|
|
|
|
c := conf.ToPgsqlConfig()
|
|
next = context.WithValue(ctx, "config", c)
|
|
if c.Dbname == "" {
|
|
return ctx, nil
|
|
} // 如果没有数据库名, 则跳出初始化数据
|
|
|
|
dsn := conf.PgsqlEmptyDsn()
|
|
var createSql string
|
|
if conf.Template != "" {
|
|
createSql = fmt.Sprintf("CREATE DATABASE %s WITH TEMPLATE %s;", c.Dbname, conf.Template)
|
|
} else {
|
|
createSql = fmt.Sprintf("CREATE DATABASE %s;", c.Dbname)
|
|
}
|
|
if err = createDatabase(dsn, "pgx", createSql); err != nil {
|
|
return nil, err
|
|
} // 创建数据库
|
|
|
|
var db *gorm.DB
|
|
if db, err = gorm.Open(postgres.New(postgres.Config{
|
|
DSN: c.Dsn(), // DSN data source name
|
|
PreferSimpleProtocol: false,
|
|
}), &gorm.Config{DisableForeignKeyConstraintWhenMigrating: true}); err != nil {
|
|
return ctx, err
|
|
}
|
|
global.GVA_CONFIG.AutoCode.Root, _ = filepath.Abs("..")
|
|
next = context.WithValue(next, "db", db)
|
|
return next, err
|
|
}
|
|
|
|
func (h PgsqlInitHandler) InitTables(ctx context.Context, inits initSlice) error {
|
|
return createTables(ctx, inits)
|
|
}
|
|
|
|
func (h PgsqlInitHandler) InitData(ctx context.Context, inits initSlice) error {
|
|
next, cancel := context.WithCancel(ctx)
|
|
defer func(c func()) { c() }(cancel)
|
|
for i := 0; i < len(inits); i++ {
|
|
if inits[i].DataInserted(next) {
|
|
color.Info.Printf(InitDataExist, Pgsql, inits[i].InitializerName())
|
|
continue
|
|
}
|
|
if n, err := inits[i].InitializeData(next); err != nil {
|
|
color.Info.Printf(InitDataFailed, Pgsql, inits[i].InitializerName(), err)
|
|
return err
|
|
} else {
|
|
next = n
|
|
color.Info.Printf(InitDataSuccess, Pgsql, inits[i].InitializerName())
|
|
}
|
|
}
|
|
color.Info.Printf(InitSuccess, Pgsql)
|
|
return nil
|
|
}
|