public async virtual Task <IEnumerable <StatisticsResult <PlayerInnings> > > ReadPlayerInnings(StatisticsFilter filter, StatisticsSortOrder sortOrder)
        {
            filter = filter ?? new StatisticsFilter();

            var orderByFields = new List <string>();

            if (sortOrder == StatisticsSortOrder.LatestFirst)
            {
                orderByFields.Add("MatchStartTime DESC");
            }
            else if (sortOrder == StatisticsSortOrder.BestFirst)
            {
                orderByFields.Add("RunsScored DESC");
                orderByFields.Add("DismissalType ASC");
            }
            else
            {
                throw new InvalidOperationException();
            }

            return(await ReadBestFiguresInAMatch <PlayerInnings>("RunsScored", "PlayerWasDismissed", new[] { "PlayerInningsId", "DismissalType", "BallsFaced" }, orderByFields, null, filter).ConfigureAwait(false));
        }
        public async virtual Task <IEnumerable <StatisticsResult <BowlingFigures> > > ReadBowlingFigures(StatisticsFilter filter, StatisticsSortOrder sortOrder)
        {
            filter = filter ?? new StatisticsFilter();

            var orderByFields = new List <string>();

            if (sortOrder == StatisticsSortOrder.LatestFirst)
            {
                orderByFields.Add("MatchStartTime DESC");
            }
            else if (sortOrder == StatisticsSortOrder.BestFirst)
            {
                orderByFields.Add("Wickets DESC");
                orderByFields.Add("HasRunsConceded DESC");
                orderByFields.Add("RunsConceded ASC");
            }
            else
            {
                throw new InvalidOperationException();
            }

            // NOTE: Don't check for RunsConceded IS NOT NULL in this stat, because 5/NULL is still better than 4/20.
            // Wickets, even if 0, means the player bowled in the match, so check it is not null.
            // Can trust wickets, not other fields, because wickets figure is generated whether bowling is recorded on batting and/or bowling card.
            return(await ReadBestFiguresInAMatch <BowlingFigures>("Wickets", "RunsConceded", new[] { "BowlingFiguresId", "RunsConceded", "Overs", "Maidens" }, orderByFields, 0, filter).ConfigureAwait(false));
        }
Ejemplo n.º 3
0
        /// <inheritdoc />
        public async Task <IEnumerable <StatisticsResult <BowlingFigures> > > ReadBowlingFigures(StatisticsFilter filter, StatisticsSortOrder sortOrder)
        {
            filter = filter ?? new StatisticsFilter();
            var cachePolicy = _policyRegistry.Get <IAsyncPolicy>(CacheConstants.StatisticsPolicy);

            return(await cachePolicy.ExecuteAsync(async context => await _statisticsDataSource.ReadBowlingFigures(filter, sortOrder).ConfigureAwait(false), new Context(nameof(ReadBowlingFigures) + _statisticsFilterSerializer.Serialize(filter) + sortOrder.ToString())));
        }