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()
            });
        }
示例#2
0
        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()
            });
        }