private void InitReports() { logger.Info("Initialize reports"); recentMatches = new DataIdentity <MatchInfo>() .Report(MaxReportSize, m => m.EndTime, (m1, m2) => m1.GetIndex().CompareTo(m2.GetIndex())); popularServers = new DataIdentity <ServerInfo>() .Select(s => new ServerReportResult { Server = s, TotalMatchesPlayed = serverStatisticStorage.GetStatistics(s.Id)?.TotalMatchesPlayed ?? 0 }) .Report(MaxReportSize, s => s.TotalMatchesPlayed, (s1, s2) => string.Compare(s1.Server.Id, s2.Server.Id, StringComparison.Ordinal)); allServers = new DataIdentity <ServerInfo>() .Report(s => s.Id, (s1, s2) => string.Compare(s1.Id, s2.Id, StringComparison.Ordinal)); bestPlayers = new DataIdentity <PlayerInfo>().Where(p => { var playerStat = playerStatisticStorage.GetStatistics(p.Name); return(playerStat.KillToDeathRatio != null && playerStat.TotalMatchesPlayed >= 10); }) .Select(p => new PlayerReportResult { Player = p, KillToDeathRatio = playerStatisticStorage.GetStatistics(p.Name).KillToDeathRatio }) .Report(MaxReportSize, p => { if (p.KillToDeathRatio != null) { return(p.KillToDeathRatio.Value); } throw new ArgumentException($"{nameof(p.KillToDeathRatio)} must be not null"); }, (p1, p2) => p1.Player.GetIndex().CompareTo(p2.Player.GetIndex())); }
private Task <IResponse> GetFullPlayerStatstic(string playerName) { var statistics = playerStatistics.GetStatistics(playerName); if (statistics.TotalMatchesPlayed == 0) { return(Task.FromResult <IResponse>(new HttpResponse(HttpStatusCode.NotFound))); } return(Task.FromResult <IResponse>(new JsonHttpResponse(HttpStatusCode.OK, new { statistics.TotalMatchesPlayed, statistics.AverageMatchesPerDay, statistics.AverageScoreboardPercent, statistics.FavoriteGameMode, statistics.FavoriteServer, lastMatchPlayed = statistics.LastMatchPlayed.ToUtcFormat(), statistics.MaximumMatchesPerDay, statistics.TotalMatchesWon, statistics.UniqueServers, statistics.KillToDeathRatio, }))); }