diff --git a/apps/api/src/guild/leaderboards/guild-leaderboard.service.ts b/apps/api/src/guild/leaderboards/guild-leaderboard.service.ts index 430f00294..827c3b675 100644 --- a/apps/api/src/guild/leaderboards/guild-leaderboard.service.ts +++ b/apps/api/src/guild/leaderboards/guild-leaderboard.service.ts @@ -55,23 +55,22 @@ export class GuildLeaderboardService extends LeaderboardService { return acc; }, {} as Record); + selector.id = true; selector.nameFormatted = true; - return await Promise.all( - ids.map(async (id) => { - const guild = await this.guildModel - .findOne() - .where("id") - .equals(id) - .select(selector) - .lean() - .exec(); + const guilds = await this.guildModel + .find({ id: { $in: ids } }) + .select(selector) + .lean() + .exec(); - const additionalStats = flatten(guild) as LeaderboardAdditionalStats; - additionalStats.name = additionalStats.nameFormatted; + const guildsById = new Map(guilds.map((guild) => [guild.id, guild])); - return additionalStats; - }) - ); + return ids.map((id) => { + const additionalStats = flatten(guildsById.get(id)) as LeaderboardAdditionalStats; + additionalStats.name = additionalStats.nameFormatted; + + return additionalStats; + }); } } diff --git a/apps/api/src/player/leaderboards/player-leaderboard.service.ts b/apps/api/src/player/leaderboards/player-leaderboard.service.ts index 5877de527..476a6be32 100644 --- a/apps/api/src/player/leaderboards/player-leaderboard.service.ts +++ b/apps/api/src/player/leaderboards/player-leaderboard.service.ts @@ -55,22 +55,21 @@ export class PlayerLeaderboardService extends LeaderboardService { }, {} as Record); selector.displayName = true; + selector.uuid = true; - return await Promise.all( - ids.map(async (id) => { - const player = await this.playerModel - .findOne() - .where("uuid") - .equals(id) - .select(selector) - .lean() - .exec(); + const players = await this.playerModel + .find({ uuid: { $in: ids } }) + .select(selector) + .lean() + .exec(); - const additionalStats = flatten(player) as LeaderboardAdditionalStats; - additionalStats.name = additionalStats.displayName; + const playersById = new Map(players.map((player) => [player.uuid, player])); - return additionalStats; - }) - ); + return ids.map((id) => { + const additionalStats = flatten(playersById.get(id)) as LeaderboardAdditionalStats; + additionalStats.name = additionalStats.displayName; + + return additionalStats; + }); } }