Added new endpoint for creating multiple questions
This commit is contained in:
parent
7f276ed532
commit
b227d32f89
@ -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,16 +335,7 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
logger?.LogInformation("Query Question");
|
logger?.LogInformation("Query Question");
|
||||||
var dbquestion = mapper.Map<Models.Question, Db.Question>(Question);
|
var result = InsertQuestion(Question);
|
||||||
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();
|
|
||||||
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<Db.Question, Models.MultiLanguage>(dbquestion);
|
|
||||||
result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id,""));
|
|
||||||
return (true, result, null);
|
return (true, result, null);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -353,6 +344,38 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
return (false, null, ex.Message);
|
return (false, null, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private Models.MultiLanguage InsertQuestion(Models.Question Question)
|
||||||
|
{
|
||||||
|
var dbquestion = mapper.Map<Models.Question, Db.Question>(Question);
|
||||||
|
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();
|
||||||
|
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<Db.Question, Models.MultiLanguage>(dbquestion);
|
||||||
|
result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, ""));
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
logger?.LogError(ex.ToString());
|
||||||
|
return (false, null, ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
public async Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question)
|
public async Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user