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:
@@ -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();
|
||||||
|
|||||||
@@ -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],
|
||||||
|
|||||||
Reference in New Issue
Block a user