public IActionResult SavetResult(int interviewId, int questionId, [FromBody] int answerId) { var currentInterview = _ctx.Interviews.Include(i => i.Results).FirstOrDefault(i => i.Id == interviewId); var currentQuestion = _ctx.Questions.Include(q => q.Survey).Include(q => q.Answers).FirstOrDefault(q => q.Id == questionId); var pickedAnswer = _ctx.Answers.Include(a => a.Question).FirstOrDefault(a => a.Id == answerId); // if the question in that interview has already been answered then update it if (currentInterview.Results.Select(r => r.Answer).Intersect(currentQuestion.Answers).Any()) { var intersection = currentInterview.Results .Select(r => r.Answer) .Intersect(currentQuestion.Answers) .First(); var resultToUpdate = currentInterview.Results .FirstOrDefault(r => r.Answer == intersection); resultToUpdate.Answer = pickedAnswer; } else { var newResult = new Result { Answer = pickedAnswer }; currentInterview.Results.Add(newResult); } _ctx.SaveChanges(); var nextQuestionNumber = (int)currentQuestion.Number; nextQuestionNumber++; // if currentQuestion is last in the survey then return 204 if (nextQuestionNumber > _ctx.Surveys.FirstOrDefault(s => s == currentQuestion.Survey).Questions.Count()) { return(NoContent()); } return(Ok(_ctx.Questions.FirstOrDefault(q => q.Number == nextQuestionNumber).Id)); }
public static void EnsureSeedDataForContext(this NanoSurveyContext context) { if (!context.Surveys.Any()) { var answers1 = new List <Answer> { new Answer { Text = "Moscow" }, new Answer { Text = "Moscow region" }, new Answer { Text = "St. Petersburg" }, new Answer { Text = "Other" } }; var answers2 = new List <Answer> { new Answer { Text = "Less than 30 minutes." }, new Answer { Text = "From 30 to 60 minutes." }, new Answer { Text = "From 1 to 2 hours." }, new Answer { Text = "More than 2 hours." } }; var answers3 = new List <Answer> { new Answer { Text = "Buses, trams, etc." }, new Answer { Text = "Underground" }, new Answer { Text = "Taxi" }, new Answer { Text = "Personal car" } }; var surveys = new List <Survey> { new Survey { Description = "A simple work interview.", Questions = new List <Question> { new Question { Number = 1, Text = "Where your place of work is located?", Answers = answers1 }, new Question { Number = 2, Text = "How long does it take you to get to your place of work?", Answers = answers2 }, new Question { Number = 3, Text = "Which mean of transport do you usually use?", Answers = answers3 } } } }; var someSurvey = surveys.First(); var rnd = new Random(); var interviews = new List <Interview> { new Interview { FirstName = "Bob", LastName = "Dou", Date = DateTime.Now, Survey = someSurvey, Results = new List <Result> { new Result { Answer = answers1[rnd.Next(answers1.Count - 1)] }, new Result { Answer = answers2[rnd.Next(answers2.Count - 1)] }, new Result { Answer = answers3[rnd.Next(answers3.Count - 1)] } } }, new Interview { FirstName = "John", LastName = "Barrel", Date = DateTime.Now.AddHours(-3), Survey = someSurvey, Results = new List <Result> { new Result { Answer = answers1[rnd.Next(answers1.Count - 1)] }, new Result { Answer = answers2[rnd.Next(answers2.Count - 1)] }, new Result { Answer = answers3[rnd.Next(answers3.Count - 1)] } } }, new Interview { FirstName = "Ann", LastName = "Hepo", Date = DateTime.Now.AddHours(-2), Survey = someSurvey, Results = new List <Result> { new Result { Answer = answers1[rnd.Next(answers1.Count - 1)] }, new Result { Answer = answers2[rnd.Next(answers2.Count - 1)] }, new Result { Answer = answers3[rnd.Next(answers3.Count - 1)] } } }, }; context.Surveys.AddRange(surveys); context.Interviews.AddRange(interviews); context.SaveChanges(); } }