public IActionResult GetCorrectAnswerReport([FromBody] CorrectAnswerRequest request) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } return(Ok(_reportManager.BuildAnswerReport(request))); }
public CorrectAnswerReport BuildAnswerReport(CorrectAnswerRequest request) { IEnumerable <AnsweredDateResult> answeredResults = _context.Answers .Where(x => x.SubmitedDate <= request.ToDate.ToUniversalTime() && x.SubmitedDate >= request.FromDate.ToUniversalTime()) .Where(x => x.Exercise.LearningObjective.Domain.Subject.Name == request.Subject) .Where(x => string.IsNullOrEmpty(request.Domain) || x.Exercise.LearningObjective.Domain.Name == request.Domain) .Where(x => string.IsNullOrEmpty(request.LearningObjective) || x.Exercise.LearningObjective.Name == request.LearningObjective) .GroupBy(x => x.SubmitedDate.Date) .Select(group => new AnsweredDateResult() { CorrectCount = group.Count(x => x.Correct), IncorrectCount = group.Count(x => !x.Correct), AnsweredDate = group.Key }).ToList(); return(new CorrectAnswerReport() { AnsweredDateResults = answeredResults, MaxAnsweredCount = answeredResults.Select(x => x.CorrectCount + x.IncorrectCount) .DefaultIfEmpty(0) .Max() }); }