diff options
| author | William Hergès <william@herges.fr> | 2026-01-17 16:31:25 +0100 |
|---|---|---|
| committer | William Hergès <william@herges.fr> | 2026-01-17 16:31:25 +0100 |
| commit | febb77607e81fbb182dd456733ea5adafda44ed4 (patch) | |
| tree | 3ff850a34d716df8315d3b9839768e6a4ff60a4c /user/member.go | |
| parent | 55befa3a53ab56bac31026b1b6099b2d31fd6d91 (diff) | |
perf(member): use stat for load
Diffstat (limited to 'user/member.go')
| -rw-r--r-- | user/member.go | 40 |
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 } |
