Add logic to calculate league standings and hook up to league standings page
This commit is contained in:
parent
12ff8c680f
commit
2241779f5d
@ -30,6 +30,47 @@ class ScoresController extends Controller {
|
|||||||
|
|
||||||
return res.api(weekly_data)
|
return res.api(weekly_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the league standings with calculated stats
|
||||||
|
* @param req
|
||||||
|
* @param res
|
||||||
|
* @param next
|
||||||
|
* @return {Promise<Array<object>>}
|
||||||
|
*/
|
||||||
|
async get_league_standings(req, res, next) {
|
||||||
|
const Team = this.models.get('Team')
|
||||||
|
const all_teams = await Team.find()
|
||||||
|
const stat_records = []
|
||||||
|
|
||||||
|
for ( const team of all_teams ) {
|
||||||
|
const rec = await team.cumulative_data()
|
||||||
|
rec.team_name = team.team_name
|
||||||
|
stat_records.push(rec)
|
||||||
|
}
|
||||||
|
|
||||||
|
stat_records.sort((a, b) => {
|
||||||
|
if ( a.wins === b.wins ) {
|
||||||
|
return a.points_scored - b.points_scored
|
||||||
|
}
|
||||||
|
|
||||||
|
return a.wins > b.wins ? 1 : -1
|
||||||
|
})
|
||||||
|
|
||||||
|
return res.api(stat_records.map((x, i) => {
|
||||||
|
return {
|
||||||
|
standing: {
|
||||||
|
rank: i + 1,
|
||||||
|
win_loss: `${x.wins}/${x.losses}`,
|
||||||
|
},
|
||||||
|
team_name: x.team_name,
|
||||||
|
stats: [
|
||||||
|
{ name: 'Total Points Scored', value: x.points_scored },
|
||||||
|
{ name: 'Total Points Allowed', value: x.points_allowed },
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = exports = ScoresController
|
module.exports = exports = ScoresController
|
||||||
|
@ -59,7 +59,7 @@ class Team extends Model {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Returns the players associated with the team.
|
||||||
*/
|
*/
|
||||||
async players() {
|
async players() {
|
||||||
const Player = this.models.get('Player')
|
const Player = this.models.get('Player')
|
||||||
@ -70,6 +70,51 @@ class Team extends Model {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the cumulative data for the team (total wins, losses, points scored & allowed)
|
||||||
|
* @return object
|
||||||
|
*/
|
||||||
|
async cumulative_data() {
|
||||||
|
const Matchup = this.models.get('Matchup')
|
||||||
|
const home_matchups = await Matchup.find({ home_team_id: this.id })
|
||||||
|
const visitor_matchups = await Matchup.find({ visitor_team_id: this.id })
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
wins: 0,
|
||||||
|
losses: 0,
|
||||||
|
points_scored: 0,
|
||||||
|
points_allowed: 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( const matchup of home_matchups ) {
|
||||||
|
if ( !matchup.complete ) continue
|
||||||
|
|
||||||
|
data.points_scored += matchup.home_team_score
|
||||||
|
data.points_allowed += matchup.visitor_team_score
|
||||||
|
|
||||||
|
if ( matchup.home_team_score > matchup.visitor_team_score ) {
|
||||||
|
data.wins += 1
|
||||||
|
} else {
|
||||||
|
data.losses += 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( const matchup of visitor_matchups ) {
|
||||||
|
if ( !matchup.complete ) continue
|
||||||
|
|
||||||
|
data.points_scored += matchup.visitor_team_score
|
||||||
|
data.points_allowed += matchup.home_team_score
|
||||||
|
|
||||||
|
if ( matchup.visitor_team_score > matchup.home_team_score ) {
|
||||||
|
data.wins += 1
|
||||||
|
} else {
|
||||||
|
data.losses += 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* updates the API's data
|
* updates the API's data
|
||||||
*/
|
*/
|
||||||
|
@ -54,6 +54,7 @@ const index = {
|
|||||||
'/draft-board/available': ['controller::DraftBoard.get_available_players'],
|
'/draft-board/available': ['controller::DraftBoard.get_available_players'],
|
||||||
|
|
||||||
'/matchups': ['controller::Scores.get_weekly_scores'],
|
'/matchups': ['controller::Scores.get_weekly_scores'],
|
||||||
|
'/league-standings': ['controller::Scores.get_league_standings'],
|
||||||
},
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
File diff suppressed because one or more lines are too long
@ -3,6 +3,10 @@ class API {
|
|||||||
this.base_url = APP_BASE_PATH.replace('/app/', '/api/v1/')
|
this.base_url = APP_BASE_PATH.replace('/app/', '/api/v1/')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async get_standings() {
|
||||||
|
return this.get_request('league-standings')
|
||||||
|
}
|
||||||
|
|
||||||
async get_matchups() {
|
async get_matchups() {
|
||||||
return this.get_request('matchups')
|
return this.get_request('matchups')
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user