forked from MDCPS/DamageAssessment_Backend
		
	Added new endpoint for creating multiple questions
This commit is contained in:
		| @ -89,6 +89,26 @@ namespace DamageAssesment.Api.Questions.Controllers | |||||||
|             return CreatedAtRoute("DefaultApi", new { id = question.Id }, question); |             return CreatedAtRoute("DefaultApi", new { id = question.Id }, question); | ||||||
|         } |         } | ||||||
|         /// <summary> |         /// <summary> | ||||||
|  |         /// POST request for creating a multiple question (multilingual). | ||||||
|  |         /// </summary> | ||||||
|  |         [HttpPost("questions/multiple")] | ||||||
|  |         public async Task<IActionResult> CreateQuestions(List<Models.Question> 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); | ||||||
|  |         } | ||||||
|  |         /// <summary> | ||||||
|         /// POST request for creating a new question (multilingual). |         /// POST request for creating a new question (multilingual). | ||||||
|         /// </summary> |         /// </summary> | ||||||
|  |  | ||||||
|  | |||||||
| @ -8,6 +8,7 @@ namespace DamageAssesment.Api.Questions.Interfaces | |||||||
|         Task<(bool IsSuccess, IEnumerable<Models.MultiLanguage> Questions, string ErrorMessage)> GetQuestionsAsync(string language); |         Task<(bool IsSuccess, IEnumerable<Models.MultiLanguage> Questions, string ErrorMessage)> GetQuestionsAsync(string language); | ||||||
|         Task<(bool IsSuccess, List<SurveyQuestions> SurveyQuestions, string ErrorMessage)> GetSurveyQuestionAsync(int surveyId,string language); |         Task<(bool IsSuccess, List<SurveyQuestions> SurveyQuestions, string ErrorMessage)> GetSurveyQuestionAsync(int surveyId,string language); | ||||||
|         Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question); |         Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question); | ||||||
|  |         Task<(bool IsSuccess, IEnumerable<Models.MultiLanguage> Question, string ErrorMessage)> PostQuestionsAsync(List<Models.Question> Questions); | ||||||
|         Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question); |         Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question); | ||||||
|         Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> DeleteQuestionAsync(int id); |         Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> DeleteQuestionAsync(int id); | ||||||
|  |  | ||||||
|  | |||||||
| @ -335,6 +335,17 @@ namespace DamageAssesment.Api.Questions.Providers | |||||||
|             try |             try | ||||||
|             { |             { | ||||||
|                 logger?.LogInformation("Query Question"); |                 logger?.LogInformation("Query Question"); | ||||||
|  |                 var result = InsertQuestion(Question); | ||||||
|  |                 return (true, result, null); | ||||||
|  |             } | ||||||
|  |             catch (Exception ex) | ||||||
|  |             { | ||||||
|  |                 logger?.LogError(ex.ToString()); | ||||||
|  |                 return (false, null, ex.Message); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         private Models.MultiLanguage InsertQuestion(Models.Question Question) | ||||||
|  |         { | ||||||
|             var dbquestion = mapper.Map<Models.Question, Db.Question>(Question); |             var dbquestion = mapper.Map<Models.Question, Db.Question>(Question); | ||||||
|             var dbquestiontranslation = mapper.Map<List<Models.QuestionsTranslation>, List<Db.QuestionsTranslation>>(Question.Questions); |             var dbquestiontranslation = mapper.Map<List<Models.QuestionsTranslation>, List<Db.QuestionsTranslation>>(Question.Questions); | ||||||
|             dbquestion.QuestionTypeId = questionDbContext.QuestionTypes.Where(a => a.TypeText == Question.TypeText).Select(a => a.Id).FirstOrDefault(); |             dbquestion.QuestionTypeId = questionDbContext.QuestionTypes.Where(a => a.TypeText == Question.TypeText).Select(a => a.Id).FirstOrDefault(); | ||||||
| @ -345,7 +356,19 @@ namespace DamageAssesment.Api.Questions.Providers | |||||||
|             Question.Id = dbquestion.Id; |             Question.Id = dbquestion.Id; | ||||||
|             var result = mapper.Map<Db.Question, Models.MultiLanguage>(dbquestion); |             var result = mapper.Map<Db.Question, Models.MultiLanguage>(dbquestion); | ||||||
|             result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, "")); |             result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, "")); | ||||||
|                 return (true, result, null); |             return result; | ||||||
|  |         } | ||||||
|  |         public async Task<(bool IsSuccess, IEnumerable<Models.MultiLanguage> Question, string ErrorMessage)> PostQuestionsAsync(List<Models.Question> Questions) | ||||||
|  |         { | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                 List<Models.MultiLanguage> results = new List<MultiLanguage>(); | ||||||
|  |                logger?.LogInformation("Query Question"); | ||||||
|  |                 foreach (Models.Question Question in Questions) | ||||||
|  |                 { | ||||||
|  |                     results.Add(InsertQuestion(Question)); | ||||||
|  |                 } | ||||||
|  |                 return (true, results, null); | ||||||
|             } |             } | ||||||
|             catch (Exception ex) |             catch (Exception ex) | ||||||
|             { |             { | ||||||
|  | |||||||
| @ -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}; |             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<List<Questions.Models.Question>> getInputQuestionsData() | ||||||
|     |         { | ||||||
|  |             Models.QuestionsTranslation QuestionsTranslation = new Models.QuestionsTranslation() | ||||||
|  |             { | ||||||
|  |                 Language = "en", | ||||||
|  |                 QuestionText = "Sample question" | ||||||
|  |             }; | ||||||
|  |             List<Models.QuestionsTranslation> QuestionsTranslations = new List<Models.QuestionsTranslation>(); | ||||||
|  |             List<Models.Question> Questions = new List<Models.Question>(); | ||||||
|  |             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; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -110,6 +110,33 @@ namespace DamageAssesment.Api.Questions.Test | |||||||
|  |  | ||||||
|             Assert.Equal(400, result.StatusCode); |             Assert.Equal(400, result.StatusCode); | ||||||
|         } |         } | ||||||
|  |         [Fact(DisplayName = "Post Questions - Ok case")] | ||||||
|  |         public async Task PostQuestionsAsync_ShouldReturnStatusCode200() | ||||||
|  |         { | ||||||
|  |             var mockQuestionService = new Mock<IQuestionsProvider>(); | ||||||
|  |             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<IQuestionsProvider>(); | ||||||
|  |             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")] |         [Fact(DisplayName = "Put Question - Ok case")] | ||||||
|         public async Task PutQuestionAsync_ShouldReturnStatusCode200() |         public async Task PutQuestionAsync_ShouldReturnStatusCode200() | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user