示例#1
0
        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;
        }
示例#6
0
 public void Update(Subtest test)
 {
     _context.Subtests.Update(test);
 }
示例#7
0
 public void Add(Subtest subtest)
 {
     _context.Subtests.Add(subtest);
 }