mirror of
https://gitee.com/dromara/mayfly-go
synced 2026-03-22 01:45:39 +08:00
feat: 系统升级支持数据库自动迁移,避免手动执行升级脚本
This commit is contained in:
53
server/migration/migration.go
Normal file
53
server/migration/migration.go
Normal file
@@ -0,0 +1,53 @@
|
||||
package migration
|
||||
|
||||
import (
|
||||
"mayfly-go/migration/migrations"
|
||||
"mayfly-go/pkg/logx"
|
||||
"mayfly-go/pkg/rediscli"
|
||||
"time"
|
||||
|
||||
"github.com/go-gormigrate/gormigrate/v2"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// RunMigrations 数据库迁移操作
|
||||
func RunMigrations(db *gorm.DB) error {
|
||||
logx.Info("start to run migrations")
|
||||
// 添加分布式锁, 防止多个服务同时执行迁移
|
||||
lock := rediscli.NewLock("mayfly:db:migrations", 1*time.Minute)
|
||||
if lock != nil {
|
||||
if !lock.Lock() {
|
||||
return nil
|
||||
}
|
||||
defer lock.UnLock()
|
||||
}
|
||||
|
||||
err := run(db,
|
||||
migrations.Init,
|
||||
migrations.V1_9,
|
||||
)
|
||||
|
||||
if err == nil {
|
||||
logx.Info("migrations run success")
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func run(db *gorm.DB, fs ...func() []*gormigrate.Migration) error {
|
||||
var ms []*gormigrate.Migration
|
||||
for _, f := range fs {
|
||||
ms = append(ms, f()...)
|
||||
}
|
||||
|
||||
m := gormigrate.New(db, &gormigrate.Options{
|
||||
TableName: "migrations",
|
||||
IDColumnName: "id",
|
||||
IDColumnSize: 300,
|
||||
UseTransaction: true,
|
||||
ValidateUnknownMigrations: true,
|
||||
}, ms)
|
||||
if err := m.Migrate(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
1447
server/migration/migrations/init.go
Normal file
1447
server/migration/migrations/init.go
Normal file
File diff suppressed because it is too large
Load Diff
42
server/migration/migrations/v1_9.go
Normal file
42
server/migration/migrations/v1_9.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package migrations
|
||||
|
||||
import (
|
||||
machineentity "mayfly-go/internal/machine/domain/entity"
|
||||
sysentity "mayfly-go/internal/sys/domain/entity"
|
||||
|
||||
"github.com/go-gormigrate/gormigrate/v2"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func V1_9() []*gormigrate.Migration {
|
||||
var migrations []*gormigrate.Migration
|
||||
migrations = append(migrations, V1_9_3()...)
|
||||
return migrations
|
||||
}
|
||||
|
||||
func V1_9_3() []*gormigrate.Migration {
|
||||
return []*gormigrate.Migration{
|
||||
{
|
||||
ID: "20250213-v1.9.3-addMachineExtra-updateMenuIcon",
|
||||
Migrate: func(tx *gorm.DB) error {
|
||||
tx.Migrator().AddColumn(&machineentity.Machine{}, "extra")
|
||||
|
||||
// 更新菜单图标
|
||||
resourceModel := &sysentity.Resource{}
|
||||
tx.Model(resourceModel).Where("id = ?", 11).Update("meta", `{"component":"system/role/RoleList","icon":"icon menu/role","isKeepAlive":true,"routeName":"RoleList"}`)
|
||||
tx.Model(resourceModel).Where("id = ?", 14).Update("meta", `{"component":"system/account/AccountList","icon":"User","isKeepAlive":true,"routeName":"AccountList"}`)
|
||||
tx.Model(resourceModel).Where("id = ?", 150).Update("meta", `{"component":"ops/db/SyncTaskList","icon":"Refresh","isKeepAlive":true,"routeName":"SyncTaskList"}`)
|
||||
tx.Model(resourceModel).Where("id = ?", 60).Update("meta", `{"icon":"icon redis/redis","isKeepAlive":true,"routeName":"RDS"}`)
|
||||
tx.Model(resourceModel).Where("id = ?", 61).Update("meta", `{"component":"ops/redis/DataOperation","icon":"icon redis/redis","isKeepAlive":true,"routeName":"DataOperation"}`)
|
||||
tx.Model(resourceModel).Where("id = ?", 63).Update("meta", `{"component":"ops/redis/RedisList","icon":"icon redis/redis","isKeepAlive":true,"routeName":"RedisList"}`)
|
||||
tx.Model(resourceModel).Where("id = ?", 79).Update("meta", `{"icon":"icon mongo/mongo","isKeepAlive":true,"routeName":"Mongo"}`)
|
||||
tx.Model(resourceModel).Where("id = ?", 80).Update("meta", `{"component":"ops/mongo/MongoDataOp","icon":"icon mongo/mongo","isKeepAlive":true,"routeName":"MongoDataOp"}`)
|
||||
tx.Model(resourceModel).Where("id = ?", 82).Update("meta", `{"component":"ops/mongo/MongoList","icon":"icon mongo/mongo","isKeepAlive":true,"routeName":"MongoList"}`)
|
||||
return nil
|
||||
},
|
||||
Rollback: func(tx *gorm.DB) error {
|
||||
return nil
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user