44 lines
1.6 KiB
JavaScript
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 };
|
|
};
|