예제 #1
0
        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));
        }
예제 #2
0
        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));
        }