12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- package main
- import (
- "fmt"
- "gorm.io/gorm"
- "gorm.io/driver/mysql"
- )
- 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 = appSettings.DbUser
- c.ConnProperties.Pass = appSettings.DbPassword
- c.ConnProperties.Host = appSettings.DbHost
- c.ConnProperties.Db = appSettings.DbName
- c.DbOpenStr = fmt.Sprintf("%s:%s@tcp(%s)/%s", c.ConnProperties.User, c.ConnProperties.Pass, c.ConnProperties.Host, c.ConnProperties.Db)
- LogInfo.Println("Connecting with:")
- LogInfo.Println(c.DbOpenStr)
- gormDb, err := gorm.Open(mysql.Open(c.DbOpenStr), &gorm.Config{})
- if err != nil {
- LogError.Println("failed to connect database")
- LogError.Println(err)
- } else {
- 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("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
- }
|