Files
ScommettiApp/backend-node/utils/populateBets.js
T
2026-03-26 22:46:03 +01:00

44 lines
1.6 KiB
JavaScript

// Questo helper necessita del modello User da Sequelize
module.exports = (sequelize) => {
const { User } = sequelize.models;
/**
* Funzione helper per arricchire i documenti delle scommesse da MongoDB con i dati utente da PostgreSQL.
* @param {Array} bets - Un array di documenti di scommesse Mongoose.
* @returns {Array} Un array di oggetti scommessa con i dettagli utente popolati.
*/
const populateBetsWithUsers = async (bets) => {
if (!bets || bets.length === 0) return [];
// Raccoglie tutti gli ID utente unici da tutte le scommesse
const userIds = new Set();
bets.forEach(bet => {
bet.participants.forEach(p => userIds.add(p.user));
if (bet.winner) {
userIds.add(bet.winner);
}
});
if (userIds.size === 0) return bets.map(b => b.toJSON());
// Recupera tutti gli utenti necessari da PostgreSQL con una singola query
const users = await User.findAll({ where: { id: Array.from(userIds) } });
const userMap = new Map(users.map(u => [u.id, u.toJSON()]));
// Unisce i dati utente negli oggetti scommessa
return bets.map(bet => {
const betJson = bet.toJSON();
betJson.participants = betJson.participants.map(p => ({
...p,
user: userMap.get(p.user) || null
}));
if (betJson.winner) {
betJson.winner = userMap.get(betJson.winner) || null;
}
return betJson;
});
};
return { populateBetsWithUsers };
};