|
| 1 | +import config from 'src/config' |
| 2 | +import getPlayerInfo from 'src/server/actions/getPlayerInfo' |
| 3 | +import {findPlayersByIds} from 'src/server/db/player' |
| 4 | + |
| 5 | +export default async function sendRetroCompletedNotification(project) { |
| 6 | + const chatService = require('src/server/services/chatService') |
| 7 | + |
| 8 | + const projectPlayers = await findPlayersByIds(project.playerIds) |
| 9 | + const projectPlayerUsers = await getPlayerInfo(project.playerIds) |
| 10 | + const players = _mergePlayerUsers(projectPlayers, projectPlayerUsers) |
| 11 | + |
| 12 | + return Promise.all(players.map(player => { |
| 13 | + const retroStatsMessage = _compilePlayerStatsMessage(player, project) |
| 14 | + |
| 15 | + return chatService.sendDirectMessage(player.handle, retroStatsMessage).catch(err => { |
| 16 | + console.error(`\n\nThere was a problem while sending stats DM to player @${player.handle}`) |
| 17 | + console.error('Error:', err, err.stack) |
| 18 | + console.error(`Message: "${retroStatsMessage}"`) |
| 19 | + }) |
| 20 | + })) |
| 21 | +} |
| 22 | + |
| 23 | +function _mergePlayerUsers(players, users) { |
| 24 | + const combined = new Map() |
| 25 | + |
| 26 | + players.forEach(player => combined.set(player.id, Object.assign({}, player))) |
| 27 | + |
| 28 | + users.forEach(user => { |
| 29 | + const values = combined.get(user.id) |
| 30 | + if (values) { |
| 31 | + combined.set(user.id, Object.assign({}, values, user)) |
| 32 | + } |
| 33 | + }) |
| 34 | + |
| 35 | + return Array.from(combined.values()) |
| 36 | +} |
| 37 | + |
| 38 | +function _compilePlayerStatsMessage(player, project) { |
| 39 | + return `**RETROSPECTIVE COMPLETE:** |
| 40 | +
|
| 41 | + - [View Project: ${project.name}](${config.app.baseURL}/projects/${project.name}) |
| 42 | + - [View Your Stats](${config.app.baseURL}/users/${player.handle})` |
| 43 | +} |
0 commit comments