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