Пример #1
0
        public async Task <PaginatedCampaignListModel> GetPagedCampaignsAsync(CampaignListRequestModel campaignListRequestModel)
        {
            Expression <Func <CampaignEntity, bool> > predicate = PredicateBuilder.New <CampaignEntity>(c => !c.IsDeleted);

            if (!string.IsNullOrWhiteSpace(campaignListRequestModel.CampaignName))
            {
                predicate = predicate.And(c => c.Name.ToLower().Contains(campaignListRequestModel.CampaignName.Trim().ToLower()));
            }

            if (campaignListRequestModel.CampaignStatus != null)
            {
                predicate = GetFilterByCampaignStatus(campaignListRequestModel.CampaignStatus.Value, predicate);
            }

            if (!string.IsNullOrEmpty(campaignListRequestModel.ConditionType))
            {
                predicate = predicate.And(c => c.ConditionEntities.Any(e => e.BonusTypeName == campaignListRequestModel.ConditionType.ToLower()));
            }

            using (var context = _msSqlContextFactory.CreateDataContext())
            {
                var query = context.Campaigns
                            .AsNoTracking()
                            .Include(c => c.ConditionEntities)
                            .ThenInclude(ce => ce.BonusTypeEntity)
                            .Include(c => c.ConditionEntities)
                            .ThenInclude(ce => ce.ConditionPartners)
                            .Include(c => c.ConditionEntities)
                            .ThenInclude(ce => ce.Attributes)
                            .Where(predicate);

                var totalCount = await query.CountAsync();

                var skip = (campaignListRequestModel.CurrentPage - 1) * campaignListRequestModel.PageSize;

                var result = await query.ToListAsync();

                result = result
                         .OrderByDescending(OrderCampaignByVertical)
                         .ThenBy(c => c.Order)
                         .ThenByDescending(c => c.CreationDate)
                         .Skip(skip)
                         .Take(campaignListRequestModel.PageSize)
                         .ToList();

                return(new PaginatedCampaignListModel
                {
                    Campaigns = _mapper.Map <List <CampaignDetails> >(result),
                    CurrentPage = campaignListRequestModel.CurrentPage,
                    PageSize = campaignListRequestModel.PageSize,
                    TotalCount = totalCount
                });
            }
        }
Пример #2
0
 public async Task <PaginatedCampaignListModel> GetPagedCampaignsAsync(CampaignListRequestModel campaignListRequestModel)
 {
     return(await _campaignRepository.GetPagedCampaignsAsync(campaignListRequestModel));
 }