Skip to content

Commit 8740f20

Browse files
cmyuiclaude
andauthored
Add mode parameter support to user achievements endpoint (#92)
Allows filtering achievements by game mode via query parameter. Usage: - /api/v1/users/achievements?id=1000&mode=0 (std achievements only) - /api/v1/users/achievements?id=1000&mode=1 (taiko achievements only) - /api/v1/users/achievements?id=1000 (all modes - backwards compatible) This fixes the issue where users with mode-specific achievements couldn't see them properly filtered by mode in the API/frontend. Affects 27,948 users (49% of achievement holders). Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent 978c84e commit 8740f20

1 file changed

Lines changed: 14 additions & 1 deletion

File tree

app/v1/user_achievements.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,23 @@ func UserAchievementsGET(md common.MethodData) common.CodeMessager {
5252
if shouldRet != nil {
5353
return *shouldRet
5454
}
55+
56+
modeQuery := md.Query("mode")
5557
var ids []int
56-
err := md.DB.Select(&ids, `SELECT ua.achievement_id FROM users_achievements ua
58+
var err error
59+
60+
if modeQuery != "" {
61+
m := getMode(modeQuery)
62+
modeInt := getModeInt(m)
63+
err = md.DB.Select(&ids, `SELECT ua.achievement_id FROM users_achievements ua
64+
INNER JOIN users ON users.id = ua.user_id
65+
WHERE `+whereClause+` AND ua.mode = ? ORDER BY ua.achievement_id ASC`, param, modeInt)
66+
} else {
67+
err = md.DB.Select(&ids, `SELECT ua.achievement_id FROM users_achievements ua
5768
INNER JOIN users ON users.id = ua.user_id
5869
WHERE `+whereClause+` ORDER BY ua.achievement_id ASC`, param)
70+
}
71+
5972
switch {
6073
case err == sql.ErrNoRows:
6174
return common.SimpleResponse(404, "No such user!")

0 commit comments

Comments
 (0)