public IHttpActionResult PostSurveyAnswers([FromBody] AnswersAndBundleExtrasDTO abe) { if (!ModelState.IsValid) { Debug.WriteLine("ModelState not valid!"); return(BadRequest(ModelState)); } List <AnswerDTO> answerDtos = abe.AnswerDtos.ToList(); int answererTypeId = abe.AnswerBundleExtrasDto.AnswererTypeID; string textFb = abe.AnswerBundleExtrasDto.TextFeedback; Debug.WriteLine("answerDtos<AnswerDTO>.Count: " + answerDtos.Count); Debug.WriteLine("answererTypeId: " + answererTypeId); Debug.WriteLine("textFb: " + textFb); if (answerDtos.Count == 0) { return(BadRequest()); } var rawSortedDtos = from sa in answerDtos orderby sa.QuestionSetIndex, sa.ChosenQuestionIndex select sa; List <AnswerDTO> cleanSortedDtos = rawSortedDtos.ToList(); for (int i = 0; i < cleanSortedDtos.Count; i++) { Debug.WriteLine("cleanSortedDtos[" + i + "].Value: " + cleanSortedDtos[i].Value); Debug.WriteLine("cleanSortedDtos[" + i + "].QuestionSetIndex: " + cleanSortedDtos[i].QuestionSetIndex); Debug.WriteLine("cleanSortedDtos[" + i + "].ChosenQuestionIndex: " + cleanSortedDtos[i].ChosenQuestionIndex); Debug.WriteLine("cleanSortedDtos[" + i + "].QuestionID: " + cleanSortedDtos[i].QuestionID); Debug.WriteLine("cleanSortedDtos[" + i + "].QuestionMethodID: " + cleanSortedDtos[i].QuestionMethodID); } // CREATE AnswerBundle bundle AnswerBundle bundle = new AnswerBundle(); bundle.Date = DateTime.Now; bundle.AnswererTypeID = answererTypeId; bundle.TextFeedback = textFb; // NEW: CHECK IF WORKS // TODO: TRANSACTION MANAGEMENT db.AnswerBundles.Add(bundle); db.SaveChanges(); // ADD AnswerSets TO bundle // int currentQmId = -2; int currentSetId = -2; int currentSetIndex = -2; foreach (AnswerDTO aDto in cleanSortedDtos) { // IF NEW QuestionMethodID IN answerDtos, // NEW AnswerSet IS CREATED if (aDto.QuestionSetIndex != currentSetIndex) { // currentQmId = aDto.QuestionMethodID; currentSetIndex = aDto.QuestionSetIndex; AnswerSet newSet = new AnswerSet(); newSet.QuestionMethodID = aDto.QuestionMethodID; newSet.AnswerBundleID = bundle.AnswerBundleID; db.AnswerSets.Add(newSet); db.SaveChanges(); currentSetId = newSet.AnswerSetID; } db.Answers.Add(new Answer { Value = aDto.Value, QuestionID = aDto.QuestionID, AnswerSetID = currentSetId }); db.SaveChanges(); Debug.WriteLine("currentSetId:" + currentSetId); Debug.WriteLine("currentSetIndex:" + currentSetIndex); } Debug.WriteLine("answerBundleId: " + bundle.AnswerBundleID); return(Ok()); }
public IHttpActionResult PostSurveyAnswers([FromBody] AnswersAndBundleExtrasDTO abe) { // Model state check. If State is not valid, BadRequest will be returned with ModelState. if (!ModelState.IsValid) { Debug.WriteLine("ModelState not valid!"); return(BadRequest(ModelState)); } // Unpacking abe-object List <AnswerDTO> answerDtos = abe.AnswerDtos.ToList(); int answererTypeId = abe.AnswerBundleExtrasDto.AnswererTypeID; string textFb = abe.AnswerBundleExtrasDto.TextFeedback; Debug.WriteLine("answerDtos<AnswerDTO>.Count: " + answerDtos.Count); Debug.WriteLine("answererTypeId: " + answererTypeId); Debug.WriteLine("textFb: " + textFb); // - If answerDtos is empty, BadRequest will be returned. if (answerDtos.Count == 0) { return(BadRequest()); } // - Sorting answerDtos by QuestionSetIndex and ChosenQuestionIndex (in this order) var rawSortedDtos = from sa in answerDtos orderby sa.QuestionSetIndex, sa.ChosenQuestionIndex select sa; // - Converting IOrderedEnumerable as list List <AnswerDTO> cleanSortedDtos = rawSortedDtos.ToList(); // Creating AnswerBundle bundle AnswerBundle bundle = new AnswerBundle(); // Adding variables to bundle bundle.Date = DateTime.Now; bundle.AnswererTypeID = answererTypeId; bundle.TextFeedback = textFb; // Adding bundle is to the database db.AnswerBundles.Add(bundle); // - Saving database changes // TODO: TRANSACTION MANAGEMENT db.SaveChanges(); // - Creating helper variables int currentSetId = -2; int currentSetIndex = -2; foreach (AnswerDTO aDto in cleanSortedDtos) { // - If new QuestionMethodID in answerDtos, // new AnswerSet is created and saved to the database if (aDto.QuestionSetIndex != currentSetIndex) { // currentQmId = aDto.QuestionMethodID; currentSetIndex = aDto.QuestionSetIndex; AnswerSet newSet = new AnswerSet(); newSet.QuestionMethodID = aDto.QuestionMethodID; newSet.AnswerBundleID = bundle.AnswerBundleID; db.AnswerSets.Add(newSet); db.SaveChanges(); currentSetId = newSet.AnswerSetID; } db.Answers.Add(new Answer { Value = aDto.Value, QuestionID = aDto.QuestionID, AnswerSetID = currentSetId }); db.SaveChanges(); } return(Ok()); }