Example #1
0
        public async Task <IActionResult> SubmitPoll(PollFormResult formResult)
        {
            var validProcessResult = _pollManager.ValidProcessPollForm(formResult);

            if (validProcessResult.IsValid)
            {
                await _pollManager.AddPollFormResult(validProcessResult);

                return(Json("Ok"));
            }
            else
            {
                return(new JsonResult("Bad data")
                {
                    StatusCode = 400
                });
            }
        }
Example #2
0
        /// <summary>
        /// Check is valid form and process her.
        /// </summary>
        /// <param name="pollFormResult"></param>
        /// <returns></returns>
        public IPollFormValidProcessResult ValidProcessPollForm(PollFormResult pollFormResult)
        {
            var result = new PollFormValidProcessResult();

            if (pollFormResult.MultiAnswer == null || pollFormResult.SingleAnswer == null)
            {
                return(result);
            }

            var questions = _dbContext.Questions.ToArray();
            var answers   = _dbContext.Answers.ToArray();

            //Add to result questions with single answer
            foreach (var questionIdAnswerId in pollFormResult.SingleAnswer)
            {
                var question = questions.FirstOrDefault((q) => q.Id == questionIdAnswerId.Key);
                var answer   = answers.FirstOrDefault(a => a.Id == questionIdAnswerId.Value);

                // Not found question or answer in db.
                if (question == null || answer == null)
                {
                    return(result);
                }

                result.SelectedSingleAnswer.Add(question, new UserAnswerSelectData()
                {
                    Answer = answer
                });
            }

            //Add to result questions with multiple answers
            foreach (var questionIdAnswerIds in pollFormResult.MultiAnswer)
            {
                //Search by question, by question id.
                var question = questions.FirstOrDefault(q => q.Id == questionIdAnswerIds.Key);

                //There no question with this id in db.
                if (question == null)
                {
                    return(result);
                }

                var answersToAdd = answers.Where(answer => questionIdAnswerIds.Value.Contains(answer.Id)).ToArray();

                //There no answer with this id in db.
                if (answersToAdd.Length == 0 || questionIdAnswerIds.Value.Length != answersToAdd.Length)
                {
                    return(result);
                }

                var answersData = answersToAdd.Select((answer) =>
                                                      new UserAnswerSelectData()
                {
                    Answer = answer
                }
                                                      ).ToArray();

                result.SelectedMultipleAnswer.Add(question, answersData);
            }

            result.IsValid = true;

            return(result);
        }