فهرست منبع

feat(command): migrate reset and migrate refresh

runningwater 7 ماه پیش
والد
کامیت
3e2551a167
3فایلهای تغییر یافته به همراه40 افزوده شده و 0 حذف شده
  1. 1 0
      README.md
  2. 18 0
      app/cmd/migrate.go
  3. 21 0
      pkg/migrate/migrator.go

+ 1 - 0
README.md

@@ -72,6 +72,7 @@ UNIQUE KEY `migration` (`migration`)
 
 #### 🚀 新功能
 
+- *(command)* Migrate reset and migrate refresh
 - *(command)* Migrate rollback 命令
 - *(command)* Make migration 命令
 - *(command)* Migrate up 命令

+ 18 - 0
app/cmd/migrate.go

@@ -29,11 +29,29 @@ var CmdMigrateRollback = &cobra.Command{
 	Run:     runDown,
 }
 
+var CmdMigrateReset = &cobra.Command{
+	Use:   "reset",
+	Short: "Reset and re-run all migrations",
+	Run: func(cmd *cobra.Command, args []string) {
+		migrator().Reset()
+	},
+}
+
+var CmdMigrateRefresh = &cobra.Command{
+	Use:   "refresh",
+	Short: "Drop all tables and re-run all migrations",
+	Run: func(cmd *cobra.Command, args []string) {
+		migrator().Refresh()
+	},
+}
+
 // 初始化命令
 func init() {
 	CmdMigrate.AddCommand(
 		CmdMigrateUp,
 		CmdMigrateRollback,
+		CmdMigrateReset,
+		CmdMigrateRefresh,
 	)
 }
 

+ 21 - 0
pkg/migrate/migrator.go

@@ -93,6 +93,27 @@ func (m *Migrator) Rollback() {
 	}
 }
 
+// Reset 回滚所有的迁移操作
+func (m *Migrator) Reset() {
+
+	// 获取所有的迁移数据
+	migrations := []Migration{}
+	m.DB.Order("id desc").Find(&migrations)
+
+	// 回滚迁移操作
+	if !m.rollbackMigrations(migrations) {
+		console.Success("[migrations] table is empty, nothing to rollback")
+	}
+}
+
+// Refresh 回滚所有的迁移操作, 并重新执行所有的迁移操作
+func (m *Migrator) Refresh() {
+	// 回滚所有的迁移操作
+	m.Reset()
+	// 重新执行所有的迁移操作
+	m.Up()
+}
+
 // 回滚迁移操作
 func (m *Migrator) rollbackMigrations(migrations []Migration) bool {