예제 #1
0
        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);
        }
예제 #2
0
        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);
        }