2
0

ensure_tables.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package initialize
  2. import (
  3. "context"
  4. adapter "github.com/casbin/gorm-adapter/v3"
  5. "github.com/flipped-aurora/gin-vue-admin/server/model/example"
  6. sysModel "github.com/flipped-aurora/gin-vue-admin/server/model/system"
  7. "github.com/flipped-aurora/gin-vue-admin/server/plugin/announcement/model"
  8. "github.com/flipped-aurora/gin-vue-admin/server/service/system"
  9. "gorm.io/gorm"
  10. )
  11. const initOrderEnsureTables = system.InitOrderExternal - 1
  12. type ensureTables struct{}
  13. // auto run
  14. func init() {
  15. system.RegisterInit(initOrderEnsureTables, &ensureTables{})
  16. }
  17. func (e *ensureTables) InitializerName() string {
  18. return "ensure_tables_created"
  19. }
  20. func (e *ensureTables) InitializeData(ctx context.Context) (next context.Context, err error) {
  21. return ctx, nil
  22. }
  23. func (e *ensureTables) DataInserted(ctx context.Context) bool {
  24. return true
  25. }
  26. func (e *ensureTables) MigrateTable(ctx context.Context) (context.Context, error) {
  27. db, ok := ctx.Value("db").(*gorm.DB)
  28. if !ok {
  29. return ctx, system.ErrMissingDBContext
  30. }
  31. tables := []interface{}{
  32. sysModel.SysApi{},
  33. sysModel.SysUser{},
  34. sysModel.SysBaseMenu{},
  35. sysModel.SysAuthority{},
  36. sysModel.JwtBlacklist{},
  37. sysModel.SysDictionary{},
  38. sysModel.SysAutoCodeHistory{},
  39. sysModel.SysOperationRecord{},
  40. sysModel.SysDictionaryDetail{},
  41. sysModel.SysBaseMenuParameter{},
  42. sysModel.SysBaseMenuBtn{},
  43. sysModel.SysAuthorityBtn{},
  44. sysModel.SysAutoCodePackage{},
  45. sysModel.SysExportTemplate{},
  46. sysModel.Condition{},
  47. sysModel.JoinTemplate{},
  48. sysModel.SysParams{},
  49. adapter.CasbinRule{},
  50. example.ExaFile{},
  51. example.ExaCustomer{},
  52. example.ExaFileChunk{},
  53. example.ExaFileUploadAndDownload{},
  54. example.ExaAttachmentCategory{},
  55. model.Info{},
  56. }
  57. for _, t := range tables {
  58. _ = db.AutoMigrate(&t)
  59. // 视图 authority_menu 会被当成表来创建,引发冲突错误(更新版本的gorm似乎不会)
  60. // 由于 AutoMigrate() 基本无需考虑错误,因此显式忽略
  61. }
  62. return ctx, nil
  63. }
  64. func (e *ensureTables) TableCreated(ctx context.Context) bool {
  65. db, ok := ctx.Value("db").(*gorm.DB)
  66. if !ok {
  67. return false
  68. }
  69. tables := []interface{}{
  70. sysModel.SysApi{},
  71. sysModel.SysUser{},
  72. sysModel.SysBaseMenu{},
  73. sysModel.SysAuthority{},
  74. sysModel.JwtBlacklist{},
  75. sysModel.SysDictionary{},
  76. sysModel.SysAutoCodeHistory{},
  77. sysModel.SysOperationRecord{},
  78. sysModel.SysDictionaryDetail{},
  79. sysModel.SysBaseMenuParameter{},
  80. sysModel.SysBaseMenuBtn{},
  81. sysModel.SysAuthorityBtn{},
  82. sysModel.SysAutoCodePackage{},
  83. sysModel.SysExportTemplate{},
  84. sysModel.Condition{},
  85. sysModel.JoinTemplate{},
  86. adapter.CasbinRule{},
  87. example.ExaFile{},
  88. example.ExaCustomer{},
  89. example.ExaFileChunk{},
  90. example.ExaFileUploadAndDownload{},
  91. example.ExaAttachmentCategory{},
  92. model.Info{},
  93. }
  94. yes := true
  95. for _, t := range tables {
  96. yes = yes && db.Migrator().HasTable(t)
  97. }
  98. return yes
  99. }