fix: speedrun scores, dashboard icons, N+1 queries, typeof guards
This commit is contained in:
@@ -418,9 +418,15 @@ app.get('/api/dashboard', requireAuth, (req, res) => {
|
||||
const userRow = db.prepare('SELECT elo FROM users WHERE username = ?').get(u);
|
||||
const elo = userRow?.elo ?? 1000;
|
||||
|
||||
const onlineWithElo = [...userSockets.keys()].map(name => {
|
||||
const row = db.prepare('SELECT elo FROM users WHERE username = ?').get(name);
|
||||
return { name, elo: row?.elo ?? 1000, rank: eloRank(row?.elo ?? 1000) };
|
||||
const onlineNames = [...userSockets.keys()];
|
||||
const eloRows = onlineNames.length > 0
|
||||
? db.prepare(`SELECT username, elo FROM users WHERE username IN (${onlineNames.map(() => '?').join(',')})`)
|
||||
.all(...onlineNames)
|
||||
: [];
|
||||
const eloByUser = Object.fromEntries(eloRows.map(r => [r.username, r.elo]));
|
||||
const onlineWithElo = onlineNames.map(name => {
|
||||
const elo = eloByUser[name] ?? 1000;
|
||||
return { name, elo, rank: eloRank(elo) };
|
||||
});
|
||||
|
||||
res.json({
|
||||
@@ -562,9 +568,17 @@ async function main() {
|
||||
}
|
||||
|
||||
function broadcastLobbyUpdate() {
|
||||
const online = [...userSockets.keys()].map(name => {
|
||||
const row = db.prepare('SELECT elo FROM users WHERE username = ?').get(name);
|
||||
return { name, elo: row?.elo ?? 1000, rank: eloRank(row?.elo ?? 1000) };
|
||||
const onlineNames = [...userSockets.keys()];
|
||||
const eloMap = onlineNames.length > 0
|
||||
? Object.fromEntries(
|
||||
db.prepare(`SELECT username, elo FROM users WHERE username IN (${onlineNames.map(() => '?').join(',')})`)
|
||||
.all(...onlineNames)
|
||||
.map(r => [r.username, r.elo])
|
||||
)
|
||||
: {};
|
||||
const online = onlineNames.map(name => {
|
||||
const elo = eloMap[name] ?? 1000;
|
||||
return { name, elo, rank: eloRank(elo) };
|
||||
});
|
||||
wss.clients.forEach(ws => {
|
||||
if (ws.readyState !== WebSocket.OPEN || !ws.userId) return;
|
||||
|
||||
Reference in New Issue
Block a user