Exemplo n.º 1
0
 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
     });
 }
Exemplo n.º 2
0
        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));
            }
        }
Exemplo n.º 3
0
        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));
            }
        }