db.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package middleware
  2. import (
  3. "database/sql"
  4. "errors"
  5. "gorm.io/driver/mysql"
  6. "gorm.io/driver/postgres"
  7. "gorm.io/gorm"
  8. "gorm.io/gorm/schema"
  9. "device-manage/common/config"
  10. "device-manage/common/global"
  11. "device-manage/common/middleware"
  12. "device-manage/tools"
  13. )
  14. var WithContextDb = middleware.WithContextDb
  15. func getGormFromDb(driver string, db *sql.DB, config *gorm.Config) (*gorm.DB, error) {
  16. switch driver {
  17. case "mysql":
  18. return gorm.Open(mysql.New(mysql.Config{Conn: db}), config)
  19. case "postgres":
  20. return gorm.Open(postgres.New(postgres.Config{Conn: db}), config)
  21. default:
  22. return nil, errors.New("not support this db driver")
  23. }
  24. }
  25. func GetGormFromConfig(cfg config.Conf) map[string]*gorm.DB {
  26. gormDB := make(map[string]*gorm.DB)
  27. if cfg.GetSaas() {
  28. var err error
  29. for k, v := range cfg.GetDbs() {
  30. gormDB[k], err = getGormFromDb(v.Driver, v.DB, &gorm.Config{
  31. NamingStrategy: schema.NamingStrategy{
  32. SingularTable: true,
  33. },
  34. })
  35. if err != nil {
  36. global.Logger.Fatal(tools.Red(k+" connect error :"), err)
  37. }
  38. }
  39. return gormDB
  40. }
  41. c := cfg.GetDb()
  42. db, err := getGormFromDb(c.Driver, c.DB, &gorm.Config{
  43. NamingStrategy: schema.NamingStrategy{
  44. SingularTable: true,
  45. },
  46. })
  47. if err != nil {
  48. global.Logger.Fatal(tools.Red(c.Driver+" connect error :"), err)
  49. }
  50. gormDB["*"] = db
  51. return gormDB
  52. }