private MetricExcelSheet ConvertDataForHeadToHead(IEnumerable <PlayerHeadToHead> playerHeadToHeads) { var sheet = new MetricExcelSheet { Name = "H2H_P", ColumnNames = new List <string> { "SOURCE", "PLAYER_A", "PLAYER_B", "TIE_INCLUDED", "PLAYER_A_PRICE", "PLAYER_B_PRICE", "TIE_PRICE" }, Data = new List <List <string> >() }; var groupData = playerHeadToHeads.GroupBy(x => x.Id); foreach (var group in groupData) { if (group.Count() != 2) { _logger.Error($"This group has {group.Count()} items instead of 2"); continue; } var data = new List <string> { group.First().ScrapingInformation.Provider.Name }; foreach (var headToHead in group) { if (headToHead.PlayerA != null) { data.Add(headToHead.PlayerA.Name); } else if (headToHead.PlayerB != null) { data.Add(headToHead.PlayerB.Name); } else { _logger.Error($"Both players are null for {headToHead.Id}"); } } data.Add(group.First().IsTieIncluded ? "YES" : "NO"); data.Add(group.First().PlayerAPrice.ToString()); data.Add(group.First().PlayerBPrice.ToString()); data.Add(group.First().TiePrice.ToString()); sheet.Data.Add(data); } return(sheet); }
private static IEnumerable <MetricExcelSheet> ConvertDataForOverUnder(IReadOnlyCollection <PlayerOverUnder> playerOverUnders, IEnumerable <Provider> providers) { var scoreTypes = new List <string> { ScoreType.Point, ScoreType.Assist, ScoreType.PointAssist, ScoreType.PointRebound, ScoreType.PointReboundAssist, ScoreType.Rebound, ScoreType.ThreePoint }; var values = new List <string> { "Over", "LineOver", "Under", "LineUnder" }; var providersList = providers.ToList(); var result = new List <MetricExcelSheet>(); foreach (var scoreType in scoreTypes) { var groupData = playerOverUnders .Where(x => x.ScoreType == scoreType) .GroupBy(x => new { x.MatchId, x.PlayerId, x.ScrapingInformation.ProviderId }) .Select(x => x .OrderByDescending(y => y.CreatedAt) .FirstOrDefault()) .ToList(); foreach (var value in values) { var sheet = new MetricExcelSheet { Name = $"{scoreType}_{value}", ColumnNames = new List <string>(), Data = new List <List <string> >() }; sheet.ColumnNames.Add("GameCode"); sheet.ColumnNames.Add("PlayerId"); sheet.ColumnNames.Add("PlayerName"); sheet.ColumnNames.AddRange(providersList.Select(x => x.Name)); var dataDict = new Dictionary <(string, string, string), List <string> >(); foreach (var item in groupData.Where(item => item != null)) { if (!dataDict.TryGetValue((item.Match.GameCode, item.Player.SourceId, item.Player.Name), out var curData)) { curData = providersList.Select(x => string.Empty).ToList(); dataDict.Add((item.Match.GameCode, item.Player.SourceId, item.Player.Name), curData); } for (var i = 0; i < providersList.Count; i++) { var provider = providersList[i]; curData[i] = value switch { "Over" => (item.ScrapingInformation.ProviderId == provider.Id && item.Over != null && item.Over.Value.CompareTo(0) != 0 ? item.Over.ToString() : string.Empty), "LineOver" => (item.ScrapingInformation.ProviderId == provider.Id && item.OverLine != null && item.OverLine.Value.CompareTo(0) != 0 ? item.OverLine.ToString() : string.Empty), "Under" => (item.ScrapingInformation.ProviderId == provider.Id && item.Under != null && item.Under.Value.CompareTo(0) != 0 ? item.Under.ToString() : string.Empty), "LineUnder" => (item.ScrapingInformation.ProviderId == provider.Id && item.UnderLine != null && item.UnderLine.Value.CompareTo(0) != 0 ? item.UnderLine.ToString() : string.Empty), _ => curData[i] // Default case }; } } foreach (var((gameCode, playerSourceId, playerName), list) in dataDict) { var hasValue = list.Aggregate(false, (current, metric) => current | !string.IsNullOrEmpty(metric)); if (!hasValue) { continue; } var data = new List <string> { gameCode, playerSourceId, playerName }; data.AddRange(list); sheet.Data.Add(data); } result.Add(sheet); } } return(result); }