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 From 64dfe4ed79022c6a7a00991db7ba679f2dcb3495 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Sat, 17 Jan 2026 17:06:38 +0100 Subject: refactor(member): better distinction between cached and from database --- user/member.go | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'user/member.go') diff --git a/user/member.go b/user/member.go index 690f7c5..9c9ad1f 100644 --- a/user/member.go +++ b/user/member.go @@ -23,7 +23,7 @@ type CopaingXP struct { } type CopaingAccess interface { - ToCopaing() *Copaing + Copaing() *Copaing GetXP() uint } @@ -54,18 +54,15 @@ func (c *Copaing) Load(ctx context.Context) error { return err } -func (c *Copaing) Save(ctx context.Context) error { - state := GetState(ctx) - _, err := state.CopaingAdd(c, 0) - if err != nil { - return err - } +func (c *Copaing) Save() error { return gokord.DB.Save(c).Error } -func (c *Copaing) Delete(ctx context.Context) error { - state := GetState(ctx) - err := state.CopaingRemove(c) +func (c *Copaing) Delete() error { + err := gokord.DB. + Where("copaing_id = ? and guild_id = ?", c.ID, c.GuildID). + Delete(&CopaingXP{}). + Error if err != nil { return err } -- cgit v1.2.3 From c9129c2e7edcf6e588cac674dfdb240f1714083d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Sat, 17 Jan 2026 19:15:12 +0100 Subject: feat(member): save cache in db every 30 minutes --- user/member.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'user/member.go') diff --git a/user/member.go b/user/member.go index 9c9ad1f..4969f8a 100644 --- a/user/member.go +++ b/user/member.go @@ -32,7 +32,7 @@ func GetCopaing(ctx context.Context, discordID string, guildID string) *CopaingC cc, err := state.Copaing(guildID, discordID) if err != nil { c := Copaing{DiscordID: discordID, GuildID: guildID} - if err := c.Load(ctx); err != nil { + if err := c.load(); err != nil { panic(err) } cc = FromCopaing(&c) @@ -40,7 +40,7 @@ func GetCopaing(ctx context.Context, discordID string, guildID string) *CopaingC return cc } -func (c *Copaing) Load(ctx context.Context) error { +func (c *Copaing) load() error { err := gokord.DB. Where("discord_id = ? and guild_id = ?", c.DiscordID, c.GuildID). Preload("CopaingXPs"). @@ -49,8 +49,6 @@ func (c *Copaing) Load(ctx context.Context) error { if err != nil { return err } - state := GetState(ctx) - _, err = state.CopaingAdd(c, 0) return err } -- cgit v1.2.3