def insert_match(dt: datetime.datetime, left_id: int, left_games: int, right_id: int, right_games: int, round_num: Optional[int] = None, elimination: Optional[int] = None, mtgo_match_id: Optional[int] = None) -> int: db().begin('insert_match') match_id = db().insert( 'INSERT INTO `match` (`date`, `round`, elimination, mtgo_id) VALUES (%s, %s, %s, %s)', [dtutil.dt2ts(dt), round_num, elimination, mtgo_match_id]) update_cache(left_id, left_games, right_games, dt=dt) update_cache(right_id, right_games, left_games, dt=dt) sql = 'INSERT INTO deck_match (deck_id, match_id, games) VALUES (%s, %s, %s)' db().execute(sql, [left_id, match_id, left_games]) if right_id is not None: # Don't insert matches or adjust Elo for the bye. db().execute(sql, [right_id, match_id, right_games]) if left_games == right_games: # Don't adjust Elo for a draw. This is not quite right but we have so few it's not important. winner_id = left_id if left_games > right_games else right_id loser_id = left_id if left_games < right_games else right_id elo.adjust_elo(winner_id, loser_id) db().commit('insert_match') redis.clear(f'decksite:deck:{left_id}') if right_id is not None: redis.clear(f'decksite:deck:{right_id}') return match_id
def insert_match(dt: datetime.datetime, left_id: int, left_games: int, right_id: int, right_games: int, round_num: Optional[int] = None, elimination: Optional[int] = None, mtgo_match_id: Optional[int] = None) -> int: if left_games == right_games: raise InvalidDataException('`insert_match` does not support draws.') winner_id = left_id if left_games > right_games else right_id loser_id = left_id if left_games < right_games else right_id db().begin('insert_match') match_id = db().insert( 'INSERT INTO `match` (`date`, `round`, elimination, mtgo_id) VALUES (%s, %s, %s, %s)', [dtutil.dt2ts(dt), round_num, elimination, mtgo_match_id]) sql = 'UPDATE deck_cache SET wins = IFNULL(wins, 0) + 1, active_date = %s WHERE deck_id = %s' db().execute(sql, [dtutil.dt2ts(dt), winner_id]) sql = 'UPDATE deck_cache SET losses = IFNULL(losses, 0) + 1, active_date = %s WHERE deck_id = %s' db().execute(sql, [dtutil.dt2ts(dt), loser_id]) sql = 'INSERT INTO deck_match (deck_id, match_id, games) VALUES (%s, %s, %s)' db().execute(sql, [left_id, match_id, left_games]) if right_id is not None: # Don't insert matches or adjust Elo for the bye. db().execute(sql, [right_id, match_id, right_games]) elo.adjust_elo(winner_id, loser_id) db().commit('insert_match') redis.clear(f'decksite:deck:{left_id}') if right_id is not None: redis.clear(f'decksite:deck:{right_id}') return match_id
def insert_match(dt, left_id, left_games, right_id, right_games, round_num=None, elimination=False, mtgo_match_id=None): match_id = db().insert("INSERT INTO `match` (`date`, `round`, elimination, mtgo_id) VALUES (%s, %s, %s, %s)", [dtutil.dt2ts(dt), round_num, elimination, mtgo_match_id]) sql = 'INSERT INTO deck_match (deck_id, match_id, games) VALUES (%s, %s, %s)' db().execute(sql, [left_id, match_id, left_games]) if right_id is not None: # Don't insert matches or adjust Elo for the bye. db().execute(sql, [right_id, match_id, right_games]) elo.adjust_elo(left_id if left_games > right_games else right_id, left_id if left_games < right_games else right_id) return match_id