From febb77607e81fbb182dd456733ea5adafda44ed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Sat, 17 Jan 2026 16:31:25 +0100 Subject: perf(member): use stat for load --- user/member.go | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) (limited to 'user/member.go') 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 } -- cgit v1.2.3