From 2c7d4e6138a83b314731be052a62db336226ece7 Mon Sep 17 00:00:00 2001
From: Vijay Uppu <913468@dadeschools.net>
Date: Tue, 14 Nov 2023 15:14:25 -0500
Subject: [PATCH] Added new endpoint for creating multiple questions
---
.../Controllers/QuestionsController.cs | 20 +++++++++
.../Interfaces/IQuestionsProvider.cs | 1 +
.../Providers/QuestionsProvider.cs | 43 ++++++++++++++-----
.../MockData.cs | 17 ++++++--
.../QuestionsServiceTest.cs | 27 ++++++++++++
5 files changed, 95 insertions(+), 13 deletions(-)
diff --git a/DamageAssesmentApi/DamageAssesment.Api.Questions/Controllers/QuestionsController.cs b/DamageAssesmentApi/DamageAssesment.Api.Questions/Controllers/QuestionsController.cs
index 7dec941..c73ff8a 100644
--- a/DamageAssesmentApi/DamageAssesment.Api.Questions/Controllers/QuestionsController.cs
+++ b/DamageAssesmentApi/DamageAssesment.Api.Questions/Controllers/QuestionsController.cs
@@ -89,6 +89,26 @@ namespace DamageAssesment.Api.Questions.Controllers
return CreatedAtRoute("DefaultApi", new { id = question.Id }, question);
}
///
+ /// POST request for creating a multiple question (multilingual).
+ ///
+ [HttpPost("questions/multiple")]
+ public async Task CreateQuestions(List questions)
+ {
+ if (questions != null)
+ {
+ var result = await this.questionsProvider.PostQuestionsAsync(questions);
+ if (result.IsSuccess)
+ {
+ return Ok(result.Question);
+ }
+ if (result.ErrorMessage == "Not Found")
+ return NotFound(result.ErrorMessage);
+
+ return BadRequest(result.ErrorMessage);
+ }
+ return CreatedAtRoute("DefaultApi",questions);
+ }
+ ///
/// POST request for creating a new question (multilingual).
///
diff --git a/DamageAssesmentApi/DamageAssesment.Api.Questions/Interfaces/IQuestionsProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Questions/Interfaces/IQuestionsProvider.cs
index f8e13c8..4fcea32 100644
--- a/DamageAssesmentApi/DamageAssesment.Api.Questions/Interfaces/IQuestionsProvider.cs
+++ b/DamageAssesmentApi/DamageAssesment.Api.Questions/Interfaces/IQuestionsProvider.cs
@@ -8,6 +8,7 @@ namespace DamageAssesment.Api.Questions.Interfaces
Task<(bool IsSuccess, IEnumerable Questions, string ErrorMessage)> GetQuestionsAsync(string language);
Task<(bool IsSuccess, List SurveyQuestions, string ErrorMessage)> GetSurveyQuestionAsync(int surveyId,string language);
Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question);
+ Task<(bool IsSuccess, IEnumerable Question, string ErrorMessage)> PostQuestionsAsync(List Questions);
Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question);
Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> DeleteQuestionAsync(int id);
diff --git a/DamageAssesmentApi/DamageAssesment.Api.Questions/Providers/QuestionsProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Questions/Providers/QuestionsProvider.cs
index 92da2b1..57e01fe 100644
--- a/DamageAssesmentApi/DamageAssesment.Api.Questions/Providers/QuestionsProvider.cs
+++ b/DamageAssesmentApi/DamageAssesment.Api.Questions/Providers/QuestionsProvider.cs
@@ -239,16 +239,7 @@ namespace DamageAssesment.Api.Questions.Providers
try
{
logger?.LogInformation("Query Question");
- var dbquestion = mapper.Map(Question);
- var dbquestiontranslation = mapper.Map, List>(Question.Questions);
- dbquestion.QuestionTypeId = questionDbContext.QuestionTypes.Where(a => a.TypeText == Question.TypeText).Select(a => a.Id).FirstOrDefault();
- questionDbContext.Questions.Add(dbquestion);
- dbquestiontranslation.ForEach(i => i.QuestionId = dbquestion.Id);
- questionDbContext.QuestionsTranslations.AddRange(dbquestiontranslation);
- questionDbContext.SaveChanges();
- Question.Id = dbquestion.Id;
- var result = mapper.Map(dbquestion);
- result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id,""));
+ var result = InsertQuestion(Question);
return (true, result, null);
}
catch (Exception ex)
@@ -257,6 +248,38 @@ namespace DamageAssesment.Api.Questions.Providers
return (false, null, ex.Message);
}
}
+ private Models.MultiLanguage InsertQuestion(Models.Question Question)
+ {
+ var dbquestion = mapper.Map(Question);
+ var dbquestiontranslation = mapper.Map, List>(Question.Questions);
+ dbquestion.QuestionTypeId = questionDbContext.QuestionTypes.Where(a => a.TypeText == Question.TypeText).Select(a => a.Id).FirstOrDefault();
+ questionDbContext.Questions.Add(dbquestion);
+ dbquestiontranslation.ForEach(i => i.QuestionId = dbquestion.Id);
+ questionDbContext.QuestionsTranslations.AddRange(dbquestiontranslation);
+ questionDbContext.SaveChanges();
+ Question.Id = dbquestion.Id;
+ var result = mapper.Map(dbquestion);
+ result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, ""));
+ return result;
+ }
+ public async Task<(bool IsSuccess, IEnumerable Question, string ErrorMessage)> PostQuestionsAsync(List Questions)
+ {
+ try
+ {
+ List results = new List();
+ logger?.LogInformation("Query Question");
+ foreach (Models.Question Question in Questions)
+ {
+ results.Add(InsertQuestion(Question));
+ }
+ return (true, results, null);
+ }
+ catch (Exception ex)
+ {
+ logger?.LogError(ex.ToString());
+ return (false, null, ex.Message);
+ }
+ }
public async Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question)
{
try
diff --git a/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/MockData.cs b/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/MockData.cs
index 8b13b70..df621f5 100644
--- a/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/MockData.cs
+++ b/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/MockData.cs
@@ -75,8 +75,19 @@ namespace DamageAssesment.Api.Questions.Test
return new Questions.Models.Question { Id = 1, Questions=QuestionsTranslations, TypeText = "Text 1", SurveyId = 1, QuestionNumber = 1, IsRequired = true, Comment = false, Key = true, CategoryId=1};
}
-
-
-
+ public static async Task> getInputQuestionsData()
+ {
+ Models.QuestionsTranslation QuestionsTranslation = new Models.QuestionsTranslation()
+ {
+ Language = "en",
+ QuestionText = "Sample question"
+ };
+ List QuestionsTranslations = new List();
+ List Questions = new List();
+ QuestionsTranslations.Add(QuestionsTranslation);
+ Questions.Models.Question question = new Questions.Models.Question() { Id = 1, Questions = QuestionsTranslations, TypeText = "Text 1", SurveyId = 1, QuestionNumber = 1, IsRequired = true, Comment = false, Key = true, CategoryId = 1 };
+ Questions.Add(question);
+ return Questions;
+ }
}
}
diff --git a/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/QuestionsServiceTest.cs b/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/QuestionsServiceTest.cs
index bda9db2..b44e479 100644
--- a/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/QuestionsServiceTest.cs
+++ b/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/QuestionsServiceTest.cs
@@ -110,6 +110,33 @@ namespace DamageAssesment.Api.Questions.Test
Assert.Equal(400, result.StatusCode);
}
+ [Fact(DisplayName = "Post Questions - Ok case")]
+ public async Task PostQuestionsAsync_ShouldReturnStatusCode200()
+ {
+ var mockQuestionService = new Mock();
+ var mockResponse = await MockData.getOkResponse();
+ var mockInputQuestion = await MockData.getInputQuestionsData();
+ mockQuestionService.Setup(service => service.PostQuestionsAsync(mockInputQuestion)).ReturnsAsync(mockResponse);
+
+ var QuestionProvider = new QuestionsController(mockQuestionService.Object);
+ var result = (OkObjectResult)await QuestionProvider.CreateQuestions(mockInputQuestion);
+
+ Assert.Equal(200, result.StatusCode);
+ }
+
+ [Fact(DisplayName = "Post Questions - BadRequest case")]
+ public async Task PostQuestionsAsync_ShouldReturnStatusCode400()
+ {
+ var mockQuestionService = new Mock();
+ var mockInputQuestion = await MockData.getInputQuestionData();
+ var mockResponse = await MockData.getBadRequestResponse();
+ mockQuestionService.Setup(service => service.UpdateQuestionAsync(mockInputQuestion)).ReturnsAsync(mockResponse);
+
+ var QuestionProvider = new QuestionsController(mockQuestionService.Object);
+ var result = (BadRequestObjectResult)await QuestionProvider.UpdateQuestion(mockInputQuestion);
+
+ Assert.Equal(400, result.StatusCode);
+ }
[Fact(DisplayName = "Put Question - Ok case")]
public async Task PutQuestionAsync_ShouldReturnStatusCode200()