Added /plays/batting
This commit is contained in:
parent
2be7955e89
commit
cfcd51beb3
104
main.py
104
main.py
@ -3807,6 +3807,110 @@ async def v1_batstats_get_card(
|
|||||||
return return_val
|
return return_val
|
||||||
|
|
||||||
|
|
||||||
|
@app.get('/api/v1/plays/batting')
|
||||||
|
async def get_batting_totals(
|
||||||
|
player_id: list = Query(default=None), team_id: list = Query(default=None), min_pa: Optional[int] = 1,
|
||||||
|
season: list = Query(default=None), position: list = Query(default=None),
|
||||||
|
group_by: Literal['team', 'player', 'playerteam', 'playergame', 'teamgame', 'league'] = 'player',
|
||||||
|
sort: Optional[str] = None, limit: Optional[int] = None, short_output: Optional[bool] = False):
|
||||||
|
all_stats = BattingStat.select(
|
||||||
|
BattingStat.card, BattingStat.game_id, BattingStat.team, BattingStat.vs_team, BattingStat.pos,
|
||||||
|
BattingStat.card.player.alias('player'),
|
||||||
|
fn.SUM(BattingStat.pa).alias('sum_pa'), fn.SUM(BattingStat.ab).alias('sum_ab'),
|
||||||
|
fn.SUM(BattingStat.run).alias('sum_run'), fn.SUM(BattingStat.so).alias('sum_so'),
|
||||||
|
fn.SUM(BattingStat.hit).alias('sum_hit'), fn.SUM(BattingStat.rbi).alias('sum_rbi'),
|
||||||
|
fn.SUM(BattingStat.double).alias('sum_double'), fn.SUM(BattingStat.triple).alias('sum_triple'),
|
||||||
|
fn.SUM(BattingStat.hr).alias('sum_hr'), fn.SUM(BattingStat.bb).alias('sum_bb'),
|
||||||
|
fn.SUM(BattingStat.hbp).alias('sum_hbp'), fn.SUM(BattingStat.sac).alias('sum_sac'),
|
||||||
|
fn.SUM(BattingStat.ibb).alias('sum_ibb'), fn.SUM(BattingStat.gidp).alias('sum_gidp'),
|
||||||
|
fn.SUM(BattingStat.sb).alias('sum_sb'), fn.SUM(BattingStat.cs).alias('sum_cs'),
|
||||||
|
fn.SUM(BattingStat.bphr).alias('sum_bphr'), fn.SUM(BattingStat.bpfo).alias('sum_bpfo'),
|
||||||
|
fn.SUM(BattingStat.bp1b).alias('sum_bp1b'), fn.SUM(BattingStat.bplo).alias('sum_bplo')
|
||||||
|
).having(
|
||||||
|
fn.SUM(BattingStat.pa) >= min_pa
|
||||||
|
).join(Card)
|
||||||
|
|
||||||
|
if player_id is not None:
|
||||||
|
# all_players = Player.select().where(Player.id << player_id)
|
||||||
|
all_cards = Card.select().where(Card.player_id << player_id)
|
||||||
|
all_stats = all_stats.where(BattingStat.card << all_cards)
|
||||||
|
if team_id is not None:
|
||||||
|
all_teams = Team.select().where(Team.id << team_id)
|
||||||
|
all_stats = all_stats.where(BattingStat.team << all_teams)
|
||||||
|
if season is not None:
|
||||||
|
all_stats = all_stats.where(BattingStat.season << season)
|
||||||
|
if position is not None:
|
||||||
|
all_stats = all_stats.where(BattingStat.pos << position)
|
||||||
|
|
||||||
|
if group_by == 'player':
|
||||||
|
all_stats = all_stats.group_by(SQL('player'))
|
||||||
|
elif group_by == 'playerteam':
|
||||||
|
all_stats = all_stats.group_by(SQL('player'), BattingStat.team)
|
||||||
|
elif group_by == 'playergame':
|
||||||
|
all_stats = all_stats.group_by(SQL('player'), BattingStat.game_id)
|
||||||
|
elif group_by == 'team':
|
||||||
|
all_stats = all_stats.group_by(BattingStat.team)
|
||||||
|
elif group_by == 'teamgame':
|
||||||
|
all_stats = all_stats.group_by(BattingStat.team, BattingStat.game_id)
|
||||||
|
elif group_by == 'league':
|
||||||
|
all_stats = all_stats.group_by(BattingStat.season)
|
||||||
|
|
||||||
|
if sort == 'pa-desc':
|
||||||
|
all_stats = all_stats.order_by(SQL('sum_pa').desc())
|
||||||
|
elif sort == 'newest':
|
||||||
|
all_stats = all_stats.order_by(-BattingStat.game_id)
|
||||||
|
elif sort == 'oldest':
|
||||||
|
all_stats = all_stats.order_by(BattingStat.game_id)
|
||||||
|
|
||||||
|
if limit is not None:
|
||||||
|
if limit < 1:
|
||||||
|
limit = 1
|
||||||
|
all_stats = all_stats.limit(limit)
|
||||||
|
|
||||||
|
logging.info(f'bat_plays query: {all_stats}')
|
||||||
|
|
||||||
|
return_stats = {
|
||||||
|
'count': all_stats.count(),
|
||||||
|
'stats': [{
|
||||||
|
'player': x.card.player_id if short_output else model_to_dict(x.card.player, recurse=False),
|
||||||
|
'team': x.team_id if short_output else model_to_dict(x.team, recurse=False),
|
||||||
|
'pa': x.sum_pa,
|
||||||
|
'ab': x.sum_ab,
|
||||||
|
'run': x.sum_run,
|
||||||
|
'hit': x.sum_hit,
|
||||||
|
'rbi': x.sum_rbi,
|
||||||
|
'double': x.sum_double,
|
||||||
|
'triple': x.sum_triple,
|
||||||
|
'hr': x.sum_hr,
|
||||||
|
'bb': x.sum_bb,
|
||||||
|
'so': x.sum_so,
|
||||||
|
'hbp': x.sum_hbp,
|
||||||
|
'sac': x.sum_sac,
|
||||||
|
'ibb': x.sum_ibb,
|
||||||
|
'gidp': x.sum_gidp,
|
||||||
|
'sb': x.sum_sb,
|
||||||
|
'cs': x.sum_cs,
|
||||||
|
'bphr': x.sum_bphr,
|
||||||
|
'bpfo': x.sum_bpfo,
|
||||||
|
'bp1b': x.sum_bp1b,
|
||||||
|
'bplo': x.sum_bplo,
|
||||||
|
'avg': x.sum_hit / max(x.sum_ab, 1),
|
||||||
|
'obp': (x.sum_hit + x.sum_bb + x.sum_hbp + x.sum_ibb) / max(x.sum_pa, 1),
|
||||||
|
'slg': (x.sum_hr * 4 + x.sum_triple * 3 + x.sum_double * 2 +
|
||||||
|
(x.sum_hit - x.sum_double - x.sum_triple - x.sum_hr)) / max(x.sum_ab, 1),
|
||||||
|
'ops': ((x.sum_hit + x.sum_bb + x.sum_hbp + x.sum_ibb) / max(x.sum_pa, 1)) +
|
||||||
|
((x.sum_hr * 4 + x.sum_triple * 3 + x.sum_double * 2 +
|
||||||
|
(x.sum_hit - x.sum_double - x.sum_triple - x.sum_hr)) / max(x.sum_ab, 1)),
|
||||||
|
'woba': (.69 * x.sum_bb + .72 * x.sum_hbp + .89 * (x.sum_hit - x.sum_double - x.sum_triple - x.sum_hr) +
|
||||||
|
1.27 * x.sum_double + 1.62 * x.sum_triple + 2.1 * x.sum_hr) / max(x.sum_pa - x.sum_ibb, 1),
|
||||||
|
'game': x.game_id
|
||||||
|
} for x in all_stats]
|
||||||
|
}
|
||||||
|
|
||||||
|
db.close()
|
||||||
|
return return_stats
|
||||||
|
|
||||||
|
|
||||||
@app.post('/api/v1/batstats')
|
@app.post('/api/v1/batstats')
|
||||||
async def v1_batstats_post(stats: BattingStatModel, token: str = Depends(oauth2_scheme)):
|
async def v1_batstats_post(stats: BattingStatModel, token: str = Depends(oauth2_scheme)):
|
||||||
if not valid_token(token):
|
if not valid_token(token):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user