const { Injectable } = require('flitter-di') /** * GenerateWeeklyResultsPatch * ---------------------------------------------------------------------------- * A patch which generates the weekly team results using the player stat data * for teh currently configured play week. * * @extends Injectable */ class GenerateWeeklyResultsPatch extends Injectable { static get services() { return [...super.services, 'models', 'sports_data', 'output'] } /** * Runs the patch * @returns {Promise} */ async run() { const Matchup = this.models.get('Matchup') const current_week = await this.sports_data.current_play_week() const week_matchups = await Matchup.find({ week_num: current_week }) this.output.info(`Processing ${week_matchups.length} matchups...`) for ( const matchup of week_matchups ) { const visitor_team = await matchup.visitor_team() const home_team = await matchup.home_team() const visitor_lineup = await visitor_team.lineup() const home_lineup = await home_team.lineup() matchup.visitor_team_score = await visitor_lineup.calculate_fantasy_points() matchup.home_team_score = await home_lineup.calculate_fantasy_points() matchup.complete = true this.output.success(`Scored matchup ${matchup.id}`) this.output.info(` Team ${home_team.id}: ${matchup.home_team_score}`) this.output.info(` Team ${visitor_team.id}: ${matchup.visitor_team_score}`) await matchup.save() } this.output.info('Finished scoring match-ups.') } } module.exports = exports = GenerateWeeklyResultsPatch