public static Models.WeatherReportGetDTO FromModel(Models.WeatherReport reportToConvert) { return(new Models.WeatherReportGetDTO { ReportId = reportToConvert.ReportId, Temperature = reportToConvert.Temperature, Humidity = reportToConvert.Humidity, Uv = reportToConvert.Uv, Raining = reportToConvert.Raining == 1 ? true : false, Light = reportToConvert.Light == 1 ? true : false, ReportDate = reportToConvert.ReportDate }); }
public async Task <IActionResult> CreateWeatherReport(Models.WeatherReportPostDTO incomingWeatherReport) { if (!ModelState.IsValid) { return(BadRequest()); } StringValues key; if (!Request.Headers.TryGetValue(_apiKeyHeaderName, out key) || key.FirstOrDefault() != _conf["ApiKey"]) { return(Unauthorized()); } // Some clarification needed here: when the sensor reports 0 (LOW), it actually means something is happening. This is why it is stored as 1 (true). try { Models.WeatherReport newReport = new Models.WeatherReport { ReportId = Guid.NewGuid().ToString(), Temperature = incomingWeatherReport.Temperature, Humidity = incomingWeatherReport.Humidity, Uv = GetUvIndex(incomingWeatherReport.Uv), Raining = incomingWeatherReport.Raining == 0 ? 1 : 0, Light = incomingWeatherReport.Light == 0 ? 1 : 0, ReportDate = DateTime.Now }; await _db.WeatherReports.AddAsync(newReport); await _db.SaveChangesAsync(); string locationUri = $"{_conf["BaseUrl"]}/api/v1/weatherreports/{newReport.ReportId}"; return(Created(locationUri, Models.WeatherReportGetDTO.FromModel(newReport))); } catch (DbUpdateException) { return(StatusCode(StatusCodes.Status500InternalServerError, _errorMessageSavingData)); } }
public async Task <IActionResult> GetLatestReportAndRecords() { try { IEnumerable <Models.WeatherReport> weatherReports = await _db.WeatherReports.ToListAsync(); Models.WeatherReport latestWeatherReport = weatherReports .OrderByDescending(wr => wr.ReportDate) .FirstOrDefault(); if (latestWeatherReport == null) { return(NotFound()); } return(Ok(new Models.LatestWeatherReportAndRecordsGetDTO { Report = Models.WeatherReportGetDTO.FromModel(latestWeatherReport), Records = new Models.WeatherRecords { FirstLightToday = weatherReports .Where(w => w.ReportDate.Date == DateTime.Now.Date && w.Light == 1) .OrderBy(w => w.ReportDate) .FirstOrDefault()?.ReportDate.ToString("HH:mm") ?? "", LastLightToday = weatherReports .Where(w => w.ReportDate.Date == DateTime.Now.Date && w.Light == 1) .OrderBy(w => w.ReportDate) .LastOrDefault()?.ReportDate.ToString("HH:mm") ?? "", LastTimeRaining = weatherReports .Where(w => w.Raining == 1) .OrderBy(w => w.ReportDate) .LastOrDefault()?.ReportDate.ToString() ?? "", TemperatureMax = weatherReports .OrderByDescending(w => w.Temperature) .FirstOrDefault().Temperature, TemperatureMaxDate = weatherReports .OrderByDescending(w => w.Temperature) .FirstOrDefault().ReportDate, TemperatureMin = weatherReports .OrderBy(w => w.Temperature) .FirstOrDefault().Temperature, TemperatureMinDate = weatherReports .OrderBy(w => w.Temperature) .FirstOrDefault().ReportDate, HumidityMax = weatherReports .OrderByDescending(w => w.Humidity) .FirstOrDefault().Humidity, HumidityMaxDate = weatherReports .OrderByDescending(w => w.Humidity) .FirstOrDefault().ReportDate, HumidityMin = weatherReports .OrderBy(w => w.Humidity) .FirstOrDefault().Humidity, HumidityMinDate = weatherReports .OrderBy(w => w.Humidity) .FirstOrDefault().ReportDate, UvMax = weatherReports .OrderByDescending(w => w.Uv) .FirstOrDefault().Uv, UvMaxDate = weatherReports .OrderByDescending(w => w.Uv) .FirstOrDefault().ReportDate, UvMin = weatherReports .OrderBy(w => w.Uv) .FirstOrDefault().Uv, UvMinDate = weatherReports .OrderBy(w => w.Uv) .FirstOrDefault().ReportDate } })); } catch (InvalidOperationException) { return(StatusCode(StatusCodes.Status500InternalServerError, _errorMessageFetchingData)); } }