migrate.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package core
  2. import (
  3. "fmt"
  4. "go_server/base/config"
  5. "go_server/model/system"
  6. "gorm.io/gorm"
  7. )
  8. // 数据库同步
  9. // MigrateTable 迁移表接口
  10. type MigrateTable interface {
  11. TableName() string
  12. Comment() string
  13. }
  14. var allTables = []MigrateTable{
  15. &system.Administrator{},
  16. &system.AdministratorLog{},
  17. &system.Role{},
  18. &system.Apis{},
  19. &system.Menus{},
  20. &system.Dictionaries{},
  21. &system.DictionaryDetail{},
  22. &system.FileJob{},
  23. &system.SysSignConfig{},
  24. }
  25. func Migrates() {
  26. db := MainDb()
  27. CurrentDatabase := db.Migrator().CurrentDatabase()
  28. Log.Info(fmt.Sprintf("当前数据库[%s]", CurrentDatabase))
  29. mTables := make([]MigrateTable, 0)
  30. mTables = append(mTables, allTables...)
  31. migrationTable(db, mTables) // 同步数据库结构
  32. sysDataInit(db) // 数据初始化
  33. sysSignInfoInit(db) // 系统交互密钥初始化
  34. Log.Info(fmt.Sprintf("数据库迁移完成"))
  35. }
  36. func sysDataInit(db *gorm.DB) {
  37. if err := system.NewAdministrator().DataInit(db); err != nil {
  38. Log.Error("error:", err.Error())
  39. }
  40. if err := system.NewApis().DataInit(db); err != nil {
  41. Log.Error("error:", err.Error())
  42. }
  43. if err := system.NewMenus().DataInit(db); err != nil {
  44. Log.Error("error:", err.Error())
  45. }
  46. if err := system.NewRole().DataInit(db); err != nil {
  47. Log.Error("error:", err.Error())
  48. }
  49. }
  50. // migrationTable 迁移数据表
  51. func migrationTable(db *gorm.DB, tables []MigrateTable) {
  52. for _, table := range tables {
  53. //slog.Info(fmt.Sprintf("开始迁移[%s]表", table.TableName()))
  54. db = db.Set("gorm:table_options", "ENGINE=InnoDB")
  55. comment := fmt.Sprintf("COMMENT='%s'", table.Comment())
  56. db = db.Set("gorm:table_options", comment)
  57. err := db.Migrator().AutoMigrate(table)
  58. if err != nil {
  59. Log.Error(fmt.Sprintf("[%s]表迁移失败:%s", table.TableName(), err.Error()))
  60. }
  61. Log.Info(fmt.Sprintf("[%s]表迁移完成", table.TableName()))
  62. }
  63. }
  64. const (
  65. SignKey = "sign"
  66. SignSystemName = "app" // 本系统名称 -- 用于接口交互时候身份识别
  67. SignSystemAdminServerName = "admin" // 管理后台服务
  68. )
  69. // 初始化系统签名信息
  70. func sysSignInfoInit(db *gorm.DB) {
  71. var rows []system.SysSignConfig
  72. // 初始化本系统密钥信息
  73. findRow := system.NewSysSignConfig()
  74. err := db.Model(&system.SysSignConfig{}).Where("sign_name", SignSystemAdminServerName).Find(&findRow).Error
  75. if err != nil {
  76. panic(err)
  77. }
  78. if findRow.ID == 0 {
  79. addr, pri, err := GenerateSysInfo()
  80. if err != nil {
  81. panic(err)
  82. }
  83. rows = append(rows, system.SysSignConfig{
  84. IsSystemSign: true,
  85. SignName: SignSystemAdminServerName,
  86. SignAddress: addr,
  87. SignPriKey: pri,
  88. SignExpSec: 5,
  89. SysUrl: fmt.Sprintf("http://127.0.0.1:%d", config.AdminHostPort),
  90. })
  91. //bizAddr, bizPri, err := GenerateSysInfo()
  92. //if err != nil {
  93. // panic(err)
  94. //}
  95. //rows = append(rows, system.SysSignConfig{
  96. // IsSystemSign: false,
  97. // SignName: SignSystemName,
  98. // SignAddress: bizAddr,
  99. // SignPriKey: bizPri,
  100. // SignExpSec: 5,
  101. // SysUrl: fmt.Sprintf("http://127.0.0.1:%d", config.BizHostPort),
  102. //})
  103. }
  104. if len(rows) > 0 {
  105. err = db.Create(&rows).Error
  106. if err != nil {
  107. panic(err)
  108. }
  109. }
  110. }