Ejemplo n.º 1
0
 public IEnumerable <Answer> Handle(AnswersQuery request)
 {
     using (var context = GetContext())
     {
         return(GetTable(context)
                .Where(n => request.From < n.When && n.When < request.To)
                .AsEnumerable()
                .Select(ToEntity)
                .ToList());
     }
 }
        public async Task <ApiListResponse <AnswerQueryDTO> > Handle(AnswersQuery message, CancellationToken cancellationToken)
        {
            var query = _context.Answers.Where(a => a.OptionAnswered.Flagged == message.Urgent);

            // Filter by the organizer flag if specified
            if (!message.Organizer)
            {
                query = query.Where(a => a.Observer.IdNgo == message.IdONG);
            }

            // Filter by county if specified
            if (!string.IsNullOrEmpty(message.County))
            {
                query = query.Where(a => a.CountyCode == message.County);
            }

            // Filter by polling station if specified
            if (message.PollingStationNumber > 0)
            {
                query = query.Where(a => a.PollingStationNumber == message.PollingStationNumber);
            }

            // Filter by polling station if specified
            if (message.ObserverId > 0)
            {
                query = query.Where(a => a.IdObserver == message.ObserverId);
            }

            var answerQueryInfosQuery = query.GroupBy(a => new { a.IdPollingStation, a.CountyCode, a.PollingStationNumber, a.IdObserver, ObserverName = a.Observer.Name })
                                        .Select(x => new VoteMonitorContext.AnswerQueryInfo
            {
                IdObserver       = x.Key.IdObserver,
                IdPollingStation = x.Key.IdPollingStation,
                PollingStation   = x.Key.CountyCode + " " + x.Key.PollingStationNumber.ToString(),
                ObserverName     = x.Key.ObserverName,
                LastModified     = x.Max(a => a.LastModified)
            });

            var count = await answerQueryInfosQuery.CountAsync(cancellationToken : cancellationToken);

            var sectiiCuObservatoriPaginat = await answerQueryInfosQuery
                                             .OrderByDescending(aqi => aqi.LastModified)
                                             .Skip((message.Page - 1) * message.PageSize)
                                             .Take(message.PageSize)
                                             .ToListAsync(cancellationToken: cancellationToken);

            return(new ApiListResponse <AnswerQueryDTO>
            {
                Data = sectiiCuObservatoriPaginat.Select(x => _mapper.Map <AnswerQueryDTO>(x)).ToList(),
                Page = message.Page,
                PageSize = message.PageSize,
                TotalItems = count
            });
        }