Fix bug where api retrurns team which player first recorded a stat for as opposed to current team

This commit is contained in:
Peter 2023-12-29 12:52:51 -05:00
parent 71e7c7fcf7
commit 5cadb7f661
3 changed files with 34 additions and 4 deletions

View File

@ -95,7 +95,6 @@ export async function fetchFieldingStatsBySeason(seasonNumber: number, isRegular
return [] return []
} }
// TODO might want to make this playerpositionteam grouping (currently does not exist)
const response = await fetch(`${SITE_URL}/api/v3/plays/fielding?season=${seasonNumber}&limit=10000&group_by=playerposition&s_type=${isRegularSeason ? 'regular' : 'post'}`) const response = await fetch(`${SITE_URL}/api/v3/plays/fielding?season=${seasonNumber}&limit=10000&group_by=playerposition&s_type=${isRegularSeason ? 'regular' : 'post'}`)
const fieldingStatsResponse: { const fieldingStatsResponse: {

View File

@ -31,3 +31,19 @@ export async function fetchActiveTeamByOwnerId(ownerId: string): Promise<Team |
return teamResponse.teams[0] return teamResponse.teams[0]
} }
export async function fetchTeamsBySeason(season: number): Promise<Team[]> {
const response = await fetch(`${SITE_URL}/api/v3/teams?season=${season}&short_output=False`)
const teamResponse: {
count: number
teams: Team[]
} = await response.json()
if (teamResponse.count === 0) {
console.warn('teamServices.fetchTeamsBySeason - Received 0 teams for season, did you provide the correct season number?')
return []
}
return teamResponse.teams
}

View File

@ -62,6 +62,7 @@ import { type LeagueInfo, fetchCurrentLeagueInfo } from '@/services/currentServi
import { fetchFieldingStatsBySeason, type FieldingStat } from '@/services/fieldingStatsService' import { fetchFieldingStatsBySeason, type FieldingStat } from '@/services/fieldingStatsService'
import { fetchPitchingStatsBySeason, type PitchingStat } from '@/services/pitchingStatsService' import { fetchPitchingStatsBySeason, type PitchingStat } from '@/services/pitchingStatsService'
import type { Player } from '@/services/playersService' import type { Player } from '@/services/playersService'
import { fetchTeamsBySeason } from '@/services/teamsService'
import { CURRENT_SEASON, GAMES_PER_WEEK, WEEKS_PER_SEASON } from '@/services/utilities' import { CURRENT_SEASON, GAMES_PER_WEEK, WEEKS_PER_SEASON } from '@/services/utilities'
interface LeaderboardTableData<T> { interface LeaderboardTableData<T> {
@ -109,6 +110,7 @@ export default {
allPlayersBattingStats: [] as BattingStat[], allPlayersBattingStats: [] as BattingStat[],
allPlayersFieldingStats: [] as FlatFieldingStat[], allPlayersFieldingStats: [] as FlatFieldingStat[],
allPlayersPitchingStats: [] as PitchingStat[], allPlayersPitchingStats: [] as PitchingStat[],
teamsById: {} as Map<number, Team>,
currentSeasonNumber: CURRENT_SEASON, currentSeasonNumber: CURRENT_SEASON,
seasonNumber: CURRENT_SEASON, seasonNumber: CURRENT_SEASON,
statType: 'Batting' as 'Batting' | 'Pitching' | 'Fielding', statType: 'Batting' as 'Batting' | 'Pitching' | 'Fielding',
@ -327,20 +329,33 @@ export default {
const leagueInfo: LeagueInfo = await fetchCurrentLeagueInfo() const leagueInfo: LeagueInfo = await fetchCurrentLeagueInfo()
this.weekNumber = leagueInfo.week this.weekNumber = leagueInfo.week
if (!this.teamsById.size) {
const teams = await fetchTeamsBySeason(this.seasonNumber)
this.teamsById = new Map(teams.map(team => [team.id, team]))
}
if (this.statType == 'Batting') { if (this.statType == 'Batting') {
this.allPlayersBattingStats = await fetchBattingStatsBySeason(this.seasonNumber, true) this.allPlayersBattingStats = (await fetchBattingStatsBySeason(this.seasonNumber, true))
.map(stat => {
return { ...stat, team: this.teamsById.get(stat.player.team as unknown as number) ?? stat.team }
})
} }
if (this.statType == 'Pitching') { if (this.statType == 'Pitching') {
this.allPlayersPitchingStats = await fetchPitchingStatsBySeason(this.seasonNumber, true) this.allPlayersPitchingStats = (await fetchPitchingStatsBySeason(this.seasonNumber, true))
.map(stat => {
return { ...stat, team: this.teamsById.get(stat.player.team as unknown as number) ?? stat.team }
})
} }
if (this.statType == 'Fielding') { if (this.statType == 'Fielding') {
const allPlayerPositionFieldingStats: FieldingStat[] = await fetchFieldingStatsBySeason(this.seasonNumber, true) const allPlayerPositionFieldingStats: FieldingStat[] = await fetchFieldingStatsBySeason(this.seasonNumber, true)
const aggregatedFieldingStatsByPlayer: { [playerName: string]: FlatFieldingStat } = {} const aggregatedFieldingStatsByPlayer: { [playerName: string]: FlatFieldingStat } = {}
allPlayerPositionFieldingStats.forEach(stat => { allPlayerPositionFieldingStats.forEach(stat => {
if (!aggregatedFieldingStatsByPlayer[stat.player.name]) { if (!aggregatedFieldingStatsByPlayer[stat.player.name]) {
aggregatedFieldingStatsByPlayer[stat.player.name] = { aggregatedFieldingStatsByPlayer[stat.player.name] = {
player: stat.player, player: stat.player,
team: stat.team, // looking up team as api provides first team with stat so traded players are incorrect
team: this.teamsById.get(stat.player.team as unknown as number) ?? stat.team,
xCheckCount: 0, xCheckCount: 0,
hit: 0, hit: 0,
error: 0, error: 0,