123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package initialize
- import (
- "context"
- adapter "github.com/casbin/gorm-adapter/v3"
- "gorm.io/gorm"
- "server/model/example"
- sysModel "server/model/system"
- "server/service/system"
- )
- const initOrderEnsureTables = system.InitOrderExternal - 1
- type ensureTables struct{}
- // auto run
- func init() {
- system.RegisterInit(initOrderEnsureTables, &ensureTables{})
- }
- func (ensureTables) InitializerName() string {
- return "ensure_tables_created"
- }
- func (e *ensureTables) InitializeData(ctx context.Context) (next context.Context, err error) {
- return ctx, nil
- }
- func (e *ensureTables) DataInserted(ctx context.Context) bool {
- return true
- }
- func (e *ensureTables) MigrateTable(ctx context.Context) (context.Context, error) {
- db, ok := ctx.Value("db").(*gorm.DB)
- if !ok {
- return ctx, system.ErrMissingDBContext
- }
- tables := []interface{}{
- sysModel.SysApi{},
- sysModel.SysUser{},
- sysModel.SysBaseMenu{},
- sysModel.SysAuthority{},
- sysModel.JwtBlacklist{},
- sysModel.SysDictionary{},
- sysModel.SysAutoCodeHistory{},
- sysModel.SysOperationRecord{},
- sysModel.SysDictionaryDetail{},
- sysModel.SysBaseMenuParameter{},
- sysModel.SysBaseMenuBtn{},
- sysModel.SysAuthorityBtn{},
- sysModel.SysAutoCode{},
- sysModel.SysExportTemplate{},
- sysModel.Condition{},
- sysModel.JoinTemplate{},
- adapter.CasbinRule{},
- example.ExaFile{},
- example.ExaCustomer{},
- example.ExaFileChunk{},
- example.ExaFileUploadAndDownload{},
- }
- for _, t := range tables {
- _ = db.AutoMigrate(&t)
- // 视图 authority_menu 会被当成表来创建,引发冲突错误(更新版本的gorm似乎不会)
- // 由于 AutoMigrate() 基本无需考虑错误,因此显式忽略
- }
- return ctx, nil
- }
- func (e *ensureTables) TableCreated(ctx context.Context) bool {
- db, ok := ctx.Value("db").(*gorm.DB)
- if !ok {
- return false
- }
- tables := []interface{}{
- sysModel.SysApi{},
- sysModel.SysUser{},
- sysModel.SysBaseMenu{},
- sysModel.SysAuthority{},
- sysModel.JwtBlacklist{},
- sysModel.SysDictionary{},
- sysModel.SysAutoCodeHistory{},
- sysModel.SysOperationRecord{},
- sysModel.SysDictionaryDetail{},
- sysModel.SysBaseMenuParameter{},
- sysModel.SysBaseMenuBtn{},
- sysModel.SysAuthorityBtn{},
- sysModel.SysAutoCode{},
- sysModel.SysExportTemplate{},
- sysModel.Condition{},
- sysModel.JoinTemplate{},
- adapter.CasbinRule{},
- example.ExaFile{},
- example.ExaCustomer{},
- example.ExaFileChunk{},
- example.ExaFileUploadAndDownload{},
- }
- yes := true
- for _, t := range tables {
- yes = yes && db.Migrator().HasTable(t)
- }
- return yes
- }
|