aboutsummaryrefslogtreecommitdiff
path: root/user/member.go
diff options
context:
space:
mode:
authorWilliam Hergès <william@herges.fr>2026-01-17 16:31:25 +0100
committerWilliam Hergès <william@herges.fr>2026-01-17 16:31:25 +0100
commitfebb77607e81fbb182dd456733ea5adafda44ed4 (patch)
tree3ff850a34d716df8315d3b9839768e6a4ff60a4c /user/member.go
parent55befa3a53ab56bac31026b1b6099b2d31fd6d91 (diff)
perf(member): use stat for load
Diffstat (limited to 'user/member.go')
-rw-r--r--user/member.go40
1 files changed, 31 insertions, 9 deletions
diff --git a/user/member.go b/user/member.go
index 9068a6f..690f7c5 100644
--- a/user/member.go
+++ b/user/member.go
@@ -1,6 +1,7 @@
package user
import (
+ "context"
"time"
"github.com/anhgelus/gokord"
@@ -26,26 +27,47 @@ type CopaingAccess interface {
GetXP() uint
}
-func GetCopaing(discordID string, guildID string) *Copaing {
- c := Copaing{DiscordID: discordID, GuildID: guildID}
- if err := c.Load(); err != nil {
- panic(err)
+func GetCopaing(ctx context.Context, discordID string, guildID string) *CopaingCached {
+ state := GetState(ctx)
+ cc, err := state.Copaing(guildID, discordID)
+ if err != nil {
+ c := Copaing{DiscordID: discordID, GuildID: guildID}
+ if err := c.Load(ctx); err != nil {
+ panic(err)
+ }
+ cc = FromCopaing(&c)
}
- return &c
+ return cc
}
-func (c *Copaing) Load() error {
- return gokord.DB.
+func (c *Copaing) Load(ctx context.Context) error {
+ err := gokord.DB.
Where("discord_id = ? and guild_id = ?", c.DiscordID, c.GuildID).
Preload("CopaingXPs").
FirstOrCreate(c).
Error
+ if err != nil {
+ return err
+ }
+ state := GetState(ctx)
+ _, err = state.CopaingAdd(c, 0)
+ return err
}
-func (c *Copaing) Save() error {
+func (c *Copaing) Save(ctx context.Context) error {
+ state := GetState(ctx)
+ _, err := state.CopaingAdd(c, 0)
+ if err != nil {
+ return err
+ }
return gokord.DB.Save(c).Error
}
-func (c *Copaing) Delete() error {
+func (c *Copaing) Delete(ctx context.Context) error {
+ state := GetState(ctx)
+ err := state.CopaingRemove(c)
+ if err != nil {
+ return err
+ }
return gokord.DB.Where("guild_id = ? AND discord_id = ?", c.GuildID, c.DiscordID).Delete(c).Error
}