forked from MDCPS/DamageAssessment_Backend
		
	Merged new dev changes
This commit is contained in:
		| @ -1,7 +1,9 @@ | ||||
| using AutoMapper; | ||||
| using DamageAssesment.Api.Surveys.Db; | ||||
| using DamageAssesment.Api.Surveys.Interfaces; | ||||
| using DamageAssesment.Api.Surveys.Models; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using System.Collections.Generic; | ||||
|  | ||||
| namespace DamageAssesment.Api.Surveys.Providers | ||||
| { | ||||
| @ -16,31 +18,91 @@ namespace DamageAssesment.Api.Surveys.Providers | ||||
|             this.surveyDbContext = surveysDbContext; | ||||
|             this.logger = logger; | ||||
|             this.mapper = mapper; | ||||
|             seedData(); | ||||
|             //seedData(); | ||||
|         } | ||||
|  | ||||
|         private void seedData() | ||||
|         public void seedData() | ||||
|         { | ||||
|             if (!surveyDbContext.Surveys.Any()) | ||||
|             { | ||||
|                 surveyDbContext.Surveys.Add(new Db.Survey {  Title = "Sample Survey Title:Damage Assesment 2014", IsEnabled = true, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(90) }); | ||||
|                 surveyDbContext.Surveys.Add(new Db.Survey {  Title = "Sample Survey Title: Damage Assesment 2016", IsEnabled = true, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(90) }); | ||||
|                 surveyDbContext.Surveys.Add(new Db.Survey {  Title = "Sample Survey Title: Damage Assesment 2018", IsEnabled = true, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(90) }); | ||||
|                 surveyDbContext.Surveys.Add(new Db.Survey {   IsEnabled = true, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(90) }); | ||||
|                 surveyDbContext.Surveys.Add(new Db.Survey {   IsEnabled = true, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(90) }); | ||||
|                 surveyDbContext.Surveys.Add(new Db.Survey {   IsEnabled = true, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(90) }); | ||||
|                 surveyDbContext.SaveChanges(); | ||||
|             } | ||||
|  | ||||
|             if (!surveyDbContext.SurveysTranslation.Any()) | ||||
|             { | ||||
|                 surveyDbContext.SurveysTranslation.Add(new Db.SurveyTranslation { SurveyId = 1, Language = "en", Title = "Impact of Tropical Storm Emily on Florida's Economy" }); | ||||
|                 surveyDbContext.SurveysTranslation.Add(new Db.SurveyTranslation { SurveyId = 1, Language = "es", Title = "Impacto de la tormenta tropical Emily en la economía de Florida" }); | ||||
|                 surveyDbContext.SurveysTranslation.Add(new Db.SurveyTranslation { SurveyId = 1, Language = "fr", Title = "Impact de la tempête tropicale Emily sur l'économie de la Floride" }); | ||||
|  | ||||
|                 surveyDbContext.SurveysTranslation.Add(new Db.SurveyTranslation { SurveyId = 2, Language = "en", Title = "Hurricane Andrew Aftermath Survey" }); | ||||
|                 surveyDbContext.SurveysTranslation.Add(new Db.SurveyTranslation { SurveyId = 2, Language = "es", Title = "Encuesta sobre las secuelas del huracán Andrew" }); | ||||
|                 surveyDbContext.SurveysTranslation.Add(new Db.SurveyTranslation { SurveyId = 2, Language = "fr", Title = "Enquête sur les conséquences de l'ouragan Andrew" }); | ||||
|  | ||||
|                 surveyDbContext.SurveysTranslation.Add(new Db.SurveyTranslation { SurveyId = 3, Language = "en", Title = "Public Perception of Hurricane Michael's Response" }); | ||||
|                 surveyDbContext.SurveysTranslation.Add(new Db.SurveyTranslation { SurveyId = 3, Language = "es", Title = "Percepción pública de la respuesta del huracán Michael" }); | ||||
|                 surveyDbContext.SurveysTranslation.Add(new Db.SurveyTranslation { SurveyId = 3, Language = "fr", Title = "Perception du public de la réponse de l'ouragan Michael" }); | ||||
|  | ||||
|                 surveyDbContext.SaveChangesAsync(); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public async Task<(bool IsSuccess, IEnumerable<Models.Survey> Surveys, string ErrorMessage)> GetSurveysAsync() | ||||
|         public IEnumerable<Models.SurveyTranslation> GetSurveyTranslations(int id, IEnumerable<Models.SurveyTranslation> SurveyTranslation,string? language) | ||||
|         { | ||||
|             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.ToListAsync(); | ||||
|                 var surveys = await surveyDbContext.Surveys.Where(s => s.IsEnabled == true).ToListAsync(); | ||||
|                 //var surveyTranslations = await surveyDbContext.SurveysTranslation.ToListAsync(); | ||||
|  | ||||
|                 if (surveys != null) | ||||
|                 { | ||||
|                     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)) | ||||
|  | ||||
|                                   }; | ||||
|  | ||||
|                     logger?.LogInformation($"{surveys.Count} Items(s) found"); | ||||
|                     var result = mapper.Map<IEnumerable<Db.Survey>, IEnumerable<Models.Survey>>(surveys); | ||||
|                     return (true, result, null); | ||||
|                     return (true, surveysList, null); | ||||
|                 } | ||||
|                 return (false, null, "Not found"); | ||||
|             } | ||||
| @ -50,16 +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) | ||||
|         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); | ||||
|                 var survey = await surveyDbContext.Surveys.SingleOrDefaultAsync(s => s.Id == id && s.IsEnabled == true); | ||||
|                 if (survey != null) | ||||
|                 { | ||||
|                     logger?.LogInformation($"Survey Id: {Id} found"); | ||||
|                     var result = mapper.Map<Db.Survey, Models.Survey>(survey); | ||||
|                     Models.MultiLanSurvey result = null; | ||||
|                     var surveyTranslations = await surveyDbContext.SurveysTranslation.Where(s => s.SurveyId == survey.Id).ToListAsync(); | ||||
|                     result = new Models.MultiLanSurvey | ||||
|                     { | ||||
|                         Id = survey.Id, | ||||
|                         StartDate = survey.StartDate, | ||||
|                         EndDate = survey.EndDate, | ||||
|                         IsEnabled = survey.IsEnabled, | ||||
|                         CreatedDate = survey.CreatedDate, | ||||
|                         Titles = CreateMultiLanguageObject(GetSurveyTranslations(survey.Id,null, language)) | ||||
|  | ||||
|                     }; | ||||
|                     logger?.LogInformation($"Survey Id: {id} found"); | ||||
|                     return (true, result, null); | ||||
|                 } | ||||
|                 return (false, null, "Not found"); | ||||
| @ -71,17 +144,26 @@ 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 | ||||
|             { | ||||
|                 if (survey != null) | ||||
|                 { | ||||
|                     var surveys = await surveyDbContext.Surveys.ToListAsync(); | ||||
|                     survey.Id = surveys.Count + 1; | ||||
|                     surveyDbContext.Surveys.Add(mapper.Map<Models.Survey, Db.Survey>(survey)); | ||||
|                     surveyDbContext.SaveChanges(); | ||||
|                     return (true, survey, "Successful"); | ||||
|                     survey.CreatedDate = DateTime.Now; | ||||
|                     Db.Survey _survey = mapper.Map<Models.Survey, Db.Survey>(survey); | ||||
|  | ||||
|                     surveyDbContext.Surveys.Add(_survey); | ||||
|                     await surveyDbContext.SaveChangesAsync(); | ||||
|                    | ||||
|                     foreach (var title in survey.Titles) | ||||
|                     { | ||||
|                         surveyDbContext.SurveysTranslation.Add(new Db.SurveyTranslation {SurveyId = _survey.Id, Language = title.Language, Title = title.Title }); | ||||
|                     } | ||||
|                     await surveyDbContext.SaveChangesAsync(); | ||||
|                     var result = mapper.Map<Db.Survey, Models.MultiLanSurvey>(_survey); | ||||
|                     result.Titles = CreateMultiLanguageObject(GetSurveyTranslations(_survey.Id, survey.Titles, ""));  | ||||
|                     return (true, result, "Successful"); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
| @ -96,22 +178,35 @@ 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 | ||||
|             { | ||||
|                 if (survey != null) | ||||
|                 { | ||||
|                     var _survey = await surveyDbContext.Surveys.Where(s => s.Id == Id).SingleOrDefaultAsync(); | ||||
|                     var _survey = await surveyDbContext.Surveys.AsNoTracking().Where(s => s.Id == Id).SingleOrDefaultAsync(); | ||||
|  | ||||
|                     if (_survey != null) | ||||
|                     { | ||||
|                         _survey.Title = survey.Title; | ||||
|                         _survey.IsEnabled = survey.IsEnabled; | ||||
|                         _survey.StartDate = survey.StartDate; | ||||
|                         _survey.EndDate = survey.EndDate; | ||||
|                         surveyDbContext.SaveChanges(); | ||||
|                         return (true, mapper.Map<Db.Survey, Models.Survey>(_survey), "Successful"); | ||||
|                         var surveysTranslation = await surveyDbContext.SurveysTranslation.Where(s => s.SurveyId == Id).ToListAsync(); | ||||
|                         surveyDbContext.SurveysTranslation.RemoveRange(surveysTranslation); | ||||
|                         await surveyDbContext.SaveChangesAsync(); | ||||
|                         _survey = mapper.Map<Models.Survey, Db.Survey>(survey); | ||||
|                         surveyDbContext.Surveys.Update(_survey); | ||||
|                         await surveyDbContext.SaveChangesAsync(); | ||||
|  | ||||
|                         List<Db.SurveyTranslation> listSurveyTranslation = new List<Db.SurveyTranslation>(); | ||||
|                         Random random = new Random(); | ||||
|                         foreach (var title in survey.Titles) | ||||
|                         { | ||||
|                             listSurveyTranslation.Add(new Db.SurveyTranslation { Id = random.Next(), SurveyId = _survey.Id, Language = title.Language, Title = title.Title }); | ||||
|                         } | ||||
|                         surveyDbContext.SurveysTranslation.AddRange(listSurveyTranslation); | ||||
|                         await surveyDbContext.SaveChangesAsync(); | ||||
|  | ||||
|                         var result = mapper.Map<Db.Survey, Models.MultiLanSurvey>(_survey); | ||||
|                         result.Titles = CreateMultiLanguageObject(GetSurveyTranslations(_survey.Id, survey.Titles, "")); | ||||
|                         return (true, result, "Successful"); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
| @ -132,7 +227,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 | ||||
|             { | ||||
| @ -140,9 +235,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); | ||||
|                     surveyDbContext.SaveChanges(); | ||||
|                     return (true, mapper.Map<Db.Survey, Models.Survey>(survey), $"Survey Id: {Id} deleted Successfuly"); | ||||
|                     await surveyDbContext.SaveChangesAsync(); | ||||
|                     return (true, result, $"Survey Id: {Id} deleted Successfuly"); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user