diff --git a/cmd/migrate/server.go b/cmd/migrate/server.go index d40a3901..898a66ed 100644 --- a/cmd/migrate/server.go +++ b/cmd/migrate/server.go @@ -1,7 +1,13 @@ package migrate import ( + "bytes" "fmt" + tools2 "go-admin/tools" + "strconv" + "text/template" + "time" + "github.com/spf13/cobra" "go-admin/cmd/migrate/migration" _ "go-admin/cmd/migrate/migration/version" @@ -14,7 +20,7 @@ import ( var ( configYml string - exec bool + generate bool StartCmd = &cobra.Command{ Use: "migrate", Short: "Initialize the database", @@ -27,7 +33,7 @@ var ( func init() { StartCmd.PersistentFlags().StringVarP(&configYml, "config", "c", "config/settings.yml", "Start server with provided configuration file") - //StartCmd.PersistentFlags().BoolVarP(&exec, "exec", "e", false, "exec script") + StartCmd.PersistentFlags().BoolVarP(&generate, "generate", "g", false, "generate migration file") } func run() { @@ -37,18 +43,11 @@ func run() { config.Setup(configYml) //2. 设置日志 logger.Setup() - //3. 初始化数据库链接 - database.Setup(config.DatabaseConfig.Driver) - //4. 数据库迁移 - fmt.Println("数据库迁移开始") - _ = migrateModel() - //fmt.Println("数据库结构初始化成功!") - //5. 数据初始化完成 - //if err := models.InitDb(); err != nil { - // global.Logger.Fatalf("数据库基础数据初始化失败!error: %v ", err) - //} - usage = `数据库基础数据初始化成功` - fmt.Println(usage) + if !generate { + _ = initDB() + } else { + _ = genFile() + } } func migrateModel() error { @@ -63,3 +62,25 @@ func migrateModel() error { migration.Migrate.Migrate() return err } +func initDB() error { + //3. 初始化数据库链接 + database.Setup(config.DatabaseConfig.Driver) + //4. 数据库迁移 + fmt.Println("数据库迁移开始") + _ = migrateModel() + fmt.Println(`数据库基础数据初始化成功`) + return nil +} + +func genFile() error { + t1, err := template.ParseFiles("template/migrate.template") + if err != nil { + return err + } + m := map[string]string{} + m["GenerateTime"] = strconv.FormatInt(time.Now().UnixNano()/1e6, 10) + var b1 bytes.Buffer + err = t1.Execute(&b1, m) + tools2.FileCreate(b1, "./cmd/migrate/migration/version/"+m["GenerateTime"]+"_migrate.go") + return nil +} diff --git a/template/migrate.template b/template/migrate.template new file mode 100644 index 00000000..1c77103a --- /dev/null +++ b/template/migrate.template @@ -0,0 +1,41 @@ +package version + +import ( + "go-admin/app/admin/models" + "gorm.io/gorm" + "runtime" + + "go-admin/cmd/migrate/migration" + common "go-admin/common/models" +) + +func init() { + _, fileName, _, _ := runtime.Caller(0) + migration.Migrate.SetVersion(migration.GetFilename(fileName), _{{.GenerateTime}}Test) +} + +func _{{.GenerateTime}}Test(db *gorm.DB, version string) error { + return db.Transaction(func(tx *gorm.DB) error { + + // TODO: 这里开始写入要变更的内容 + + // TODO: 例如 修改表字段 使用过程中请删除此段代码 + err := db.Migrator().RenameColumn(&models.SysConfig{}, "config_id", "id") + if err != nil { + return err + } + + // TODO: 例如 新增表结构 使用过程中请删除此段代码 + err = db.Debug().Migrator().AutoMigrate( + new(models.CasbinRule), + ) + if err != nil { + return err + } + + + return db.Create(&common.Migration{ + Version: version, + }).Error + }) +}