From f2e1729701a629798a9800f96c247110b3a150dd Mon Sep 17 00:00:00 2001 From: Matty Widdop <18513864+MattyTheHacker@users.noreply.github.com> Date: Sun, 12 Apr 2026 00:20:28 +0000 Subject: [PATCH 1/5] Add config option --- internal/config/config.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/config/config.go b/internal/config/config.go index a07da96..c691932 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -2,10 +2,11 @@ package config import ( "fmt" - "git.tdpain.net/pkg/cfger" "log/slog" "os" "sync" + + "git.tdpain.net/pkg/cfger" ) type HTTP struct { @@ -31,6 +32,7 @@ type Platform struct { AdminToken string SessionSigningToken string DiscordWebhook *DiscordWebhook + Caching bool } type DiscordWebhook struct { @@ -81,6 +83,7 @@ func Get() *Config { URL: cl.Get("platform.discordWebhook.url").AsString(), ThreadID: cl.Get("platform.discordWebhook.threadID").AsString(), }, + Caching: cl.WithDefault("platform.caching", false).AsBool(), }, } From 6a1f9f60101d438c0a39762e5e3696fcfcefdf8a Mon Sep 17 00:00:00 2001 From: Matty Widdop <18513864+MattyTheHacker@users.noreply.github.com> Date: Sun, 12 Apr 2026 00:34:50 +0000 Subject: [PATCH 2/5] Add check before doing caching --- internal/guildScraper/checkMember.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/internal/guildScraper/checkMember.go b/internal/guildScraper/checkMember.go index c661e15..5d984f6 100644 --- a/internal/guildScraper/checkMember.go +++ b/internal/guildScraper/checkMember.go @@ -7,6 +7,8 @@ import ( "log/slog" "sync" "time" + + "github.com/CSSUoB/society-voting/internal/config" ) var ( @@ -16,6 +18,22 @@ var ( ) func GetMember(studentID string) (*GuildMember, error) { + conf := config.Get().Platform + + if !conf.Caching { + members, err := GetMembersList() + + if err == nil { + cachedMembershipList = members + cachedMembershipListLastRefreshed = time.Now() + } else if cachedMembershipListLastRefreshed.IsZero() { + cachedMembershipListLock.Unlock() + return nil, fmt.Errorf("initially load membership list: %w", err) + } else { + slog.Warn("failed to pull membership list", "error", err) + } + } + cachedMembershipListLock.RLock() if time.Now().Sub(cachedMembershipListLastRefreshed) > time.Minute*5 { From 41f89c47a13f5033d6e877b207cf0869f0ea3f0e Mon Sep 17 00:00:00 2001 From: Matty Widdop <18513864+MattyTheHacker@users.noreply.github.com> Date: Sun, 12 Apr 2026 00:36:38 +0000 Subject: [PATCH 3/5] Enable caching by default --- internal/config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/config/config.go b/internal/config/config.go index c691932..d6a602c 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -83,7 +83,7 @@ func Get() *Config { URL: cl.Get("platform.discordWebhook.url").AsString(), ThreadID: cl.Get("platform.discordWebhook.threadID").AsString(), }, - Caching: cl.WithDefault("platform.caching", false).AsBool(), + Caching: cl.WithDefault("platform.caching", true).AsBool(), }, } From ef71804a465fbf460bb6b7c75bf7f369d9fdc56b Mon Sep 17 00:00:00 2001 From: Matty Widdop <18513864+MattyTheHacker@users.noreply.github.com> Date: Sun, 12 Apr 2026 00:44:21 +0000 Subject: [PATCH 4/5] Add checking and proper handling --- internal/guildScraper/checkMember.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/internal/guildScraper/checkMember.go b/internal/guildScraper/checkMember.go index 5d984f6..41cf795 100644 --- a/internal/guildScraper/checkMember.go +++ b/internal/guildScraper/checkMember.go @@ -23,15 +23,18 @@ func GetMember(studentID string) (*GuildMember, error) { if !conf.Caching { members, err := GetMembersList() - if err == nil { - cachedMembershipList = members - cachedMembershipListLastRefreshed = time.Now() - } else if cachedMembershipListLastRefreshed.IsZero() { - cachedMembershipListLock.Unlock() - return nil, fmt.Errorf("initially load membership list: %w", err) - } else { + if err != nil { slog.Warn("failed to pull membership list", "error", err) } + + var target *GuildMember + + for _, x := range members { + if x.ID == studentID { + return x, nil + } + } + return target, nil } cachedMembershipListLock.RLock() From 21b0256b0022e0962b8fde96ea66302b6e4dce53 Mon Sep 17 00:00:00 2001 From: Matty Widdop <18513864+MattyTheHacker@users.noreply.github.com> Date: Sun, 12 Apr 2026 00:51:56 +0000 Subject: [PATCH 5/5] Minor fixes --- internal/guildScraper/checkMember.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/internal/guildScraper/checkMember.go b/internal/guildScraper/checkMember.go index 41cf795..5929794 100644 --- a/internal/guildScraper/checkMember.go +++ b/internal/guildScraper/checkMember.go @@ -25,16 +25,15 @@ func GetMember(studentID string) (*GuildMember, error) { if err != nil { slog.Warn("failed to pull membership list", "error", err) + return nil, fmt.Errorf("pull membership list: %w", err) } - var target *GuildMember - for _, x := range members { if x.ID == studentID { return x, nil } } - return target, nil + return nil, nil } cachedMembershipListLock.RLock()