public async Task <IActionResult> GetSensors() { var device = await GetAuthorizedDevice(); if (device == null) { return(Unauthorized()); } var sensors = await _cachingService.GetCachedValue("AllSensors", async() => await _temperatureContext.Sensor.ToListAsync(), TimeSpan.FromHours(6)); var result = sensors.Select(x => new SensorDto { Id = x.Id, Name = x.Name }); return(Ok(result)); }
public async Task <IActionResult> GetTempReadings(DateTimeOffset start, WebClientGetTempReadingRange range, int deviceId, int locationId, int sensorId) { if (start == DateTimeOffset.MinValue) { return(BadRequest("Please specify start.")); } if (range == WebClientGetTempReadingRange.Unspecified) { return(BadRequest("Please specify range.")); } if (deviceId <= 0) { return(BadRequest("Please specify valid device id.")); } if (locationId <= 0) { return(BadRequest("Please specify valid location id.")); } if (sensorId <= 0) { return(BadRequest("Please specify valid sensor id.")); } var(searchStartDateTime, searchEndDateTime) = GetSearchStartAndEndDates(start, range); WebClientTempReadingsDto result = await _cachingService.GetCachedValue( $"GetTempReadings.{searchStartDateTime:s}.{range:D}.{deviceId}.{locationId}.{sensorId}]", async() => { IQueryable <TempReading> filteredTempReadings = _temperatureContext.TempReading .Where(x => x.DeviceId == deviceId && x.LocationId == locationId && x.SensorId == sensorId && x.TakenAt >= searchStartDateTime && x.TakenAt < searchEndDateTime); IQueryable <WebClientTempReadingDto> groupedTempReadings = ApplyGrouping(filteredTempReadings, range); List <WebClientTempReadingDto> temperatures = await groupedTempReadings.ToListAsync(); return(new WebClientTempReadingsDto { SearchStartDateTime = searchStartDateTime, SearchEndDateTime = searchEndDateTime, Temperatures = temperatures }); }, r => searchEndDateTime <= DateTime.UtcNow.AddMinutes(-5) ?TimeSpan.FromDays(7) : TimeSpan.FromMinutes(5), r => true); return(Ok(result)); }