Example #1
0
        public static EditQuestionRequest ToEditQuestionRequest(this Question question)
        {
            EditQuestionRequest editQuestionRequest = new EditQuestionRequest()
            {
                Id          = question.Id,
                Title       = question.Title,
                Explanation = question.Explanation,
                ImageUrl    = UrlHelper.GetUri(question.Image),
                Answers     = AnswerMapper.ToListUpdateAnswerRequest(question.QuestionAnswers.Select(x => x.Answer).ToList())
            };

            return(editQuestionRequest);
        }
Example #2
0
        public static EditQuestionRequest ToEditQuestionRequest(this QuestionResponse question)
        {
            EditQuestionRequest editQuestionRequest = new EditQuestionRequest()
            {
                Id          = question.Id,
                Title       = question.Title,
                Explanation = question.Explanation,
                ImageUrl    = question.ImageUrl,
                ThemeId     = question.ThemeId,
                Answers     = AnswerMapper.ToListUpdateAnswerRequest(question.Answers)
            };

            return(editQuestionRequest);
        }
        public async Task <ActionResult> Edit(QuestionEditViewModel model, FormCollection formCollection)
        {
            if (model.File != null && model.File.ContentLength > 0) // Replace image
            {
                if (model.ImageUrl != null)
                {
                    await _questionAdminService.DeleteAttachmentAsync(model.Id);

                    model.ImageUrl = null;
                }
                var extension = AttachmentsUtil.GetExtentionFromMimeType(model.File.ContentType);
                var content   = GetAttachmentContent(model.File);
                model.ImageUrl = await _questionAdminService.UploadAttachmentAsync(new UploadQuestionAttachmentRequest(model.Id, content, extension));
            }
            else if (model.DeleteImage && model.ImageUrl != null) // Delete image
            {
                await _questionAdminService.DeleteAttachmentAsync(model.Id);

                model.ImageUrl = null;
            }

            List <UpdateAnswerRequest> answers = new List <UpdateAnswerRequest>();

            for (int i = 6; i < formCollection.Count; i += 3)
            {
                UpdateAnswerRequest updateAnswerRequest = new UpdateAnswerRequest()
                {
                    Id = Guid.Parse(formCollection[i]),
                    IsCorrectAnswer = Convert.ToBoolean(formCollection[i + 1]),
                    Title           = formCollection[i + 2]
                };
                answers.Add(updateAnswerRequest);
            }

            EditQuestionRequest editQuestionRequest = new EditQuestionRequest()
            {
                Id          = model.Id,
                Title       = model.Title,
                ImageUrl    = model.ImageUrl,
                Explanation = model.Explanation,
                Answers     = answers
            };

            await _questionAdminService.EditQuestionAsync(editQuestionRequest);

            Guid themeId = await _questionAdminService.GetThemeIdByQuestionIdAsync(model.Id);

            return(RedirectToAction("Index", new { themeId }));
        }
Example #4
0
        public async Task EditQuestionAsync(EditQuestionRequest model)
        {
            var question = await UnitOfWork.QuestionRepository.Query(x => x.Id == model.Id)
                           .FirstOrDefaultAsync();

            if (question == null)
            {
                throw new ArgumentNullException();
            }

            question.Title       = model.Title;
            question.Explanation = model.Explanation;

            UnitOfWork.QuestionRepository.Update(question);
            await UnitOfWork.SaveChangesAsync();

            var answers = await _answerAdminService.GetAllAnswersByQuestionIdAsync(question.Id);

            foreach (var answer in model.Answers)
            {
                if (answer.Id == Guid.Empty) // Add new answers
                {
                    AddAnswerRequest addAnswerRequest = new AddAnswerRequest()
                    {
                        Title           = answer.Title,
                        IsCorrectAnswer = answer.IsCorrectAnswer,
                        QuestionId      = question.Id
                    };
                    await _answerAdminService.AddAnswerAsync(addAnswerRequest);
                }
                else // Update answers
                {
                    answers.RemoveAll(x => x.Id == answer.Id);
                    await _answerAdminService.UpdateAnswerAsync(answer);
                }
            }
            foreach (var answer in answers) // Delete answers
            {
                await _answerAdminService.DeleteAnswerAsync(answer.Id);
            }
        }
        public async Task <ActionResult> Edit(Guid id)
        {
            var question = await _questionAdminService.GetQuestionByIdAsync(id);

            EditQuestionRequest editQuestionRequest = question.ToEditQuestionRequest();

            editQuestionRequest.Answers.Shuffle();
            QuestionEditViewModel questionEditViewModel = new QuestionEditViewModel()
            {
                Id              = editQuestionRequest.Id,
                Title           = editQuestionRequest.Title,
                ImageUrl        = editQuestionRequest.ImageUrl,
                ThemeId         = editQuestionRequest.ThemeId,
                DeleteImage     = false,
                Explanation     = editQuestionRequest.Explanation,
                Answers         = editQuestionRequest.Answers,
                MaxCountAnswers = _maxCountAnswers
            };

            ViewBag.Title = $"Edit question \"{question.Title}\"";
            return(View(questionEditViewModel));
        }
