Esempio n. 1
0
 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)));
        }
Esempio n. 3
0
        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));
        }