Files
ScommettiApp/backend-node/services/data-stitching.service.js
T
2026-03-26 22:46:03 +01:00

42 lines
1.1 KiB
JavaScript

class DataStitchingService {
constructor({ usersRepository }) {
this.usersRepository = usersRepository;
}
async populateBetsWithUsers(bets) {
if (!bets || bets.length === 0) return [];
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) => (typeof b.toJSON === 'function' ? b.toJSON() : b));
const users = await this.usersRepository.findAll({
where: { id: Array.from(userIds) },
});
const userMap = new Map(
users.map((u) => [u.id, typeof u.toJSON === 'function' ? u.toJSON() : u])
);
return bets.map((bet) => {
const betJson = typeof bet.toJSON === 'function' ? bet.toJSON() : bet;
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;
});
}
}
module.exports = DataStitchingService;