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); }
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 })); }
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)); }
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(); }