using AutoMapper; using DamageAssesment.Api.Surveys.Db; using DamageAssesment.Api.Surveys.Interfaces; using Microsoft.EntityFrameworkCore; namespace DamageAssesment.Api.Surveys.Providers { public class SurveysProvider : ISurveyProvider { private readonly SurveysDbContext surveyDbContext; private readonly ILogger logger; private readonly IMapper mapper; public SurveysProvider(SurveysDbContext surveysDbContext, ILogger logger, IMapper mapper) { this.surveyDbContext = surveysDbContext; this.logger = logger; this.mapper = mapper; seedData(); } private void seedData() { if (!surveyDbContext.Surveys.Any()) { surveyDbContext.Surveys.Add(new Db.Survey { Id = 1, Title = "Sample Survey Title:Damage Assesment 2014", IsEnabled = true, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(90) }); surveyDbContext.Surveys.Add(new Db.Survey { Id = 2, Title = "Sample Survey Title: Damage Assesment 2016", IsEnabled = true, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(90) }); surveyDbContext.Surveys.Add(new Db.Survey { Id = 3, Title = "Sample Survey Title: Damage Assesment 2018", IsEnabled = true, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(90) }); surveyDbContext.SaveChanges(); } } public async Task<(bool IsSuccess, IEnumerable Surveys, string ErrorMessage)> GetSurveysAsync() { try { logger?.LogInformation("Gell all Surveys from DB"); var surveys = await surveyDbContext.Surveys.ToListAsync(); if (surveys != null) { logger?.LogInformation($"{surveys.Count} Items(s) found"); var result = mapper.Map, IEnumerable>(surveys); return (true, result, null); } return (false, null, "Not found"); } catch (Exception ex) { logger?.LogError(ex.ToString()); return (false, null, ex.Message); } } public async Task<(bool IsSuccess, Models.Survey Surveys, string ErrorMessage)> GetSurveysAsync(int Id) { try { logger?.LogInformation("Query Survey"); var survey = await surveyDbContext.Surveys.SingleOrDefaultAsync(s => s.Id == Id); if (survey != null) { logger?.LogInformation($"Survey Id: {Id} found"); var result = mapper.Map(survey); return (true, result, null); } return (false, null, "Not found"); } catch (Exception ex) { logger?.LogError(ex.ToString()); return (false, null, ex.Message); } } public async Task<(bool IsSuccess, Models.Survey 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(survey)); surveyDbContext.SaveChanges(); return (true, survey, "Successful"); } else { logger?.LogInformation($"Survey Id: {survey.Id} cannot be added"); return (false, null, $"Survey Id: {survey.Id} cannot be added"); } } catch (Exception ex) { logger?.LogError(ex.ToString()); return (false, null, ex.Message); } } public async Task<(bool IsSuccess, Models.Survey Survey, string ErrorMessage)> PutSurveyAsync(int Id, Models.Survey survey) { try { if (survey != null) { var _survey = await surveyDbContext.Surveys.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(_survey), "Successful"); } else { logger?.LogInformation($"Survey Id : {Id} Not found"); return (false, null, "Not Found"); } } else { logger?.LogInformation($"Survey Id: {Id} Bad Request"); return (false, null, "Bad request"); } } catch (Exception ex) { logger?.LogError(ex.ToString()); return (false, null, ex.Message); } } public async Task<(bool IsSuccess, Models.Survey Survey, string ErrorMessage)> DeleteSurveyAsync(int Id) { try { var survey = await surveyDbContext.Surveys.Where(x => x.Id == Id).SingleOrDefaultAsync(); if (survey != null) { surveyDbContext.Surveys.Remove(survey); surveyDbContext.SaveChanges(); return (true, mapper.Map(survey), $"Survey Id: {Id} deleted Successfuly"); } else { logger?.LogInformation($"Survey Id : {Id} Not found"); return (false, null, "Not Found"); } } catch (Exception ex) { logger?.LogError(ex.ToString()); return (false, null, ex.Message); } } } }