connection.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package main
  2. import (
  3. "fmt"
  4. "gorm.io/gorm"
  5. "gorm.io/driver/mysql"
  6. "GoEthemineTelegramBot/botsettings"
  7. )
  8. type ConnectionProperties struct {
  9. User string
  10. Pass string
  11. Host string
  12. Db string
  13. }
  14. type Connection struct {
  15. GormDb *gorm.DB
  16. DbOpenStr string
  17. ConnProperties ConnectionProperties
  18. }
  19. func (c *Connection) Init() {
  20. c.ConnProperties.User = botsettings.DbUser()
  21. c.ConnProperties.Pass = botsettings.DbPassword()
  22. c.ConnProperties.Host = botsettings.DbHost()
  23. c.ConnProperties.Db = botsettings.DbName()
  24. c.DbOpenStr = fmt.Sprintf("%s:%s@tcp(%s)/%s",
  25. c.ConnProperties.User, c.ConnProperties.Pass, c.ConnProperties.Host, c.ConnProperties.Db)
  26. LogInfo.Println("Connecting with:")
  27. LogInfo.Println(c.DbOpenStr)
  28. gormDb, err := gorm.Open(mysql.Open(c.DbOpenStr), &gorm.Config{})
  29. if err != nil {
  30. LogError.Println("failed to connect database")
  31. LogError.Println(err)
  32. } else {
  33. LogInfo.Println("Connected to database using gorm")
  34. }
  35. c.GormDb = gormDb
  36. }
  37. func (c *Connection) LatestWorkerRecord(worker string) (lastWorkerRecord Worker, err error) {
  38. result := c.GormDb.
  39. Where("worker = ?", worker).
  40. Order("time desc").
  41. Limit(1).
  42. Find(&lastWorkerRecord)
  43. return lastWorkerRecord, result.Error
  44. }
  45. func (c *Connection) LatestMinerRecord(wallet string) (lastMinerRecord Miner, err error) {
  46. result := c.GormDb.
  47. Where("wallet = ?", wallet).
  48. Order("time desc").
  49. Limit(1).
  50. Find(&lastMinerRecord)
  51. return lastMinerRecord, result.Error
  52. }
  53. func (c *Connection) ChatsWithWallet(wallet string) (ChatIds []int64, err error) {
  54. result := c.GormDb.Model(&User{}).
  55. Where("wallet = ?", wallet).
  56. Select("DISTINCT(chat_id)").
  57. Scan(&ChatIds)
  58. return ChatIds, result.Error
  59. }
  60. func (c *Connection) IsWorkerRowExists(worker string, time int64) (exists bool, err error) {
  61. var rowsCount int64
  62. result := c.GormDb.Model(&Worker{}).
  63. Where("worker = ? and time = ?", worker, time).
  64. Count(&rowsCount)
  65. if result.Error != nil {
  66. return false , result.Error
  67. }
  68. if rowsCount != 0 {
  69. return true, nil
  70. }
  71. return false, nil
  72. }
  73. // List of unique, not empty wallets in user table
  74. func (c *Connection) UniqueWallets() (wallets []string, err error) {
  75. result := c.GormDb.Model(&User{}).
  76. Not("wallet = ?", "").
  77. Select("DISTINCT(wallet)").
  78. Scan(&wallets)
  79. return wallets, result.Error
  80. }