fix(player): pick most-recent squadron_members row when uid has duplicates

A player who changed squadrons could end up with two rows in
squadron_members (old + new clan). Without ORDER BY, LIMIT 1
returned whichever row the primary-key B-tree (clan_id, uid) put
first — i.e. the lowest clan_id, which was the stale entry. This
caused the player page to show the old squadron while the homepage
search (which only reads player_games_hist) showed the correct one.

Fix: add ORDER BY updated_at DESC to both the API roster lookup in
server.js and the web fallback lookup in web/server.js, so the most
recently synced membership always wins.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
deploy
2026-06-19 10:48:44 +00:00
parent 25990c361f
commit ac7c318899
2 changed files with 2 additions and 1 deletions
+1 -1
View File
@@ -1983,7 +1983,7 @@ app.get('/api/player/:uid', (req, res) => {
const sdb = new sqlite3.Database(squadronsDbPath, sqlite3.OPEN_READONLY, (err) => { const sdb = new sqlite3.Database(squadronsDbPath, sqlite3.OPEN_READONLY, (err) => {
if (err) return resolve(null); if (err) return resolve(null);
sdb.get( sdb.get(
'SELECT clan_id FROM squadron_members WHERE uid = ? LIMIT 1', 'SELECT clan_id FROM squadron_members WHERE uid = ? ORDER BY updated_at DESC LIMIT 1',
[uid], [uid],
(qerr, row) => { (qerr, row) => {
sdb.close(); sdb.close();
+1
View File
@@ -74,6 +74,7 @@ function getRosterMemberByUid(uid) {
FROM squadron_members sm FROM squadron_members sm
LEFT JOIN squadrons_data sd ON sm.clan_id = sd.clan_id LEFT JOIN squadrons_data sd ON sm.clan_id = sd.clan_id
WHERE sm.uid = ? WHERE sm.uid = ?
ORDER BY sm.updated_at DESC
LIMIT 1 LIMIT 1
`, `,
[uid], [uid],