main.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package model
  2. import (
  3. "gorm.io/driver/mysql"
  4. "gorm.io/driver/sqlite"
  5. "gorm.io/gorm"
  6. "message-pusher/common"
  7. "os"
  8. )
  9. var DB *gorm.DB
  10. func createRootAccountIfNeed() error {
  11. var user User
  12. //if user.Status != common.UserStatusEnabled {
  13. if err := DB.First(&user).Error; err != nil {
  14. hashedPassword, err := common.Password2Hash("123456")
  15. if err != nil {
  16. return err
  17. }
  18. rootUser := User{
  19. Username: "root",
  20. Password: hashedPassword,
  21. Role: common.RoleRootUser,
  22. Status: common.UserStatusEnabled,
  23. DisplayName: "Root User",
  24. }
  25. DB.Create(&rootUser)
  26. }
  27. return nil
  28. }
  29. func CountTable(tableName string) (num int64) {
  30. DB.Table(tableName).Count(&num)
  31. return
  32. }
  33. func InitDB() (err error) {
  34. var db *gorm.DB
  35. if os.Getenv("SQL_DSN") != "" {
  36. // Use MySQL
  37. db, err = gorm.Open(mysql.Open(os.Getenv("SQL_DSN")), &gorm.Config{
  38. PrepareStmt: true, // precompile SQL
  39. })
  40. } else {
  41. // Use SQLite
  42. db, err = gorm.Open(sqlite.Open(common.SQLitePath), &gorm.Config{
  43. PrepareStmt: true, // precompile SQL
  44. })
  45. common.SysLog("SQL_DSN not set, using SQLite as database")
  46. }
  47. if err == nil {
  48. DB = db
  49. err := db.AutoMigrate(&File{})
  50. if err != nil {
  51. return err
  52. }
  53. err = db.AutoMigrate(&User{})
  54. if err != nil {
  55. return err
  56. }
  57. err = db.AutoMigrate(&Option{})
  58. if err != nil {
  59. return err
  60. }
  61. err = createRootAccountIfNeed()
  62. return err
  63. } else {
  64. common.FatalLog(err)
  65. }
  66. return err
  67. }
  68. func CloseDB() error {
  69. sqlDB, err := DB.DB()
  70. if err != nil {
  71. return err
  72. }
  73. err = sqlDB.Close()
  74. return err
  75. }