forked from MDCPS/DamageAssessment_Backend
Update Question and Survey to support multilingual functionnality and Make language optional in URL
This commit is contained in:
@ -1,8 +1,4 @@
|
||||
using DamageAssesment.Api.Questions.Db;
|
||||
using DamageAssesment.Api.Questions.Interfaces;
|
||||
using DamageAssesment.Api.Questions.Models;
|
||||
using DamageAssesment.Api.Questions.Providers;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using DamageAssesment.Api.Questions.Interfaces;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace DamageAssesment.Api.Questions.Controllers
|
||||
@ -20,10 +16,12 @@ namespace DamageAssesment.Api.Questions.Controllers
|
||||
|
||||
}
|
||||
// get all questions
|
||||
[HttpGet("Questions")]
|
||||
public async Task<IActionResult> GetQuestionsAsync()
|
||||
[Route("{Language}/Questions")]
|
||||
[Route("Questions")]
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> GetQuestionsAsync(string? Language)
|
||||
{
|
||||
var result = await this.questionsProvider.GetQuestionsAsync();
|
||||
var result = await this.questionsProvider.GetQuestionsAsync(Language);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
return Ok(result.Questions);
|
||||
@ -31,10 +29,12 @@ namespace DamageAssesment.Api.Questions.Controllers
|
||||
return NoContent();
|
||||
}
|
||||
//Get questions based on question id
|
||||
[HttpGet("Questions/{id}")]
|
||||
public async Task<IActionResult> GetQuestionAsync(int id)
|
||||
[Route("{Language}/Questions/{id}")]
|
||||
[Route("Questions/{id}")]
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> GetQuestionAsync(int id, string? Language)
|
||||
{
|
||||
var result = await this.questionsProvider.GetQuestionAsync(id);
|
||||
var result = await this.questionsProvider.GetQuestionAsync(id,Language);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
return Ok(result.Question);
|
||||
@ -42,10 +42,11 @@ namespace DamageAssesment.Api.Questions.Controllers
|
||||
return NotFound();
|
||||
}
|
||||
//get all questions based on survey id
|
||||
[HttpGet("GetSurveyQuestions/{surveyId}")]
|
||||
[Route("{Language}/GetSurveyQuestions/{surveyId}")]
|
||||
[Route("GetSurveyQuestions/{surveyId}")]
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> GetSurveyQuestions(int surveyId,string? Language)
|
||||
{
|
||||
if (string.IsNullOrEmpty(Language)) Language = "en";
|
||||
var result = await this.questionsProvider.GetSurveyQuestionAsync(surveyId, Language);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
|
@ -4,8 +4,8 @@ namespace DamageAssesment.Api.Questions.Interfaces
|
||||
{
|
||||
public interface IQuestionsProvider : IQuestionTypesProvider
|
||||
{
|
||||
Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> GetQuestionAsync(int Id);
|
||||
Task<(bool IsSuccess, IEnumerable<Models.Question> Questions, string ErrorMessage)> GetQuestionsAsync();
|
||||
Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> GetQuestionAsync(int Id, string Language);
|
||||
Task<(bool IsSuccess, IEnumerable<Models.Question> Questions, string ErrorMessage)> GetQuestionsAsync(string Language);
|
||||
Task<(bool IsSuccess, List<SurveyQuestions> SurveyQuestions, string ErrorMessage)> GetSurveyQuestionAsync(int surveyId,string Language);
|
||||
Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question);
|
||||
Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question);
|
||||
|
@ -31,7 +31,7 @@ namespace DamageAssesment.Api.Questions.Providers
|
||||
|
||||
if (!questionDbContext.QuestionsTranslations.Any())
|
||||
{
|
||||
questionDbContext.QuestionsTranslations.Add(new Db.QuestionsTranslation() {Id=1, QuestionId = 1, QuestionText = "Can You Open ?",Language="en" });
|
||||
questionDbContext.QuestionsTranslations.Add(new Db.QuestionsTranslation() { Id = 1, QuestionId = 1, QuestionText = "Can You Open ?", Language = "en" });
|
||||
questionDbContext.QuestionsTranslations.Add(new Db.QuestionsTranslation() { Id = 2, QuestionId = 1, QuestionText = "Peux-tu ouvrir ?", Language = "fr" });
|
||||
questionDbContext.QuestionsTranslations.Add(new Db.QuestionsTranslation() { Id = 3, QuestionId = 2, QuestionText = "Are the grounds flodded ?", Language = "en" });
|
||||
questionDbContext.QuestionsTranslations.Add(new Db.QuestionsTranslation() { Id = 4, QuestionId = 2, QuestionText = "Les terrains sont-ils inondés ?", Language = "fr" });
|
||||
@ -44,9 +44,9 @@ namespace DamageAssesment.Api.Questions.Providers
|
||||
}
|
||||
if (!questionDbContext.Questions.Any())
|
||||
{
|
||||
questionDbContext.Questions.Add(new Db.Question() { Id = 1, QuestionTypeId = 2, SurveyId = 1, QuestionNumber = 1, IsRequired = true, Comment = false, Key = true, QuestionGroup = "group1",CategoryId=1 });
|
||||
questionDbContext.Questions.Add(new Db.Question() { Id = 2, QuestionTypeId = 1, SurveyId = 1, QuestionNumber = 2, IsRequired = false, Comment = true, Key = false, QuestionGroup = "group1", CategoryId = 1 });
|
||||
questionDbContext.Questions.Add(new Db.Question() { Id = 3, QuestionTypeId = 1, SurveyId = 1, QuestionNumber = 3, IsRequired = true, Comment = false, Key = true, QuestionGroup = "group1", CategoryId = 2 });
|
||||
questionDbContext.Questions.Add(new Db.Question() { Id = 1, QuestionTypeId = 2, SurveyId = 1, QuestionNumber = 1, IsRequired = true, Comment = false, Key = true, QuestionGroup = "group1", CategoryId = 1 });
|
||||
questionDbContext.Questions.Add(new Db.Question() { Id = 2, QuestionTypeId = 1, SurveyId = 1, QuestionNumber = 2, IsRequired = false, Comment = true, Key = false, QuestionGroup = "group1", CategoryId = 1 });
|
||||
questionDbContext.Questions.Add(new Db.Question() { Id = 3, QuestionTypeId = 1, SurveyId = 1, QuestionNumber = 3, IsRequired = true, Comment = false, Key = true, QuestionGroup = "group1", CategoryId = 2 });
|
||||
questionDbContext.SaveChanges();
|
||||
}
|
||||
if (!questionDbContext.QuestionTypes.Any())
|
||||
@ -61,17 +61,17 @@ namespace DamageAssesment.Api.Questions.Providers
|
||||
|
||||
if (!questionDbContext.QuestionCategories.Any())
|
||||
{
|
||||
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 1, CategoryName = "Category 1", CategoryImage="img1" });
|
||||
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 1, CategoryName = "Category 1", CategoryImage = "img1" });
|
||||
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 2, CategoryName = "Category 2", CategoryImage = "img1" });
|
||||
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 3, CategoryName = "Category 3", CategoryImage = "img1" });
|
||||
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 4, CategoryName = "Category 4", CategoryImage = "img1" });
|
||||
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 5, CategoryName = "Category 5", CategoryImage = "img1" });
|
||||
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 5, CategoryName = "Category 5", CategoryImage = "img1" });
|
||||
questionDbContext.SaveChanges();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public async Task<(bool IsSuccess, IEnumerable<Models.Question> Questions, string ErrorMessage)> GetQuestionsAsync()
|
||||
public async Task<(bool IsSuccess, IEnumerable<Models.Question> Questions, string ErrorMessage)> GetQuestionsAsync(string Language)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -82,10 +82,20 @@ namespace DamageAssesment.Api.Questions.Providers
|
||||
|
||||
//logger?.LogInformation($"{question} customer(s) found");
|
||||
var result = mapper.Map<IEnumerable<Db.Question>, IEnumerable<Models.Question>>(questions);
|
||||
|
||||
|
||||
foreach (var question in result)
|
||||
{
|
||||
question.Questions=mapper.Map<List<Db.QuestionsTranslation>,List<Models.QuestionsTranslation>>(
|
||||
questionDbContext.QuestionsTranslations.Where(a=>a.QuestionId==question.Id).ToList());
|
||||
if (string.IsNullOrEmpty(Language))
|
||||
{
|
||||
question.Questions = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == question.Id).ToList());
|
||||
}
|
||||
else
|
||||
{
|
||||
question.Questions = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == question.Id && a.Language == Language).ToList());
|
||||
}
|
||||
}
|
||||
return (true, result, null);
|
||||
}
|
||||
@ -97,7 +107,7 @@ namespace DamageAssesment.Api.Questions.Providers
|
||||
return (false, null, ex.Message);
|
||||
}
|
||||
}
|
||||
public async Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> GetQuestionAsync(int Id)
|
||||
public async Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> GetQuestionAsync(int Id, string Language)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -107,8 +117,17 @@ namespace DamageAssesment.Api.Questions.Providers
|
||||
{
|
||||
logger?.LogInformation($"{question} customer(s) found");
|
||||
var result = mapper.Map<Db.Question, Models.Question>(question);
|
||||
result.Questions = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == result.Id).ToList());
|
||||
|
||||
if (string.IsNullOrEmpty(Language))
|
||||
{
|
||||
result.Questions = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == result.Id).ToList());
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Questions = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == result.Id && a.Language == Language).ToList());
|
||||
}
|
||||
return (true, result, null);
|
||||
}
|
||||
return (false, null, "Not found");
|
||||
@ -119,12 +138,23 @@ namespace DamageAssesment.Api.Questions.Providers
|
||||
return (false, null, ex.Message);
|
||||
}
|
||||
}
|
||||
public List<Models.Question> GetSurveyQuestion(List<Models.Question> questions,string Language)
|
||||
public List<Models.Question> GetSurveyQuestion(List<Models.Question> questions, string Language)
|
||||
{
|
||||
foreach (var item in questions)
|
||||
if (string.IsNullOrEmpty(Language))
|
||||
{
|
||||
item.Questions= mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == item.Id && a.Language== Language).ToList());
|
||||
foreach (var item in questions)
|
||||
{
|
||||
item.Questions = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == item.Id).ToList());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var item in questions)
|
||||
{
|
||||
item.Questions = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == item.Id && a.Language == Language).ToList());
|
||||
}
|
||||
}
|
||||
return questions;
|
||||
}
|
||||
@ -133,12 +163,12 @@ namespace DamageAssesment.Api.Questions.Providers
|
||||
try
|
||||
{
|
||||
logger?.LogInformation("Query Question");
|
||||
var questions = await questionDbContext.Questions.Include("QuestionType").Where(a=>a.SurveyId==SurveyId).AsNoTracking().ToListAsync();
|
||||
var questions = await questionDbContext.Questions.Include("QuestionType").Where(a => a.SurveyId == SurveyId).AsNoTracking().ToListAsync();
|
||||
if (questions != null)
|
||||
{
|
||||
List<SurveyQuestions> surveyQuestionsList = new List<SurveyQuestions>();
|
||||
List<int> CategoryIds=questions.Select(a=>a.CategoryId).Distinct().ToList();
|
||||
var questioncategories = await questionDbContext.QuestionCategories.Where(a =>CategoryIds.Contains(a.Id)).ToListAsync();
|
||||
List<int> CategoryIds = questions.Select(a => a.CategoryId).Distinct().ToList();
|
||||
var questioncategories = await questionDbContext.QuestionCategories.Where(a => CategoryIds.Contains(a.Id)).ToListAsync();
|
||||
//logger?.LogInformation($"{question} customer(s) found");
|
||||
foreach (var item in questioncategories)
|
||||
{
|
||||
@ -169,11 +199,11 @@ namespace DamageAssesment.Api.Questions.Providers
|
||||
logger?.LogInformation("Query 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();
|
||||
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();
|
||||
questionDbContext.SaveChanges();
|
||||
Question.Id = dbquestion.Id;
|
||||
return (true, Question, null);
|
||||
}
|
||||
@ -192,7 +222,7 @@ namespace DamageAssesment.Api.Questions.Providers
|
||||
dbquestion.QuestionTypeId = questionDbContext.QuestionTypes.Where(a => a.TypeText == Question.TypeText).Select(a => a.Id).FirstOrDefault();
|
||||
questionDbContext.Entry(dbquestion).State = EntityState.Modified;
|
||||
var oldquestions = questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == dbquestion.Id).ToList();
|
||||
if(oldquestions!=null)
|
||||
if (oldquestions != null)
|
||||
questionDbContext.QuestionsTranslations.RemoveRange(oldquestions);
|
||||
dbquestiontranslation.ForEach(i => i.QuestionId = dbquestion.Id);
|
||||
questionDbContext.QuestionsTranslations.AddRange(dbquestiontranslation);
|
||||
@ -284,7 +314,7 @@ namespace DamageAssesment.Api.Questions.Providers
|
||||
// Question.QuestionType = GetQuestionType(Question.QuestionTypeId);
|
||||
questionDbContext.QuestionCategories.Add(dbQuestionCategory);
|
||||
questionDbContext.SaveChanges();
|
||||
QuestionCategory.Id=dbQuestionCategory.Id;
|
||||
QuestionCategory.Id = dbQuestionCategory.Id;
|
||||
return (true, QuestionCategory, null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
Reference in New Issue
Block a user