Пример #1
0
        public async Task <IReadOnlyCollection <ReadingVm> > GetReadingsAsync(ReadingQuery args)
        {
            var query = _dbContext
                        .Readings
                        .Where(r => r.BuildingId == args.BuildingId &&
                               r.ObjectId == args.ObjectId &&
                               r.DataFieldId == args.DataFieldId);

            var requiredReadings = await query
                                   .Where(r => r.Timestamp >= args.FromDate &&
                                          r.Timestamp <= args.ToDate)
                                   .OrderBy(b => b.Timestamp)
                                   .ProjectTo <ReadingVm>(_mapper.ConfigurationProvider)
                                   .ToListAsync();

            if (!requiredReadings.Any())
            {
                return(new List <ReadingVm>());
            }

            var lastRow = await query
                          .OrderByDescending(r => r.Timestamp)
                          .ProjectTo <ReadingVm>(_mapper.ConfigurationProvider)
                          .FirstOrDefaultAsync();

            var requiredLastReadingsRow = requiredReadings.LastOrDefault();

            if (!(lastRow.Timestamp == requiredLastReadingsRow.Timestamp &&
                  lastRow.Value == requiredLastReadingsRow.Value))
            {
                requiredReadings.Add(lastRow);
            }

            return(requiredReadings);
        }
Пример #2
0
        public async Task <IActionResult> GetReadings([FromQuery] ReadingQuery args)
        {
            var readings = await _mediator.Send(args);

            if (!readings.Any())
            {
                return(NoContent());
            }

            return(Ok(readings));
        }
        public async Task <IReadOnlyCollection <ReadingVm> > Handle(ReadingQuery args, CancellationToken cancellationToken)
        {
            args.ToDate = args.ToDate.ToEndOfTheDate();

            var cacheKey = $"reading-{args.BuildingId}-{args.ObjectId}-{args.DataFieldId}-{args.FromDate}-{args.ToDate}";

            var readingsFromCache = await _distributedCache
                                    .GetCacheAsync <IReadOnlyCollection <ReadingVm> >(cacheKey);

            if (readingsFromCache != null)
            {
                return(readingsFromCache);
            }

            var readingsFromDb = await _readingService
                                 .GetReadingsAsync(args);

            await _distributedCache
            .SetCacheAsStringAsync(cacheKey, readingsFromDb, 30);

            return(readingsFromDb);
        }