public static async Task <DsResponse> GetSynergy(sc2dsstatsContext context, DsRequest request) { var timestrings = DSData.Timestrings(request.Timespan); var results = context.DsTimeResults .Include(i => i.Teammates) .AsNoTracking() .Where(x => x.Player == request.Player && timestrings.Contains(x.Timespan) && x.Cmdr == request.Interest); var synresults = await results.ToListAsync(); int tcount = synresults.Sum(s => s.Count); var response = new DsResponse() { Interest = request.Interest, Count = tcount, AvgDuration = (int)(synresults.Sum(s => s.Duration) / tcount), Items = new List <DsResponseItem>() }; foreach (var cmdr in DSData.cmdrs) { var teammates = synresults.SelectMany(s => s.Teammates).Where(x => x.Cmdr == cmdr); int count = teammates.Sum(s => s.Count); response.Items.Add(new DsResponseItem() { Label = cmdr, Count = count / 6, Wins = teammates.Sum(s => s.Wins) }); } return(response); }
public static async Task <DsResponse> GetCrosstableFromTimeResults(sc2dsstatsContext context, DsRequest request) { var timestrings = DSData.Timestrings(request.Timespan, true); var results = await context.DsTimeResults .AsNoTracking() .Where(x => x.Player == request.Player && timestrings.Contains(x.Timespan)) .ToListAsync(); CrosstableResponse response = new CrosstableResponse() { Interest = "CrossTable", Items = new List <CrosstableResponseItem>() }; var removeMonths = new List <string>() { DateTime.Today.ToString("yyyyMM") }; if (DateTime.Today.Day < 16) { removeMonths.Add((DateTime.Today.AddMonths(-1)).ToString("yyyyMM")); } foreach (var cmdr in DSData.cmdrs) { var cmdrResults = results.Where(x => x.Cmdr == cmdr).ToArray(); foreach (var vs in DSData.cmdrs) { if (vs == cmdr) { response.Items.Add(new CrosstableResponseItem()); } else { var vsResults = cmdrResults.Where(x => x.Opp == vs).ToArray(); var oldVsResults = vsResults.Where(x => !removeMonths.Contains(x.Timespan)).ToArray(); response.Items.Add(new CrosstableResponseItem() { Label = $"{cmdr} vs {vs}", Count = vsResults.Sum(s => s.Count), Wins = vsResults.Sum(s => s.Wins), OldCount = oldVsResults.Sum(s => s.Count), OldWins = oldVsResults.Sum(s => s.Wins), }); } } } return(response); }
public static async Task <DsResponse> GetDpsFromTimeResults(sc2dsstatsContext context, DsRequest request) { var timestrings = DSData.Timestrings(request.Timespan); var results = context.DsTimeResults.AsNoTracking().Where(x => x.Player == request.Player && timestrings.Contains(x.Timespan)); if (request.Interest == "ALL") { results = results.Where(x => x.Opp == String.Empty); } else { results = results.Where(x => x.Cmdr == request.Interest); } var dpsresults = await results.ToListAsync(); int count = dpsresults.Sum(s => s.Count); var response = new DsResponse() { Interest = request.Interest, Count = request.Player ? count : count / 6, AvgDuration = (int)(dpsresults.Sum(s => s.Duration) / count), Items = new List <DsResponseItem>() }; foreach (var cmdr in DSData.cmdrs) { var cmdrresults = (request.Interest == "ALL") switch { true => dpsresults.Where(x => x.Cmdr == cmdr).ToList(), false => dpsresults.Where(x => x.Opp == cmdr).ToList(), }; var army = cmdrresults.Sum(s => s.Army); var kills = cmdrresults.Sum(s => s.Kills); var dpv = army / kills; response.Items.Add(new DsResponseItem() { Label = cmdr, Count = (int)(dpv * 10000), Wins = 10000 }); } return(response); }
public static async Task <DsResponse> GetWinrateFromTimeResults(sc2dsstatsContext context, DsRequest request) { var timestrings = DSData.Timestrings(request.Timespan); var results = context.DsTimeResults.AsNoTracking().Where(x => x.Player == request.Player && timestrings.Contains(x.Timespan)); if (request.Interest == "ALL") { results = results.Where(x => x.Opp == String.Empty); } else { results = results.Where(x => x.Cmdr == request.Interest); } var timeresults = await results.ToListAsync(); int tcount = timeresults.Sum(s => s.Count); var response = new DsResponse() { Interest = request.Interest, Count = timeresults.Sum(s => s.Count) / 6, AvgDuration = tcount == 0 ? 0 : (int)(timeresults.Sum(s => s.Duration) / tcount), Items = new List <DsResponseItem>() }; foreach (var cmdr in DSData.cmdrs) { var cmdrresults = (request.Interest == "ALL") switch { true => timeresults.Where(x => x.Cmdr == cmdr).ToList(), false => timeresults.Where(x => x.Opp == cmdr).ToList(), }; int count = cmdrresults.Sum(s => s.Count); response.Items.Add(new DsResponseItem() { Label = cmdr, Count = count, Wins = cmdrresults.Sum(s => s.Wins) }); } return(response); }