Example #1
0
        /// <summary>
        /// Updates task result.
        /// </summary>
        /// <param name="currentTaskResult">A candidates' current result.</param>
        /// <returns>A <see cref="System.Threading.Tasks.Task"/> representing the asynchronous operation.</returns>
        public System.Threading.Tasks.Task UpdateCandidateTaskResultAsync(TaskResult currentTaskResult)
        {
            if (currentTaskResult == null)
            {
                throw new ArgumentNullException(nameof(currentTaskResult));
            }

            TaskResult previousResult = _context.CandidateTaskResults.FirstOrDefault(result => result.ModifierId == currentTaskResult.ModifierId && result.CandidateExerciseId == currentTaskResult.CandidateExerciseId);

            if (previousResult == null)
            {
                return(SaveCandidateTaskResultAsync(currentTaskResult));
            }

            UpdateResult(previousResult, currentTaskResult);

            return(_context.SaveChangesAsync());
        }
Example #2
0
        public async System.Threading.Tasks.Task UpdateTestAsync(int testId, TestModel testModel)
        {
            // update general test info
            var testEntity = _exercisesContext.CandidateTests.Single(t => t.Id == testId);

            testEntity.Description  = testModel.Description;
            testEntity.MaximumScore = testModel.MaximumScore;
            testEntity.Name         = testModel.Name;
            testEntity.TimeMinutes  = testModel.TimeMinutes;
            testEntity.Subject      = testModel.Subject;

            // delete test questions that do not exist in model
            foreach (var questionEntity in _exercisesContext.TestQuestions.Where(q => q.TestId == testId))
            {
                if (!testModel.Questions.Any(q => q.Id == questionEntity.Id))
                {
                    _exercisesContext.TestQuestions.Remove(questionEntity);
                }
            }

            foreach (var questionModel in testModel.Questions)
            {
                // update existent questions
                if (_exercisesContext.TestQuestions.Any(q => q.Id == questionModel.Id))
                {
                    _exercisesContext.TestQuestions.Single(q => q.Id == questionModel.Id).Text = questionModel.Text;
                    var variantEntities = _exercisesContext.TestAnswerVariants.Where(v => v.QuestionId == questionModel.Id);
                    foreach (var variantEntity in variantEntities)
                    {
                        var variantModel = questionModel.AnswerVariants.Single(v => v.Id == variantEntity.Id);
                        variantEntity.Text      = variantModel.Text;
                        variantEntity.IsCorrect = variantModel.IsCorrect;
                    }
                }

                // add new questions
                else
                {
                    var questionEntity = Mapper.Map <QuestionModel, QuestionEntity>(questionModel);
                    questionEntity.TestId = testId;
                    _exercisesContext.TestQuestions.Add(questionEntity);
                }
            }

            await _exercisesContext.SaveChangesAsync();
        }
        /// <summary>
        /// Removes a task result by id.
        /// </summary>
        /// <param name="id">An id of a task result.</param>
        /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
        public Task RemoveTaskResultAsync(int id)
        {
            VerifyId(id);

            var temp = _context.CandidateTaskResults.FirstOrDefault(cr => cr.Id == id);
            if (temp == null)
            {
                throw new TaskResultNotFoundException();
            }

            _context.CandidateTaskResults.Remove(
                Mapper.Map<TaskResult>(temp));
            return _context.SaveChangesAsync();
        }