aboutsummaryrefslogtreecommitdiff
path: root/user
diff options
context:
space:
mode:
Diffstat (limited to 'user')
-rw-r--r--user/member.go80
-rw-r--r--user/xp.go33
2 files changed, 21 insertions, 92 deletions
diff --git a/user/member.go b/user/member.go
index 91327ad..dc93979 100644
--- a/user/member.go
+++ b/user/member.go
@@ -4,32 +4,21 @@ import (
"fmt"
"github.com/anhgelus/gokord"
"github.com/anhgelus/gokord/utils"
- "gorm.io/gorm"
)
type Copaing struct {
- gorm.Model
- DiscordID string `gorm:"not null"`
- //XP []CopaingXP
- XP uint `gorm:"default:0"`
- GuildID string `gorm:"not null"`
+ ID uint `gorm:"primarykey"`
+ DiscordID string `gorm:"not null"`
+ XP []CopaingXP `gorm:"constraint:OnDelete:SET NULL;"`
+ GuildID string `gorm:"not null"`
}
-type leftCopaing struct {
- ID uint
- StopDelete chan<- interface{}
+type CopaingXP struct {
+ ID uint `gorm:"primarykey"`
+ XP uint `gorm:"default:0"`
+ CopaingID uint `gorm:"not null;constraint:OnDelete:CASCADE;"`
}
-//type CopaingXP struct {
-// gorm.Model
-// XP uint `gorm:"default:0"`
-// CopaingID uint
-//}
-
-var (
- leftCopaingsMap = map[string]*leftCopaing{}
-)
-
const (
LastEvent = "last_event"
AlreadyRemoved = "already_removed"
@@ -52,50 +41,11 @@ func GetCopaing(discordID string, guildID string) *Copaing {
}
func (c *Copaing) Load() error {
- // check if user left in the past 48 hours
- k := c.GuildID + ":" + c.DiscordID
- l, ok := leftCopaingsMap[k]
- if !ok || l == nil {
- // if not, common first or create
- return gokord.DB.Where("discord_id = ? and guild_id = ?", c.DiscordID, c.GuildID).FirstOrCreate(c).Error
- }
- // else, getting last data
- tmp := Copaing{
- Model: gorm.Model{
- ID: c.ID,
- },
- DiscordID: c.DiscordID,
- GuildID: c.GuildID,
- }
- if err := gokord.DB.Unscoped().Find(&tmp).Error; err != nil {
- // if error, avoid getting old data and use new one
- utils.SendAlert(
- "user/member.go - Getting user in soft delete", err.Error(),
- "discord_id", c.DiscordID,
- "guild_id", c.DiscordID,
- "last_id", l.ID,
- )
- return gokord.DB.Where("discord_id = ? and guild_id = ?", c.DiscordID, c.GuildID).FirstOrCreate(c).Error
- }
- // resetting internal data
- tmp.Model = gorm.Model{}
- l.StopDelete <- true
- leftCopaingsMap[k] = nil
- // creating new data
- err := gokord.DB.Create(&tmp).Error
- if err != nil {
- return err
- }
- // delete old data
- if err = gokord.DB.Unscoped().Delete(&tmp).Error; err != nil {
- utils.SendAlert(
- "user/member.go - Deleting user in soft delete", err.Error(),
- "discord_id", c.DiscordID,
- "guild_id", c.DiscordID,
- "last_id", l.ID,
- )
- }
- return nil
+ return gokord.DB.
+ Where("discord_id = ? and guild_id = ?", c.DiscordID, c.GuildID).
+ Preload("XP").
+ FirstOrCreate(c).
+ Error
}
func (c *Copaing) Save() error {
@@ -105,3 +55,7 @@ func (c *Copaing) Save() error {
func (c *Copaing) GenKey(key string) string {
return fmt.Sprintf("%s:%s:%s", c.GuildID, c.DiscordID, key)
}
+
+func (c *Copaing) Delete() error {
+ return gokord.DB.Where("guild_id = ? AND discord_id = ?", c.GuildID, c.DiscordID).Delete(c).Error
+}
diff --git a/user/xp.go b/user/xp.go
index 4b93f26..90be09d 100644
--- a/user/xp.go
+++ b/user/xp.go
@@ -10,7 +10,6 @@ import (
"github.com/anhgelus/les-copaings-bot/exp"
"github.com/bwmarrin/discordgo"
"github.com/redis/go-redis/v9"
- "gorm.io/gorm"
"math"
"strconv"
"time"
@@ -105,20 +104,20 @@ func (c *Copaing) AddXPAlreadyRemoved(xp uint) uint {
utils.SendAlert("user/xp.go - Getting redis client (set)", err.Error())
return 0
}
- exp := xp + c.XPAlreadyRemoved()
- err = client.Set(context.Background(), c.GenKey(AlreadyRemoved), exp, 0).Err()
+ nxp := xp + c.XPAlreadyRemoved()
+ err = client.Set(context.Background(), c.GenKey(AlreadyRemoved), nxp, 0).Err()
if err != nil {
utils.SendAlert(
"user/xp.go - Setting already removed",
err.Error(),
"exp already removed",
- exp,
+ nxp,
"base_key",
c.GenKey(""),
)
return 0
}
- return exp
+ return nxp
}
func (c *Copaing) XPAlreadyRemoved() uint {
@@ -159,27 +158,3 @@ func (c *Copaing) XPAlreadyRemoved() uint {
}
return uint(xp)
}
-
-func (c *Copaing) Reset() {
- gokord.DB.Where("guild_id = ? AND discord_id = ?", c.GuildID, c.DiscordID).Delete(c)
-}
-
-func (c *Copaing) AfterDelete(db *gorm.DB) error {
- id := c.ID
- dID := c.DiscordID
- gID := c.GuildID
- k := c.GuildID + ":" + c.DiscordID
- ch := utils.NewTimer(48*time.Hour, func(stop chan<- interface{}) {
- if err := db.Unscoped().Where("id = ?", id).Delete(c).Error; err != nil {
- utils.SendAlert(
- "user/xp.go - Removing user from database", err.Error(),
- "discord_id", dID,
- "guild_id", gID,
- )
- }
- stop <- true
- leftCopaingsMap[k] = nil
- })
- leftCopaingsMap[k] = &leftCopaing{id, ch}
- return nil
-}