private void HandleCurrent(Vocab vocab) { _ui.HandleCurrent(_iterator); if (_validator.Validate(vocab, _ui.GetUserInput(_iterator))) { _calculator.increaseCorrectAnswersByOne(); } else { _calculator.increaseWrongAnswersByOne(); } }
public async Task <HandlerResponse <AddPageAnswerResponse> > Handle(AddPageAnswerRequest request, CancellationToken cancellationToken) { await GetSectionAndPage(request.ApplicationId, request.SectionId, request.PageId); if (Application == null || Section == null || Page == null) { return(new HandlerResponse <AddPageAnswerResponse>(false, $"ApplicationId {request.ApplicationId}, Section {request.SectionId} or PageId {request.PageId} does not exist.")); } if (Page.AllowMultipleAnswers == false) { return(new HandlerResponse <AddPageAnswerResponse>(false, $"ApplicationId {request.ApplicationId}, Section {request.SectionId}, PageId {request.PageId} does not AllowMultipleAnswers")); } if (Page.PageOfAnswers == null) { Page.PageOfAnswers = new List <PageOfAnswers>(); } var validationErrors = _answerValidator.Validate(request.Answers, Page); if (validationErrors.Any()) { return(new HandlerResponse <AddPageAnswerResponse>(new AddPageAnswerResponse(validationErrors))); } Page.PageOfAnswers.Add(new PageOfAnswers() { Id = Guid.NewGuid(), Answers = request.Answers }); Page.Complete = true; MarkFeedbackComplete(Page); Section.QnAData = QnaData; await _dataContext.SaveChangesAsync(CancellationToken.None); return(new HandlerResponse <AddPageAnswerResponse>(new AddPageAnswerResponse(Page))); }
public async Task <HandlerResponse <bool> > Handle(DeleteFileRequest request, CancellationToken cancellationToken) { var section = await _dataContext.ApplicationSections.FirstOrDefaultAsync(sec => sec.Id == request.SectionId && sec.ApplicationId == request.ApplicationId, cancellationToken); if (section == null) { return(new HandlerResponse <bool>(success: false, message: $"Section {request.SectionId} in Application {request.ApplicationId} does not exist.")); } var qnaData = new QnAData(section.QnAData); var page = qnaData.Pages.FirstOrDefault(p => p.PageId == request.PageId); if (page == null) { return(new HandlerResponse <bool>(success: false, message: $"Page {request.PageId} in Application {request.ApplicationId} does not exist.")); } if (page.Questions.All(q => q.Input.Type != "FileUpload")) { return(new HandlerResponse <bool>(success: false, message: $"Page {request.PageId} in Application {request.ApplicationId} does not contain any File Upload questions.")); } if (page.PageOfAnswers == null || !page.PageOfAnswers.Any()) { return(new HandlerResponse <bool>(success: false, message: $"Page {request.PageId} in Application {request.ApplicationId} does not contain any uploads.")); } var container = await ContainerHelpers.GetContainer(_fileStorageConfig.Value.StorageConnectionString, _fileStorageConfig.Value.ContainerName); var directory = ContainerHelpers.GetDirectory(request.ApplicationId, section.SequenceId, request.SectionId, request.PageId, request.QuestionId, container); var answer = page.PageOfAnswers.SingleOrDefault(poa => poa.Answers.Any(a => a.QuestionId == request.QuestionId && a.Value == request.FileName)); if (answer is null) { return(new HandlerResponse <bool>(success: false, message: $"Question {request.QuestionId} on Page {request.PageId} in Application {request.ApplicationId} does not contain an upload named {request.FileName}.")); } page.PageOfAnswers.Remove(answer); if (page.PageOfAnswers.Count == 0) { page.Complete = false; if (page.HasFeedback) { foreach (var feedback in page.Feedback.Where(feedback => feedback.IsNew).Select(feedback => feedback)) { feedback.IsCompleted = false; } } } else { var answers = page.PageOfAnswers?.SelectMany(p => p.Answers); if (answers != null) { var validationErrors = _answerValidator.Validate(answers.ToList(), page); if (validationErrors != null && validationErrors.Any()) { page.Complete = false; } } } section.QnAData = qnaData; await _dataContext.SaveChangesAsync(cancellationToken); var blobRef = directory.GetBlobReference(request.FileName); await blobRef.DeleteAsync(cancellationToken); await RemoveApplicationDataForThisQuestion(request.ApplicationId, request.QuestionId, page); return(new HandlerResponse <bool>(true)); }