fix(db): wrong relation and bad where condition

This commit is contained in:
Anhgelus Morhtuuzh 2025-05-13 16:52:04 +02:00
parent 01bafe9bf1
commit 61c7bf4567
Signed by: anhgelus
GPG key ID: CAD341EFA92DDDE5
6 changed files with 26 additions and 19 deletions

View file

@ -8,16 +8,16 @@ import (
)
type Copaing struct {
ID uint `gorm:"primarykey"`
DiscordID string `gorm:"not null"`
XP []CopaingXP `gorm:"constraint:OnDelete:SET NULL;"`
GuildID string `gorm:"not null"`
ID uint `gorm:"primarykey"`
DiscordID string `gorm:"not null"`
CopaingXPs []CopaingXP `gorm:"constraint:OnDelete:SET NULL;"`
GuildID string `gorm:"not null"`
}
type CopaingXP struct {
ID uint `gorm:"primarykey"`
XP uint `gorm:"default:0"`
CopaingID uint `gorm:"not null;constraint:OnDelete:CASCADE;"`
ID uint `gorm:"primarykey"`
XP uint `gorm:"default:0"`
CopaingID uint
GuildID string `gorm:"not null;"`
CreatedAt time.Time
}
@ -51,7 +51,7 @@ func GetCopaing(discordID string, guildID string) *Copaing {
func (c *Copaing) Load() error {
return gokord.DB.
Where("discord_id = ? and guild_id = ?", c.DiscordID, c.GuildID).
Preload("XP").
Preload("CopaingXPs").
FirstOrCreate(c).
Error
}

View file

@ -28,13 +28,13 @@ func (c *cXP) GetXP() uint {
func (c *Copaing) AddXP(s *discordgo.Session, m *discordgo.Member, xp uint, fn func(uint, uint)) {
old, err := c.GetXP()
pastLevel := exp.Level(old)
c.XP = append(c.XP, CopaingXP{CopaingID: c.ID, XP: xp, GuildID: c.GuildID})
c.CopaingXPs = append(c.CopaingXPs, CopaingXP{CopaingID: c.ID, XP: xp, GuildID: c.GuildID})
if err = c.Save(); err != nil {
utils.SendAlert(
"user/xp.go - Saving user",
err.Error(),
"exp",
c.XP,
"xp",
c.CopaingXPs,
"discord_id",
c.DiscordID,
"guild_id",
@ -56,10 +56,16 @@ func (c *Copaing) GetXP() (uint, error) {
func (c *Copaing) GetXPForDays(n uint) (uint, error) {
xp := uint(0)
y, m, d := time.Unix(time.Now().Unix()-int64(n*24*60*60), 0).Date()
var y, d int
var m time.Month
if gokord.Debug {
y, m, d = time.Unix(time.Now().Unix()-int64(n*24), 0).Date() // reduce time for debug
} else {
y, m, d = time.Unix(time.Now().Unix()-int64(n*24*60*60), 0).Date()
}
rows, err := gokord.DB.
Model(&CopaingXP{}).
Where(fmt.Sprintf("created_at >= '%d-%d-%d' and guild_id = ? and discord_id = ?", y, m, d), c.GuildID, c.DiscordID).
Where(fmt.Sprintf("created_at >= '%d-%d-%d' and guild_id = ? and copaing_id = ?", y, m, d), c.GuildID, c.DiscordID).
Rows()
defer rows.Close()
if err != nil {
@ -69,7 +75,7 @@ func (c *Copaing) GetXPForDays(n uint) (uint, error) {
var cXP CopaingXP
err = gokord.DB.ScanRows(rows, &cXP)
if err != nil {
utils.SendAlert("user/xp.go - Scanning rows", err.Error(), "discord_id", c.DiscordID, "guild_id", c.GuildID)
utils.SendAlert("user/xp.go - Scanning rows", err.Error(), "copaing_id", c.DiscordID, "guild_id", c.GuildID)
continue
}
xp += cXP.XP
@ -96,7 +102,7 @@ func GetBestXP(guildId string, n uint, d int) ([]CopaingAccess, error) {
var c Copaing
err = gokord.DB.ScanRows(rows, &c)
if err != nil {
utils.SendAlert("user/xp.go - Scanning rows", err.Error(), "discord_id", c.DiscordID, "guild_id", guildId)
utils.SendAlert("user/xp.go - Scanning rows", err.Error(), "guild_id", guildId)
continue
}
wg.Add(1)