From 9b88029a09b424f82a2c8bd1d9094f09ffc465c6 Mon Sep 17 00:00:00 2001
From: Vijay Uppu <913468@dadeschools.net>
Date: Tue, 14 Nov 2023 15:36:33 -0500
Subject: [PATCH] Added new endpoint for creating multiple questions
---
.../Controllers/QuestionsController.cs | 21 +++++++++
.../Interfaces/IQuestionsProvider.cs | 1 +
.../Providers/QuestionsProvider.cs | 43 ++++++++++++++-----
.../MockData.cs | 16 ++++++-
.../QuestionsServiceTest.cs | 28 +++++++++++-
5 files changed, 96 insertions(+), 13 deletions(-)
diff --git a/DamageAssesmentApi/DamageAssesment.Api.Questions/Controllers/QuestionsController.cs b/DamageAssesmentApi/DamageAssesment.Api.Questions/Controllers/QuestionsController.cs
index 1171b0d..14df48f 100644
--- a/DamageAssesmentApi/DamageAssesment.Api.Questions/Controllers/QuestionsController.cs
+++ b/DamageAssesmentApi/DamageAssesment.Api.Questions/Controllers/QuestionsController.cs
@@ -90,6 +90,27 @@ namespace DamageAssesment.Api.Questions.Controllers
return CreatedAtRoute("DefaultApi", new { id = question.Id }, question);
}
///
+ /// POST request for creating a multiple question (multilingual).
+ ///
+ [Authorize(Roles = "admin")]
+ [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 0122af7..e864294 100644
--- a/DamageAssesmentApi/DamageAssesment.Api.Questions/Providers/QuestionsProvider.cs
+++ b/DamageAssesmentApi/DamageAssesment.Api.Questions/Providers/QuestionsProvider.cs
@@ -334,16 +334,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)
@@ -352,6 +343,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..94eb466 100644
--- a/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/MockData.cs
+++ b/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/MockData.cs
@@ -75,8 +75,20 @@ 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..dff4dfa 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()
@@ -329,6 +356,5 @@ namespace DamageAssesment.Api.Questions.Test
Assert.Equal(404, result.StatusCode);
}
-
}
}
\ No newline at end of file