Example #6
0
        public EditQuestionResponse EditQuestion(EditQuestionRequest request)
        {
            EditQuestionResponse response = new EditQuestionResponse();

            AuthToken authToken = null;

            try
            {
                Common.Helpers.ValidationHelper.ValidateRequiredField(request.AuthToken, "Auth Token");
                Common.Helpers.ValidationHelper.ValidateRequiredField(request.AntiForgeryToken, "Anti Forgery Token");
                Common.Helpers.ValidationHelper.ValidateRequiredField(request.Name, "Name");

                Common.Helpers.ValidationHelper.ValidateStringLength(request.Name, "Name", Constants.MaxNameLength);
                Common.Helpers.ValidationHelper.ValidateStringLength(request.QuestionBody, "Problem Description", Constants.MaxBlobLength);

                foreach (QuestionTest test in request.Tests)
                {
                    Common.Helpers.ValidationHelper.ValidateRequiredField(test.Name, "Test Name");
                    Common.Helpers.ValidationHelper.ValidateRequiredField(test.Input, "Test Input");
                    Common.Helpers.ValidationHelper.ValidateRequiredField(test.ExpectedOutput, "Test Output");

                    Common.Helpers.ValidationHelper.ValidateStringLength(test.Name, "Test Name", Constants.MaxNameLength);
                    Common.Helpers.ValidationHelper.ValidateStringLength(test.Input, "Test Input", Constants.MaxBlobLength);
                    Common.Helpers.ValidationHelper.ValidateStringLength(test.ExpectedOutput, "Test Output", Constants.MaxBlobLength);
                }

                if (!UserController.ValidateSession(request.AuthToken, out authToken))
                {
                    throw new AuthenticationException("Authentication failed.");
                }

                UserController.ValidateAntiForgeryToken(request.AntiForgeryToken, authToken);

                DbContext context = DataController.CreateDbContext();

                Common.Helpers.ValidationHelper.AssertFalse(context.InterviewQuestions
                                                            .Where(iq => iq.QuestionID == request.QuestionID)
                                                            .Where(iq => iq.Interview.StartedDate.HasValue)
                                                            .Any(),
                                                            "This question cannot be edited as it has been used in existing interviews.");

                if (string.IsNullOrEmpty(request.Name))
                {
                    throw new Common.Exceptions.ValidationException("Please fill in the name field.");
                }

                E::Question question = context.Questions
                                       .Where(q => q.ID == request.QuestionID)
                                       .FirstOrDefault();

                question.Name            = request.Name;
                question.LastUpdatedBy   = authToken.Username;
                question.LastUpdatedDate = DateTime.UtcNow;

                DataController.UploadBlob(question.QuestionBody.ToString(), request.QuestionBody);

                if (question.QuestionTypeID == (short)QuestionType.Standard)
                {
                    var tests = TestsController.FromJson(DataController.DownloadBlob(question.Tests.Value.ToString()));

                    IList <TestsController.Test> newTests = new List <TestsController.Test>();

                    foreach (QuestionTest test in request.Tests)
                    {
                        TestsController.Test newTest = new TestsController.Test();

                        newTest.ID             = Guid.NewGuid();
                        newTest.Name           = test.Name;
                        newTest.Input          = test.Input;
                        newTest.ExpectedOutput = test.ExpectedOutput;

                        newTest.ID = Guid.NewGuid();

                        newTests.Add(newTest);
                    }

                    response.TestIDs = tests.Select(t => t.ID).ToArray();

                    DataController.UploadBlob(question.Tests.Value.ToString(), TestsController.ToJson(newTests.ToArray()));
                }

                context.SaveChanges();
            }
            catch (AuthenticationException ex)
            {
                throw new WebFaultException <string>(ex.Message, System.Net.HttpStatusCode.BadRequest);
            }
            catch (Common.Exceptions.ValidationException ex)
            {
                throw new WebFaultException <string>(ex.Message, System.Net.HttpStatusCode.BadRequest);
            }
            catch (Exception ex)
            {
                ExceptionHelper.Log(ex, authToken == null ? null : authToken.Username);
                throw new WebFaultException <string>("An unknown error has occurred.", System.Net.HttpStatusCode.InternalServerError);
            }

            return(response);
        }
 public Question Map(EditQuestionRequest request)
 {
     throw new System.NotImplementedException();
 }