public async Task <ApiListResponse <SimpleStatisticsModel> > Handle(StatisticiNumarObservatoriQuery message) { //var queryBuilder = new StatisticiQueryBuilder //{ // Query = @"SELECT J.Nume AS Label, COUNT(*) as Value // FROM Judet J // INNER JOIN SectieDeVotare AS SV ON SV.IdJudet = J.IdJudet // INNER JOIN [Raspuns] AS R ON R.IdSectieDeVotare = SV.IdSectieDeVotarre // INNER JOIN Observator O ON O.IdObservator = R.IdObservator", // CacheKey = "StatisticiObservatori" //}; var queryBuilder = new StatisticiQueryBuilder { Query = @"select count(distinct r.idobservator) as [Value], codjudet as Label from raspuns r (nolock) inner join observator o on r.idobservator = o.idobservator ", CacheKey = "StatisticiObservatori" }; queryBuilder.WhereOngFilter(message.Organizator, message.IdONG); //queryBuilder.Append("GROUP BY J.Nume ORDER BY Value DESC"); queryBuilder.Append("group by codjudet order by [Value] desc"); // get or save all records in cache var records = await _cacheService.GetOrSaveDataInCacheAsync(queryBuilder.CacheKey, async() => { return(await _context.StatisticiSimple .FromSql(queryBuilder.Query) .ToListAsync()); }, new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = new TimeSpan(message.CacheHours, message.CacheMinutes, message.CacheMinutes) } ); // perform count and pagination on the records retrieved from the cache var pagedList = records.Paginate(message.Page, message.PageSize); return(new ApiListResponse <SimpleStatisticsModel> { Data = pagedList.Select(x => _mapper.Map <SimpleStatisticsModel>(x)).ToList(), Page = message.Page, PageSize = message.PageSize, TotalItems = records.Count() }); }
public async Task <ApiListResponse <SimpleStatisticsModel> > Handle(StatisticiNumarObservatoriQuery message, CancellationToken token) { var queryBuilder = new StatisticiQueryBuilder { Query = @"select count(distinct a.IdObserver) as [Value], CountyCode as Label from Answers a (nolock) inner join Observers o on a.IdObserver = o.Id ", CacheKey = "StatisticiObservatori" }; queryBuilder.WhereOngFilter(message.Organizator, message.IdONG); //queryBuilder.Append("GROUP BY J.Name ORDER BY Value DESC"); queryBuilder.Append("group by CountyCode order by [Value] desc"); // get or save all records in cache var records = await _cacheService.GetOrSaveDataInCacheAsync(queryBuilder.CacheKey, async() => { return(await _context.StatisticiSimple .FromSql(queryBuilder.Query) .ToListAsync()); }, new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = new TimeSpan(message.CacheHours, message.CacheMinutes, message.CacheMinutes) } ); // perform count and pagination on the records retrieved from the cache var pagedList = records.Paginate(message.Page, message.PageSize); return(new ApiListResponse <SimpleStatisticsModel> { Data = pagedList.Select(x => _mapper.Map <SimpleStatisticsModel>(x)).ToList(), Page = message.Page, PageSize = message.PageSize, TotalItems = records.Count() }); }