Files
mayfly-go/server/migrations/init.go

69 lines
1.5 KiB
Go
Raw Normal View History

2023-07-20 20:34:05 +08:00
package migrations
import (
"context"
"github.com/go-gormigrate/gormigrate/v2"
"gorm.io/gorm"
"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
}
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
}