123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- package database
- import (
- "fmt"
- "gorm.io/gorm"
- "gorm.io/driver/mysql"
- log "gogs.veloe.link/toomanysugar/GoEthemineTelegramBot/internal/logger"
- "gogs.veloe.link/toomanysugar/GoEthemineTelegramBot/cmd/settings"
- )
- type ConnectionProperties struct {
- User string
- Pass string
- Host string
- Db string
- }
- type Connection struct {
- GormDb *gorm.DB
- DbOpenStr string
- ConnProperties ConnectionProperties
- }
- func (c *Connection) Init() {
- c.ConnProperties.User = settings.DbUser()
- c.ConnProperties.Pass = settings.DbPassword()
- c.ConnProperties.Host = settings.DbHost()
- c.ConnProperties.Db = settings.DbName()
- c.DbOpenStr = fmt.Sprintf("%s:%s@tcp(%s)/%s",
- c.ConnProperties.User, c.ConnProperties.Pass, c.ConnProperties.Host, c.ConnProperties.Db)
- log.LogInfo.Println("Connecting with:")
- log.LogInfo.Println(c.DbOpenStr)
- gormDb, err := gorm.Open(mysql.Open(c.DbOpenStr), &gorm.Config{})
- if err != nil {
- log.LogError.Println("failed to connect database")
- log.LogError.Println(err)
- } else {
- log.LogInfo.Println("Connected to database using gorm")
- }
- c.GormDb = gormDb
- }
- func (c *Connection) LatestWorkerRecord(worker string) (lastWorkerRecord Worker, err error) {
- result := c.GormDb.
- Where("worker = ?", worker).
- Order("time desc").
- Limit(1).
- Find(&lastWorkerRecord)
- return lastWorkerRecord, result.Error
- }
- func (c *Connection) LatestMinerRecord(wallet string) (lastMinerRecord Miner, err error) {
- result := c.GormDb.
- Where("wallet = ?", wallet).
- Order("time desc").
- Limit(1).
- Find(&lastMinerRecord)
- return lastMinerRecord, result.Error
- }
- func (c *Connection) ChatsWithWallet(wallet string) (ChatIds []int64, err error) {
- result := c.GormDb.Model(&User{}).
- Where("wallet = ?", wallet).
- Select("DISTINCT(chat_id)").
- Scan(&ChatIds)
- return ChatIds, result.Error
- }
- func (c *Connection) IsWorkerRowExists(worker string, time int64) (exists bool, err error) {
- var rowsCount int64
- result := c.GormDb.Model(&Worker{}).
- Where("worker = ? and time = ?", worker, time).
- Count(&rowsCount)
- if result.Error != nil {
- return false , result.Error
- }
- if rowsCount != 0 {
- return true, nil
- }
- return false, nil
- }
- // List of unique, not empty wallets in user table
- func (c *Connection) UniqueWallets() (wallets []string, err error) {
- result := c.GormDb.Model(&User{}).
- Not("wallet = ?", "").
- Select("DISTINCT(wallet)").
- Scan(&wallets)
- return wallets, result.Error
- }
|