log middleware

This commit is contained in:
2025-09-29 09:14:39 +03:00
parent 49ffe9ae03
commit e15d56196d
27 changed files with 641 additions and 164 deletions

100
database/psql/users.go Normal file
View File

@@ -0,0 +1,100 @@
package psql
import (
"database/sql"
"errors"
"kurumibot/database"
"log"
"math"
"time"
"github.com/shopspring/decimal"
"gorm.io/gorm"
)
type User struct {
ID int
TelegramID int `gorm:"column:tg_id"`
Balance decimal.Decimal
Name string
GroupID int `gorm:"default:1"`
Group *Group
Level int `gorm:"default:1"`
Exp int `gorm:"default:0"`
WorkID int `gorm:"default:1"`
Work *Work
WorkTime time.Time
AutoID sql.NullInt64
Auto *ShopAuto
BusinessID sql.NullInt64
Business *ShopBusiness
MaidID sql.NullInt64
Maid *ShopMaid
MinerID sql.NullInt64
Miner *ShopMiner
IncomeTime time.Time
BTC decimal.Decimal
Invested decimal.Decimal
PairID sql.NullInt64
Pair *User
Greeting string `gorm:"size:255,default:Привет"`
Donat int `gorm:"default:0"`
FractionID sql.NullInt64
Fraction *Fraction
MoneyIncome decimal.Decimal
ExpIncome int
BtcIncome decimal.Decimal
WaifuSearchTime time.Time
}
func GetOrCreateUser(tgId int, name string) (*User, error) {
user, err := GetUser(tgId)
log.Println(errors.Is(err, gorm.ErrRecordNotFound))
if errors.Is(err, gorm.ErrRecordNotFound) {
_, err = CreateUser(tgId, name)
if err != nil {
return nil, err
}
return GetUser(tgId)
}
return user, err
}
func CreateUser(tgId int, name string) (*User, error) {
user := &User{
TelegramID: tgId,
Name: name,
}
tx := database.PostgresDatabase.Create(user)
return user, tx.Error
}
func GetUser(telegramId int) (*User, error) {
user := new(User)
tx := database.PostgresDatabase.Joins("Group").Joins("Work").Joins("Auto").Joins("Business").Joins("Maid").Joins("Miner").Joins("Fraction").Preload("Pair").Take(user, "tg_id=?", telegramId)
return user, tx.Error
}
func GetAllUsers() ([]*User, error) {
users := make([]*User, 0)
tx := database.PostgresDatabase.Joins("Group").Joins("Work").Joins("Auto").Joins("Business").Joins("Maid").Joins("Miner").Joins("Fraction").Preload("Pair").Find(&users)
return users, tx.Error
}
func CountLevel(userXp int) (int, int) {
xp := 0
nextLevel := 2
for {
xp = int(math.Pow(float64(nextLevel), 3)) * (nextLevel * 3)
if xp > userXp {
break
}
if nextLevel == 200 {
break
}
nextLevel++
}
return nextLevel - 1, xp
}