Пример #1
0
        private Train AddAttemptsToExamTrain(ExamTrain train, IEnumerable <TaskAnswerBindingModel> answers)
        {
            //get pairs attempt - answer and add answer value to attempt
            //attempts in exam train defined already

            train.TaskAttempts
            .Join(
                answers,
                attempt => attempt.ExamTask.Id,
                ans => ans.id,
                ((ta, ua) => new
            {
                bindingModel = ua,
                attempt = ta
            })
                )
            .ForEach(
                x =>
            {
                var attemptFromTrain        = x.attempt;
                attemptFromTrain.UserAnswer = x.bindingModel.answer;
                attemptFromTrain            = addExtraInfoForType(attemptFromTrain, x.bindingModel);
            }
                );
            return(train);
        }
Пример #2
0
        public IEnumerable <ExamTaskViewModel> GenerateNewExamTrain(int userId)
        {
            var user = _dbContext.Users.FirstOrDefault(x => x.Id == userId);

            if (user != null)
            {
                var unfinishedTrain =
                    user.Trains.OfType <ExamTrain>()
                    .TrainsOfUsersCurrentExamType()?.FirstOrDefault(x => x.FinishTime == null);
                if (unfinishedTrain != null)
                {
                    unfinishedTrain.FinishTime = DateTime.Now;
                }
                ExamTrain train = new ExamTrain();
                train.Exam      = user.CurrentExam;
                train.User      = user;
                train.StartTime = DateTime.Now;
                Random rnd = new Random();
                //get one task from each topic at fixed random examNumber position
                var lastIndexOfTasksList = _dbContext
                                           .TaskTopics
                                           .FirstOrDefault(x => x.Exam.Id == user.CurrentExam.Id)?
                                           .ExamTasks
                                           .Count() ?? 0;
                if (lastIndexOfTasksList == 0)
                {
                    return(new List <ExamTaskViewModel>());
                }
                var examNumber = rnd.Next(
                    0,
                    lastIndexOfTasksList - 1
                    );
                train.TaskAttempts = _dbContext
                                     .TaskTopics
                                     .Where(x => x.Exam.Id == user.CurrentExam.Id)
                                     .ToList()
                                     .Select(x => GenerateNewEmptyAttempt(x.ExamTasks.ElementAt(examNumber)))
                                     .ToList();

                //save to db
                _dbContext.Trains.Add(train);
                _dbContext.SaveChanges();

                return(train
                       .TaskAttempts
                       .ToList()
                       .Select(x => new ExamTaskViewModel(x.ExamTask)));
            }
            else
            {
                return(null);
            }
        }