From ff4a8f00cddf8cd8ec969c411575e0047764fa48 Mon Sep 17 00:00:00 2001 From: Swan Date: Sat, 3 Aug 2024 17:19:04 -0400 Subject: [PATCH] Remove clan scores when user leaves/kicked --- db/scores.go | 7 +++++++ handlers/clan_members.go | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/db/scores.go b/db/scores.go index 4da3dc4..ea77798 100644 --- a/db/scores.go +++ b/db/scores.go @@ -563,6 +563,13 @@ func GetClanPlayerScoresOnMap(md5 string, clanId int) ([]*Score, error) { return scores, nil } +// RemoveUserClanScores Removes all user scores from a clan +func RemoveUserClanScores(clanId int, userId int) error { + return SQL.Model(&Score{}). + Where("user_id = ? AND clan_id = ?", userId, clanId). + Update("clan_id", nil).Error +} + // CalculateOverallRating Calculates overall rating from a list of scores func CalculateOverallRating(scores []*Score) float64 { if len(scores) == 0 { diff --git a/handlers/clan_members.go b/handlers/clan_members.go index 89571d8..c4574f6 100644 --- a/handlers/clan_members.go +++ b/handlers/clan_members.go @@ -89,6 +89,10 @@ func LeaveClan(c *gin.Context) *APIError { return APIErrorServerError("Error inserting clan activity", err) } + if err := db.RemoveUserClanScores(clan.Id, user.Id); err != nil { + return APIErrorServerError("Error removing user clan scores", err) + } + if err := db.PerformFullClanRecalculation(clan.Id); err != nil { return APIErrorServerError("Error performing full clan recalc", err) } @@ -140,6 +144,10 @@ func KickClanMember(c *gin.Context) *APIError { return APIErrorServerError("Error inserting clan kicked notification", err) } + if err := db.RemoveUserClanScores(target.Clan.Id, target.TargetUser.Id); err != nil { + return APIErrorServerError("Error removing user clan scores", err) + } + if err := db.PerformFullClanRecalculation(target.Clan.Id); err != nil { return APIErrorServerError("Error performing full clan recalc", err) }