/pkg/api/dao/init.go

https://github.com/bullteam/zeus-admin · Go · 70 lines · 59 code · 8 blank · 3 comment · 9 complexity · 4ffd8b651df7f2c332f3a2555bea44e1 MD5 · raw file

  1. package dao
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "github.com/jinzhu/gorm"
  6. _ "github.com/jinzhu/gorm/dialects/mysql"
  7. _ "github.com/jinzhu/gorm/dialects/sqlite"
  8. "github.com/spf13/viper"
  9. "zeus/pkg/api/domain/search/adapter/statement"
  10. "zeus/pkg/api/log"
  11. )
  12. var (
  13. db *gorm.DB
  14. )
  15. const (
  16. DRIVER_MYSQL = "mysql"
  17. DRIVER_SQLITE = "sqlite"
  18. )
  19. var searchAdapter = &statement.SqlSearchAdapter{}
  20. // Setup : Connect to mysql database
  21. func Setup() {
  22. var err error
  23. switch viper.Get("database.driver") {
  24. case DRIVER_SQLITE:
  25. db, err = gorm.Open("sqlite3", viper.GetString("database.sqlite.dsn"))
  26. if err != nil {
  27. log.Fatal(fmt.Sprintf("Failed to connect sqlite %s", err.Error()))
  28. } else {
  29. db.LogMode(true)
  30. }
  31. case DRIVER_MYSQL:
  32. host := viper.GetString("database.mysql.host")
  33. user := viper.GetString("database.mysql.user")
  34. password := viper.GetString("database.mysql.password")
  35. name := viper.GetString("database.mysql.name")
  36. charset := viper.GetString("database.mysql.charset")
  37. dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=%s&parseTime=True&loc=Local", user, password, host, name, charset)
  38. log.Debug(dsn)
  39. db, err = gorm.Open("mysql", dsn)
  40. if err != nil {
  41. log.Fatal(fmt.Sprintf("Failed to connect mysql %s", err.Error()))
  42. } else {
  43. db.DB().SetMaxIdleConns(viper.GetInt("database.mysql.pool.min"))
  44. db.DB().SetMaxOpenConns(viper.GetInt("database.mysql.pool.max"))
  45. if gin.Mode() != gin.ReleaseMode {
  46. db.LogMode(true)
  47. }
  48. }
  49. default:
  50. log.Fatal("We do not support this kind of storage system yet!")
  51. }
  52. log.Info("Successfully connect to database")
  53. }
  54. // Shutdown - close database connection
  55. func Shutdown() error {
  56. log.Info("Closing database's connections")
  57. return db.Close()
  58. }
  59. // GetDb - get a database connection
  60. func GetDb() *gorm.DB {
  61. return db
  62. }