Consolidated scouting db preparation

This commit is contained in:
Cal Corum 2023-09-07 13:14:53 -05:00
parent b445957e3c
commit 2be7955e89
2 changed files with 201 additions and 1 deletions

View File

@ -481,3 +481,178 @@ db.create_tables([
GauntletRun
])
db.close()
scout_db = SqliteDatabase(
'storage/card_creation.db',
pragmas={
'journal_mode': 'wal',
'cache_size': -1 * 64000,
'synchronous': 0
}
)
class BaseModelScout(Model):
class Meta:
database = scout_db
class ScoutCardset(BaseModelScout):
set_title = CharField()
set_subtitle = CharField(null=True)
class ScoutPlayer(BaseModelScout):
sba_id = IntegerField(primary_key=True)
name = CharField()
fg_id = IntegerField()
br_id = CharField()
offense_col = IntegerField()
hand = CharField(default='R')
scout_db.create_tables([ScoutCardset, ScoutPlayer])
class BatterRatings(BaseModelScout):
id = CharField(unique=True, primary_key=True)
player = ForeignKeyField(ScoutPlayer)
cardset = ForeignKeyField(ScoutCardset)
vs_hand = FloatField()
is_prep = BooleanField()
homerun = FloatField()
bp_homerun = FloatField()
triple = FloatField()
double_three = FloatField()
double_two = FloatField()
double_pull = FloatField()
single_two = FloatField()
single_one = FloatField()
single_center = FloatField()
bp_single = FloatField()
hbp = FloatField()
walk = FloatField()
strikeout = FloatField()
lineout = FloatField()
popout = FloatField()
flyout_a = FloatField()
flyout_bq = FloatField()
flyout_lf_b = FloatField()
flyout_rf_b = FloatField()
groundout_a = FloatField()
groundout_b = FloatField()
groundout_c = FloatField()
avg = FloatField(null=True)
obp = FloatField(null=True)
slg = FloatField(null=True)
class PitcherRatings(BaseModelScout):
id = CharField(unique=True, primary_key=True)
player = ForeignKeyField(ScoutPlayer)
cardset = ForeignKeyField(ScoutCardset)
vs_hand = CharField()
is_prep = BooleanField()
homerun = FloatField()
bp_homerun = FloatField()
triple = FloatField()
double_three = FloatField()
double_two = FloatField()
double_cf = FloatField()
single_two = FloatField()
single_one = FloatField()
single_center = FloatField()
bp_single = FloatField()
hbp = FloatField()
walk = FloatField()
strikeout = FloatField()
fo_slap = FloatField()
fo_center = FloatField()
groundout_a = FloatField()
groundout_b = FloatField()
xcheck_p = FloatField()
xcheck_c = FloatField()
xcheck_1b = FloatField()
xcheck_2b = FloatField()
xcheck_3b = FloatField()
xcheck_ss = FloatField()
xcheck_lf = FloatField()
xcheck_cf = FloatField()
xcheck_rf = FloatField()
avg = FloatField(null=True)
obp = FloatField(null=True)
slg = FloatField(null=True)
scout_db.create_tables([BatterRatings, PitcherRatings])
class CardColumns(BaseModelScout):
id = CharField(unique=True, primary_key=True)
player = ForeignKeyField(ScoutPlayer)
hand = CharField()
b_ratings = ForeignKeyField(BatterRatings, null=True)
p_ratings = ForeignKeyField(PitcherRatings, null=True)
one_dice = CharField()
one_results = CharField()
one_splits = CharField()
two_dice = CharField()
two_results = CharField()
two_splits = CharField()
three_dice = CharField()
three_results = CharField()
three_splits = CharField()
class Position(BaseModelScout):
player = ForeignKeyField(ScoutPlayer)
cardset = ForeignKeyField(ScoutCardset)
position = CharField()
innings = IntegerField()
range = IntegerField()
error = IntegerField()
arm = CharField(null=True)
pb = IntegerField(null=True)
overthrow = IntegerField(null=True)
class BatterData(BaseModelScout):
player = ForeignKeyField(ScoutPlayer)
cardset = ForeignKeyField(ScoutCardset)
stealing = CharField()
st_low = IntegerField()
st_high = IntegerField()
st_auto = BooleanField()
st_jump = FloatField()
bunting = CharField(null=True)
hit_and_run = CharField(null=True)
running = CharField()
class PitcherData(BaseModelScout):
player = ForeignKeyField(ScoutPlayer)
cardset = ForeignKeyField(ScoutCardset)
balk = IntegerField(null=True)
wild_pitch = IntegerField(null=True)
hold = CharField()
starter_rating = IntegerField()
relief_rating = IntegerField()
closer_rating = IntegerField(null=True)
batting = CharField(null=True)
scout_db.create_tables([CardColumns, Position, BatterData, PitcherData])
class CardOutput(BaseModelScout):
name = CharField()
hand = CharField()
positions = CharField()
stealing = CharField()
bunting = CharField()
hitandrun = CharField()
running = CharField()
scout_db.close()

27
main.py
View File

@ -3,7 +3,7 @@ import logging
import os
from db_engine import *
from typing import Optional, List, Union
from typing import Optional, List, Union, Literal
from fastapi import FastAPI, HTTPException, Depends, Response, Query
from fastapi.security import OAuth2PasswordBearer
import pydantic
@ -4912,3 +4912,28 @@ async def v1_stl_fix(token: str = Depends(oauth2_scheme)):
return {'detail': f'Removed the period from St Louis'}
@app.get('/api/v1/ratings/batter/{sba_id}')
async def v1_ratings_batter_get(
sba_id: int, cardset_name: Optional[str] = None, vs_hand: Literal["l", "r", "L", "R"] = None):
this_player = ScoutPlayer.get_or_none(ScoutPlayer.sba_id == sba_id)
logging.info(f'num players: {ScoutPlayer.select().count()}')
if this_player is None:
scout_db.close()
raise HTTPException(status_code=404, detail=f'SBa ID {sba_id} not found')
r_query = BatterRatings.select().where(
(BatterRatings.player == this_player) & (BatterRatings.is_prep == 0)
)
if cardset_name is not None:
this_cardset = ScoutCardset.get_or_none(fn.Lower(ScoutCardset.set_title) == cardset_name.lower())
r_query = r_query.where(BatterRatings.cardset == this_cardset)
if vs_hand is not None:
r_query = r_query.where(fn.Lower(BatterRatings.vs_hand) == f'v{vs_hand.lower()}')
return_val = {'count': r_query.count(), 'ratings': [model_to_dict(x) for x in r_query]}
scout_db.close()
return return_val