public async Task <TennisFixtureViewModel> GetSingleTennisPrediction(string playerASurname, string playerAFirstname, string playerBSurname, string playerBFirstname, int year, string tournamentSlug, bool updateStats = true) { var sport = this.fixtureRepository.GetSport("Tennis"); var tournament = this.fixtureRepository.GetTournamentFromSlug(tournamentSlug); var playerA = this.fixtureRepository.GetTeamOrPlayerFromNameAndMaybeFirstName(playerASurname, playerAFirstname); var playerB = this.fixtureRepository.GetTeamOrPlayerFromNameAndMaybeFirstName(playerBSurname, playerBFirstname); var safeDate = new DateTime(year, 06, 29); var valueOptions = new ValueOptions { CouponDate = safeDate, Tournament = tournament, DontUpdateTennisStats = !updateStats }; var provider = this.predictionProvider.CreatePredictionStrategy(sport); var prediction = (TennisPrediction)await provider.FetchSinglePredictionAsync(playerA, playerB, tournament, valueOptions); var tennisPredictionStat = new TennisPredictionStat { PlayerAGames = prediction.PlayerAGames, PlayerBGames = prediction.PlayerBGames, EPoints = (decimal?)prediction.EPoints, EGames = (decimal?)prediction.EGames, ESets = (decimal?)prediction.ESets }; var tennisMatchDetail = new TennisMatchDetail() { TennisPredictionStat = tennisPredictionStat, TennisPrediction = prediction }; return(Mapper.Map <TennisMatchDetail, TennisFixtureViewModel>(tennisMatchDetail)); //no idea what HydrateFullTennisMatchDetails was for in the first place, I only need predictions and number of games for now }
private IEnumerable <TennisMatchDetail> PersistTennisPredictions(IEnumerable <TennisPrediction> tennisPredictions, DateTime matchDate) { var persistedMatchIds = PersistGenericPredictions(tennisPredictions); var tennisPredictionsDic = new Dictionary <int, TennisPrediction>(); var tennisPredictionStatsDic = new Dictionary <int, TennisPredictionStat>(); var ret = new List <TennisMatchDetail>(); persistedMatchIds.Zip(tennisPredictions, (m, p) => new { MatchID = m, Prediction = p }) .ToList() .ForEach(m => { var predictionStat = new TennisPredictionStat { Id = m.MatchID, PlayerAGames = m.Prediction.PlayerAGames, PlayerBGames = m.Prediction.PlayerBGames, EPoints = (decimal?)m.Prediction.EPoints, EGames = (decimal?)m.Prediction.EGames, ESets = (decimal?)m.Prediction.ESets }; this.predictionRepository .AddOrUpdateTennisPredictionsStats(predictionStat); tennisPredictionStatsDic.Add(m.MatchID, predictionStat); tennisPredictionsDic.Add(m.MatchID, m.Prediction); }); this.predictionRepository.SaveChanges(); return(HydrateFullTennisMatchDetails(matchDate, tennisPredictionsDic, tennisPredictionStatsDic)); }
public void AddOrUpdateTennisPredictionsStats(TennisPredictionStat stat) { var persistedStat = First <TennisPredictionStat>(s => s.Id == stat.Id); if (persistedStat == null) { Add <TennisPredictionStat>(stat); } else { persistedStat.PlayerAGames = stat.PlayerAGames; persistedStat.PlayerBGames = stat.PlayerBGames; persistedStat.EPoints = stat.EPoints; persistedStat.EGames = stat.EGames; persistedStat.ESets = stat.ESets; } }