2023-07-20 20:34:05 +08:00
|
|
|
package migrations
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"github.com/go-gormigrate/gormigrate/v2"
|
|
|
|
|
"gorm.io/gorm"
|
2023-07-22 00:48:41 +08:00
|
|
|
"mayfly-go/internal/sys/domain/entity"
|
|
|
|
|
"mayfly-go/pkg/model"
|
2023-07-20 20:34:05 +08:00
|
|
|
"mayfly-go/pkg/rediscli"
|
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// RunMigrations 数据库迁移操作
|
|
|
|
|
func RunMigrations(db *gorm.DB) error {
|
|
|
|
|
// 添加分布式锁, 防止多个服务同时执行迁移
|
|
|
|
|
if rediscli.GetCli() != nil {
|
|
|
|
|
if ok, err := rediscli.GetCli().
|
|
|
|
|
SetNX(context.Background(), "migrations", "lock", time.Minute).Result(); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
} else if !ok {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
defer rediscli.Del("migrations")
|
|
|
|
|
}
|
|
|
|
|
return run(db,
|
|
|
|
|
T2022,
|
|
|
|
|
T20230720,
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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: 200,
|
|
|
|
|
UseTransaction: true,
|
|
|
|
|
ValidateUnknownMigrations: true,
|
|
|
|
|
}, ms)
|
|
|
|
|
if err := m.Migrate(); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
2023-07-22 00:48:41 +08:00
|
|
|
|
|
|
|
|
func insertResource(tx *gorm.DB, res *entity.Resource) error {
|
|
|
|
|
now := time.Now()
|
|
|
|
|
res.CreateTime = &now
|
|
|
|
|
res.CreatorId = 1
|
|
|
|
|
res.Creator = "admin"
|
|
|
|
|
res.UpdateTime = &now
|
|
|
|
|
res.ModifierId = 1
|
|
|
|
|
res.Modifier = "admin"
|
|
|
|
|
if err := tx.Save(res).Error; err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return tx.Save(&entity.RoleResource{
|
|
|
|
|
DeletedModel: model.DeletedModel{},
|
|
|
|
|
RoleId: 1,
|
|
|
|
|
ResourceId: res.Id,
|
|
|
|
|
CreateTime: &now,
|
|
|
|
|
CreatorId: 1,
|
|
|
|
|
Creator: "admin",
|
|
|
|
|
}).Error
|
|
|
|
|
}
|