public async Task <CreateSubtestResponse> CreateOrUpdateSubtestAsync(Subtest subtest) { // TODO :: CHECK IF SUBTEST BELONGS TO TOKEN USER'S TESTS //https://stackoverflow.com/questions/46112258/how-do-i-get-current-user-in-net-core-web-api-from-jwt-token if (subtest.Id == 0) { _subtestRepository.Add(subtest); } else { _subtestRepository.Update(subtest); } await _unitOfWork.CompleteAsync(); return(new CreateSubtestResponse(true, null, subtest)); }
private async Task ApplySubtestFilters(Subtest subtest) { var subtestScoreFilters = await _subtestScoreFilterRepository.ListAsync(subtest.Id); var forcedMaxFlag = false; foreach (var filter in subtestScoreFilters) { if (filter.ScoreFilterId == (int)ApplicationScoreFilter.Max) { forcedMaxFlag = true; subtest.Max = filter.Value; } subtest.Score = this.ApplyCalculableFilter(filter, subtest.Score); if (!forcedMaxFlag) { subtest.Max = this.ApplyCalculableFilter(filter, subtest.Max); } } }
public override object ReadJson( JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject obj = serializer.Deserialize <JObject>(reader); TestBase result = null; if (obj["subtests"] != null) { result = new TestSuite(); } else { result = new Subtest(); } serializer.Populate(obj.CreateReader(), result); return(result); }
public CreateSubtestResponse(bool success, string message, Subtest subtest) : base(success, message) { Subtest = subtest; }
private async Task CalculateScoreAndPercent(Subtest subtest) { float score = 0; float maxScore = 100; if (!subtest.IsScorable) { return; } if (subtest.IsCalculable) { foreach (var question in subtest.Questions) { Answer ans = question.Answer; if (ans == null) { break; } float questionScore = ans.OptionId == null ? ans.NumberAnswer : findOptionNumberResponse(question, ans); var questionScoreFilters = await _questionScoreFilterRepository.ListAsync(question.Id); foreach (var filter in questionScoreFilters) { questionScore = filter.ScoreFilterId != (int)ApplicationScoreFilter.Range ? this.ApplyCalculableFilter(filter, questionScore) : this.ApplyRangeFilter(filter, questionScore, ans.NumberAnswer); } score += questionScore; } subtest.Score = score; } else { var groupScoreFilters = await _groupScoreFilterRepository.ListAsync(subtest.Id); foreach (var question in subtest.Questions) { Answer ans = question.Answer; if (ans == null) { break; } float questionScore = 0; float maxForQuestion = 0; var optionId = ans.OptionId; if (optionId != 0 && optionId != null) { bool isCorrect = question.Options.Where(op => op.Id == ans.OptionId).First().IsCorrect; var questionScoreFilters = await _questionScoreFilterRepository.ListAsync(question.Id); foreach (var filter in questionScoreFilters) { questionScore = this.ApplyArbitraryFilter(filter, isCorrect); } maxForQuestion = questionScoreFilters.Max(f => f.Value); foreach (var filter in groupScoreFilters) { questionScore = this.ApplyGroupScoreFilter(filter, questionScore, optionId); } if (groupScoreFilters.FirstOrDefault() != null) { maxForQuestion = questionScoreFilters.Max(f => f.Value); } } score += questionScore; maxScore += maxForQuestion; } } subtest.Score = score; subtest.Max = maxScore; }
public void Update(Subtest test) { _context.Subtests.Update(test); }
public void Add(Subtest subtest) { _context.Subtests.Add(subtest); }