gorm.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package boot
  2. import (
  3. "fmt"
  4. "time"
  5. "yx-dataset-server/app/model"
  6. "yx-dataset-server/app/model/entity"
  7. iModel "yx-dataset-server/app/model/impl/model"
  8. "yx-dataset-server/library/logger"
  9. "yx-dataset-server/library/utils"
  10. "go.uber.org/dig"
  11. "gorm.io/driver/mysql"
  12. "gorm.io/gorm"
  13. "gorm.io/gorm/schema"
  14. )
  15. // 初始化gorm
  16. func initGorm() (*gorm.DB, error) {
  17. dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?%s",
  18. utils.GetConfig("mysql.user").String(),
  19. utils.GetConfig("mysql.password").String(),
  20. utils.GetConfig("mysql.host").String(),
  21. utils.GetConfig("mysql.port").Int(),
  22. utils.GetConfig("mysql.db_name").String(),
  23. utils.GetConfig("mysql.parameters").String())
  24. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  25. SkipDefaultTransaction: true, // 跳过默认事务
  26. NamingStrategy: schema.NamingStrategy{
  27. TablePrefix: utils.GetConfig("gorm.table_prefix").String(),
  28. SingularTable: true, // 使用单数表名
  29. },
  30. })
  31. if err != nil {
  32. return nil, err
  33. }
  34. db.Logger = logger.NewEntry(logger.GetLogger())
  35. if utils.GetConfig("common.run_mode").String() == "debug" {
  36. db.Debug()
  37. }
  38. sqlDb, err := db.DB()
  39. if err != nil {
  40. return nil, err
  41. }
  42. sqlDb.SetMaxIdleConns(utils.GetConfig("gorm.max_idle_conns").Int())
  43. sqlDb.SetMaxOpenConns(utils.GetConfig("gorm.max_open_conns").Int())
  44. sqlDb.SetConnMaxLifetime(time.Duration(utils.GetConfig("gorm.max_open_conns").Int()) * time.Second)
  45. return db, nil
  46. }
  47. // 自动创建数据表映射
  48. func autoMigrate(db *gorm.DB) error {
  49. return db.AutoMigrate(
  50. new(entity.Dataset),
  51. new(entity.DatasetFile),
  52. new(entity.LoginHistory),
  53. new(entity.Menu),
  54. new(entity.Organization),
  55. new(entity.Role),
  56. new(entity.RoleMenu),
  57. new(entity.User),
  58. new(entity.UserDataset),
  59. new(entity.UserRole),
  60. new(entity.ChatAssistant),
  61. new(entity.ChatSession),
  62. new(entity.ChatMessage),
  63. new(entity.ChatDataset),
  64. new(entity.RobotConfig),
  65. new(entity.RobotDataset),
  66. )
  67. }
  68. func InjectModel(container *dig.Container) error {
  69. _ = container.Provide(iModel.NewTrans)
  70. _ = container.Provide(func(m *iModel.Trans) model.ITrans { return m })
  71. _ = container.Provide(iModel.NewDataset)
  72. _ = container.Provide(func(m *iModel.Dataset) model.IDataset { return m })
  73. _ = container.Provide(iModel.NewDatasetFile)
  74. _ = container.Provide(func(m *iModel.DatasetFile) model.IDatasetFile { return m })
  75. _ = container.Provide(iModel.NewLoginHistory)
  76. _ = container.Provide(func(m *iModel.LoginHistory) model.ILoginHistory { return m })
  77. _ = container.Provide(iModel.NewOrganization)
  78. _ = container.Provide(func(m *iModel.Organization) model.IOrganization { return m })
  79. _ = container.Provide(iModel.NewUser)
  80. _ = container.Provide(func(m *iModel.User) model.IUser { return m })
  81. _ = container.Provide(iModel.NewUserDataset)
  82. _ = container.Provide(func(m *iModel.UserDataset) model.IUserDataset { return m })
  83. _ = container.Provide(iModel.NewUserRole)
  84. _ = container.Provide(func(m *iModel.UserRole) model.IUserRole { return m })
  85. _ = container.Provide(iModel.NewRole)
  86. _ = container.Provide(func(m *iModel.Role) model.IRole { return m })
  87. _ = container.Provide(iModel.NewMenu)
  88. _ = container.Provide(func(m *iModel.Menu) model.IMenu { return m })
  89. _ = container.Provide(iModel.NewRoleMenu)
  90. _ = container.Provide(func(m *iModel.RoleMenu) model.IRoleMenu { return m })
  91. _ = container.Provide(iModel.NewChatAssistant)
  92. _ = container.Provide(func(m *iModel.ChatAssistant) model.IChatAssistant { return m })
  93. _ = container.Provide(iModel.NewChatSession)
  94. _ = container.Provide(func(m *iModel.ChatSession) model.IChatSession { return m })
  95. _ = container.Provide(iModel.NewChatMessage)
  96. _ = container.Provide(func(m *iModel.ChatMessage) model.IChatMessage { return m })
  97. _ = container.Provide(iModel.NewChatDataset)
  98. _ = container.Provide(func(m *iModel.ChatDataset) model.IChatDataset { return m })
  99. _ = container.Provide(iModel.NewRobotConfig)
  100. _ = container.Provide(func(m *iModel.RobotConfig) model.IRobotConfig { return m })
  101. _ = container.Provide(iModel.NewRobotDataset)
  102. _ = container.Provide(func(m *iModel.RobotDataset) model.IRobotDataset { return m })
  103. return nil
  104. }