forked from MDCPS/DamageAssessment_Backend
Multi language dynamic object changes
This commit is contained in:
@ -3,7 +3,6 @@ using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace DamageAssesment.Api.Surveys.Controllers
|
||||
{
|
||||
[Route("api")]
|
||||
[ApiController]
|
||||
public class SurveysController : ControllerBase
|
||||
{
|
||||
@ -18,11 +17,11 @@ namespace DamageAssesment.Api.Surveys.Controllers
|
||||
/// </summary>
|
||||
|
||||
[Route("Surveys")]
|
||||
[Route("{Language}/Surveys")]
|
||||
[Route("Surveys/{language:alpha}")]
|
||||
[HttpGet]
|
||||
public async Task<ActionResult> GetSurveysAsync(string? Language)
|
||||
public async Task<ActionResult> GetSurveysAsync(string? language)
|
||||
{
|
||||
var result = await this.surveyProvider.GetSurveysAsync(Language);
|
||||
var result = await this.surveyProvider.GetSurveysAsync(language);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
return Ok(result.Surveys);
|
||||
@ -33,12 +32,12 @@ namespace DamageAssesment.Api.Surveys.Controllers
|
||||
/// <summary>
|
||||
/// GET request for retrieving surveys by ID.
|
||||
/// </summary>
|
||||
[Route("Surveys/{Id}")]
|
||||
[Route("{Language}/Surveys/{Id}")]
|
||||
[Route("Surveys/{id:int}")]
|
||||
[Route("Surveys/{id:int}/{language:alpha}")]
|
||||
[HttpGet]
|
||||
public async Task<ActionResult> GetSurveysAsync(int Id, string? Language)
|
||||
public async Task<ActionResult> GetSurveysAsync(int id, string? language)
|
||||
{
|
||||
var result = await this.surveyProvider.GetSurveysAsync(Id, Language);
|
||||
var result = await this.surveyProvider.GetSurveysAsync(id, language);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
return Ok(result.Surveys);
|
||||
@ -64,10 +63,10 @@ namespace DamageAssesment.Api.Surveys.Controllers
|
||||
/// </summary>
|
||||
|
||||
|
||||
[HttpPut("Surveys/{Id}")]
|
||||
public async Task<ActionResult> PutSurveysAsync(int Id, Models.Survey survey)
|
||||
[HttpPut("Surveys/{id}")]
|
||||
public async Task<ActionResult> PutSurveysAsync(int id, Models.Survey survey)
|
||||
{
|
||||
var result = await this.surveyProvider.PutSurveyAsync(Id, survey);
|
||||
var result = await this.surveyProvider.PutSurveyAsync(id, survey);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
return Ok(result.Survey);
|
||||
@ -81,10 +80,10 @@ namespace DamageAssesment.Api.Surveys.Controllers
|
||||
/// <summary>
|
||||
/// DELETE request for deleting a survey by ID.
|
||||
/// </summary>
|
||||
[HttpDelete("Surveys/{Id}")]
|
||||
public async Task<ActionResult> DeleteSurveysAsync(int Id)
|
||||
[HttpDelete("Surveys/{id}")]
|
||||
public async Task<ActionResult> DeleteSurveysAsync(int id)
|
||||
{
|
||||
var result = await this.surveyProvider.DeleteSurveyAsync(Id);
|
||||
var result = await this.surveyProvider.DeleteSurveyAsync(id);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
return Ok(result.Survey);
|
||||
|
@ -2,11 +2,11 @@
|
||||
{
|
||||
public interface ISurveyProvider
|
||||
{
|
||||
Task<(bool IsSuccess, IEnumerable< Models.Survey> Surveys, string ErrorMessage)> GetSurveysAsync(string Language);
|
||||
Task<(bool IsSuccess, Models.Survey Surveys, string ErrorMessage)> GetSurveysAsync(int Id, string Language);
|
||||
Task<(bool IsSuccess, Models.Survey Survey, string ErrorMessage)> PostSurveyAsync(Models.Survey Survey);
|
||||
Task<(bool IsSuccess, Models.Survey Survey, string ErrorMessage)> PutSurveyAsync(int Id,Models.Survey Survey);
|
||||
Task<(bool IsSuccess, Models.Survey Survey, string ErrorMessage)> DeleteSurveyAsync(int Id);
|
||||
Task<(bool IsSuccess, IEnumerable< Models.MultiLanSurvey> Surveys, string ErrorMessage)> GetSurveysAsync(string language);
|
||||
Task<(bool IsSuccess, Models.MultiLanSurvey Surveys, string ErrorMessage)> GetSurveysAsync(int id, string language);
|
||||
Task<(bool IsSuccess, Models.MultiLanSurvey Survey, string ErrorMessage)> PostSurveyAsync(Models.Survey Survey);
|
||||
Task<(bool IsSuccess, Models.MultiLanSurvey Survey, string ErrorMessage)> PutSurveyAsync(int id, Models.Survey Survey);
|
||||
Task<(bool IsSuccess, Models.MultiLanSurvey Survey, string ErrorMessage)> DeleteSurveyAsync(int id);
|
||||
void seedData();
|
||||
|
||||
}
|
||||
|
@ -2,13 +2,21 @@
|
||||
|
||||
namespace DamageAssesment.Api.Surveys.Models
|
||||
{
|
||||
public class Survey
|
||||
public class MultiLanSurvey : BaseSurvey
|
||||
{
|
||||
public object Titles { get; set; }
|
||||
}
|
||||
public class Survey : BaseSurvey
|
||||
{
|
||||
public IEnumerable<SurveyTranslation> Titles { get; set; }
|
||||
|
||||
}
|
||||
public class BaseSurvey
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public bool IsEnabled { get; set; }
|
||||
public DateTime StartDate { get; set; }
|
||||
public DateTime EndDate { get; set; }
|
||||
public DateTime CreatedDate { get; set; }
|
||||
public IEnumerable<SurveyTranslation> Titles { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -3,8 +3,10 @@
|
||||
public class SurveysProfile:AutoMapper.Profile
|
||||
{
|
||||
public SurveysProfile() {
|
||||
CreateMap<Db.Survey, Models.Survey>();
|
||||
CreateMap<Db.Survey, Models.MultiLanSurvey>();
|
||||
CreateMap<Models.Survey, Db.Survey>();
|
||||
CreateMap<Db.SurveyTranslation, Models.SurveyTranslation>();
|
||||
CreateMap<Models.SurveyTranslation, Db.SurveyTranslation>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -49,60 +49,57 @@ namespace DamageAssesment.Api.Surveys.Providers
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<(bool IsSuccess, IEnumerable<Models.Survey> Surveys, string ErrorMessage)> GetSurveysAsync(string Language)
|
||||
public IEnumerable<Models.SurveyTranslation> GetSurveyTranslations(int id, IEnumerable<Models.SurveyTranslation> SurveyTranslation,string? language)
|
||||
{
|
||||
IEnumerable<Models.Survey> surveysList = null;
|
||||
if (SurveyTranslation == null)
|
||||
{
|
||||
if (string.IsNullOrEmpty(language))
|
||||
{
|
||||
SurveyTranslation = mapper.Map<IEnumerable<Db.SurveyTranslation>, IEnumerable<Models.SurveyTranslation>>(
|
||||
surveyDbContext.SurveysTranslation.Where(a => a.SurveyId == id).ToList());
|
||||
}
|
||||
else
|
||||
{
|
||||
SurveyTranslation = mapper.Map<IEnumerable<Db.SurveyTranslation>, IEnumerable<Models.SurveyTranslation>>(
|
||||
surveyDbContext.SurveysTranslation.Where(a => a.SurveyId == id && a.Language == language).ToList());
|
||||
}
|
||||
}
|
||||
return SurveyTranslation;
|
||||
}
|
||||
public object CreateMultiLanguageObject(IEnumerable<Models.SurveyTranslation> surveyTranslations)
|
||||
{
|
||||
object MultiLanguage = new object();
|
||||
Dictionary<string, string> dict = new Dictionary<string, string>();
|
||||
foreach (Models.SurveyTranslation item in surveyTranslations)
|
||||
{
|
||||
dict.Add(item.Language, item.Title);
|
||||
}
|
||||
MultiLanguage = dict;
|
||||
return MultiLanguage;
|
||||
}
|
||||
public async Task<(bool IsSuccess, IEnumerable<Models.MultiLanSurvey> Surveys, string ErrorMessage)> GetSurveysAsync(string language)
|
||||
{
|
||||
IEnumerable<Models.MultiLanSurvey> surveysList = null;
|
||||
try
|
||||
{
|
||||
logger?.LogInformation("Gell all Surveys from DB");
|
||||
var surveys = await surveyDbContext.Surveys.Where(s => s.IsEnabled == true).ToListAsync();
|
||||
var surveyTranslations = await surveyDbContext.SurveysTranslation.ToListAsync();
|
||||
//var surveyTranslations = await surveyDbContext.SurveysTranslation.ToListAsync();
|
||||
|
||||
if (surveys != null)
|
||||
{
|
||||
if (string.IsNullOrEmpty(Language))
|
||||
{
|
||||
surveysList = from s in surveys
|
||||
select new
|
||||
Models.Survey
|
||||
{
|
||||
Id = s.Id,
|
||||
StartDate = s.StartDate,
|
||||
EndDate = s.EndDate,
|
||||
IsEnabled = s.IsEnabled,
|
||||
CreatedDate = s.CreatedDate,
|
||||
Titles = from t in surveyTranslations
|
||||
where t.SurveyId == s.Id
|
||||
select new Models.SurveyTranslation
|
||||
{
|
||||
Title = t.Title,
|
||||
Language = t.Language
|
||||
}
|
||||
surveysList = from s in surveys
|
||||
select new
|
||||
Models.MultiLanSurvey
|
||||
{
|
||||
Id = s.Id,
|
||||
StartDate = s.StartDate,
|
||||
EndDate = s.EndDate,
|
||||
IsEnabled = s.IsEnabled,
|
||||
CreatedDate = s.CreatedDate,
|
||||
Titles = CreateMultiLanguageObject(GetSurveyTranslations(s.Id,null, language))
|
||||
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
surveysList = from s in surveys
|
||||
select new
|
||||
Models.Survey
|
||||
{
|
||||
Id = s.Id,
|
||||
StartDate = s.StartDate,
|
||||
EndDate = s.EndDate,
|
||||
IsEnabled = s.IsEnabled,
|
||||
CreatedDate = s.CreatedDate,
|
||||
Titles = from t in surveyTranslations
|
||||
where t.SurveyId == s.Id
|
||||
&& t.Language == Language
|
||||
select new Models.SurveyTranslation
|
||||
{
|
||||
Title = t.Title,
|
||||
Language = t.Language
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
logger?.LogInformation($"{surveys.Count} Items(s) found");
|
||||
return (true, surveysList, null);
|
||||
@ -115,55 +112,27 @@ namespace DamageAssesment.Api.Surveys.Providers
|
||||
return (false, null, ex.Message);
|
||||
}
|
||||
}
|
||||
public async Task<(bool IsSuccess, Models.Survey Surveys, string ErrorMessage)> GetSurveysAsync(int Id, string Language)
|
||||
public async Task<(bool IsSuccess, Models.MultiLanSurvey Surveys, string ErrorMessage)> GetSurveysAsync(int id, string language)
|
||||
{
|
||||
try
|
||||
{
|
||||
logger?.LogInformation("Query Survey");
|
||||
var survey = await surveyDbContext.Surveys.SingleOrDefaultAsync(s => s.Id == Id && s.IsEnabled == true);
|
||||
var survey = await surveyDbContext.Surveys.SingleOrDefaultAsync(s => s.Id == id && s.IsEnabled == true);
|
||||
if (survey != null)
|
||||
{
|
||||
Models.Survey result = null;
|
||||
Models.MultiLanSurvey result = null;
|
||||
var surveyTranslations = await surveyDbContext.SurveysTranslation.Where(s => s.SurveyId == survey.Id).ToListAsync();
|
||||
|
||||
if (string.IsNullOrEmpty(Language))
|
||||
result = new Models.MultiLanSurvey
|
||||
{
|
||||
result = new Models.Survey
|
||||
{
|
||||
Id = survey.Id,
|
||||
StartDate = survey.StartDate,
|
||||
EndDate = survey.EndDate,
|
||||
IsEnabled = survey.IsEnabled,
|
||||
CreatedDate = survey.CreatedDate,
|
||||
Titles = from t in surveyTranslations
|
||||
select new Models.SurveyTranslation
|
||||
{
|
||||
Title = t.Title,
|
||||
Language = t.Language
|
||||
}
|
||||
Id = survey.Id,
|
||||
StartDate = survey.StartDate,
|
||||
EndDate = survey.EndDate,
|
||||
IsEnabled = survey.IsEnabled,
|
||||
CreatedDate = survey.CreatedDate,
|
||||
Titles = CreateMultiLanguageObject(GetSurveyTranslations(survey.Id,null, language))
|
||||
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
result = new Models.Survey
|
||||
{
|
||||
Id = survey.Id,
|
||||
StartDate = survey.StartDate,
|
||||
EndDate = survey.EndDate,
|
||||
IsEnabled = survey.IsEnabled,
|
||||
CreatedDate = survey.CreatedDate,
|
||||
Titles = from t in surveyTranslations
|
||||
where t.Language == Language
|
||||
select new Models.SurveyTranslation
|
||||
{
|
||||
Title = t.Title,
|
||||
Language = t.Language
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
logger?.LogInformation($"Survey Id: {Id} found");
|
||||
};
|
||||
logger?.LogInformation($"Survey Id: {id} found");
|
||||
return (true, result, null);
|
||||
}
|
||||
return (false, null, "Not found");
|
||||
@ -175,7 +144,7 @@ namespace DamageAssesment.Api.Surveys.Providers
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<(bool IsSuccess, Models.Survey Survey, string ErrorMessage)> PostSurveyAsync(Models.Survey survey)
|
||||
public async Task<(bool IsSuccess, Models.MultiLanSurvey Survey, string ErrorMessage)> PostSurveyAsync(Models.Survey survey)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -192,8 +161,9 @@ namespace DamageAssesment.Api.Surveys.Providers
|
||||
surveyDbContext.SurveysTranslation.Add(new Db.SurveyTranslation {SurveyId = _survey.Id, Language = title.Language, Title = title.Title });
|
||||
}
|
||||
await surveyDbContext.SaveChangesAsync();
|
||||
survey.Id = _survey.Id;
|
||||
return (true,survey, "Successful");
|
||||
var result = mapper.Map<Db.Survey, Models.MultiLanSurvey>(_survey);
|
||||
result.Titles = CreateMultiLanguageObject(GetSurveyTranslations(_survey.Id, survey.Titles, ""));
|
||||
return (true, result, "Successful");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -208,7 +178,7 @@ namespace DamageAssesment.Api.Surveys.Providers
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<(bool IsSuccess, Models.Survey Survey, string ErrorMessage)> PutSurveyAsync(int Id, Models.Survey survey)
|
||||
public async Task<(bool IsSuccess, Models.MultiLanSurvey Survey, string ErrorMessage)> PutSurveyAsync(int Id, Models.Survey survey)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -236,21 +206,8 @@ namespace DamageAssesment.Api.Surveys.Providers
|
||||
surveyDbContext.SurveysTranslation.AddRange(listSurveyTranslation);
|
||||
await surveyDbContext.SaveChangesAsync();
|
||||
|
||||
var result = new Models.Survey
|
||||
{
|
||||
Id = Id,
|
||||
StartDate = survey.StartDate,
|
||||
EndDate = survey.EndDate,
|
||||
IsEnabled = survey.IsEnabled,
|
||||
CreatedDate = survey.CreatedDate,
|
||||
Titles = from t in listSurveyTranslation
|
||||
select new Models.SurveyTranslation
|
||||
{
|
||||
Title = t.Title,
|
||||
Language = t.Language
|
||||
}
|
||||
|
||||
};
|
||||
var result = mapper.Map<Db.Survey, Models.MultiLanSurvey>(_survey);
|
||||
result.Titles = CreateMultiLanguageObject(GetSurveyTranslations(_survey.Id, survey.Titles, ""));
|
||||
return (true, result, "Successful");
|
||||
}
|
||||
else
|
||||
@ -272,7 +229,7 @@ namespace DamageAssesment.Api.Surveys.Providers
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<(bool IsSuccess, Models.Survey Survey, string ErrorMessage)> DeleteSurveyAsync(int Id)
|
||||
public async Task<(bool IsSuccess, Models.MultiLanSurvey Survey, string ErrorMessage)> DeleteSurveyAsync(int Id)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -280,9 +237,11 @@ namespace DamageAssesment.Api.Surveys.Providers
|
||||
|
||||
if (survey != null)
|
||||
{
|
||||
var result = mapper.Map<Db.Survey, Models.MultiLanSurvey>(survey);
|
||||
result.Titles = CreateMultiLanguageObject(GetSurveyTranslations(survey.Id, null, ""));
|
||||
surveyDbContext.Surveys.Remove(survey);
|
||||
await surveyDbContext.SaveChangesAsync();
|
||||
return (true, mapper.Map<Db.Survey, Models.Survey>(survey), $"Survey Id: {Id} deleted Successfuly");
|
||||
return (true, result, $"Survey Id: {Id} deleted Successfuly");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Reference in New Issue
Block a user