コード例 #1
0
ファイル: CacheService.cs プロジェクト: zykour/TheAfterParty
        //change this to just cache and rework the other method to accept the list of items to be queried?
        public List <Listing> TryGetCachedListings(TheAfterParty.Domain.Concrete.ListingFilter filter, out int count)
        {
            /*List<Listing> listings = null;
             *
             * if (!_cache.TryGetValue(stockedListingsCacheKey, out listings))
             * {
             *  Task.Run(() => FillListingCache(_cache));
             * }
             * else
             * {
             *  filter.NewestDate = listings.Where(l => l.Quantity > 0).OrderByDescending(x => x.DateEdited).FirstOrDefault().DateEdited.Date;
             * }
             *
             *
             * return GetListingsWithFilter(filter, out count, listings).ToList();
             */

            return(GetListingsWithFilter(filter, out count).ToList());
        }
コード例 #2
0
        public IEnumerable <Listing> GetListingsWithFilter(ListingFilter filter, out int TotalItems, List <Listing> listings = null)
        {
            IQueryable <Listing> listingQuery;

            if (listings == null)
            {
                listingQuery = context.Listings
                               .Include(x => x.ChildListings.Select(y => y.Product.Listings.Select(z => z.ChildListings)))
                               .Include(x => x.ChildListings.Select(y => y.Platforms))
                               .Include(x => x.ChildListings.Select(y => y.DiscountedListings))
                               .Include(x => x.DiscountedListings)
                               .Include(x => x.Platforms)
                               .Include(x => x.Product.Listings.Select(z => z.ChildListings))
                               .AsQueryable()
                               .Where(x => x.Quantity > 0 && x.ListingPrice > 0);
            }
            else
            {
                listingQuery = listings.AsQueryable <Listing>();
            }

            if (filter.IsDailyDeal)
            {
                listingQuery = listingQuery.Where(x => x.DiscountedListings.Any(y => y.DailyDeal));
            }

            if (filter.WishlistFilter)
            {
                if (filter.LoggedInUser != null)
                {
                    listingQuery = listingQuery.Where(x => filter.LoggedInUser.WishlistEntries.Select(y => y.AppID).Any(z => z == x.Product.AppID));
                }
                else
                {
                    listingQuery = listingQuery.Where(x => context.WishlistEntries.Where(y => y.UserID.Equals(filter.UserID)).Select(y => y.AppID).Any(z => z == x.Product.AppID));
                }
            }

            if (filter.IsOtherDeal)
            {
                listingQuery = listingQuery.Where(x => x.DiscountedListings.Any(y => y.DailyDeal == false && y.WeeklyDeal == false));
            }

            if (filter.IsWeeklyDeal)
            {
                listingQuery = listingQuery.Where(x => x.DiscountedListings.Any(y => y.WeeklyDeal));
            }

            if (filter.IsAllDeal)
            {
                listingQuery = listingQuery.Where(x => x.DiscountedListings.Any());
            }

            if (filter.IsNewest)
            {
                DateTime date;

                if (filter.NewestDate != null)
                {
                    date = (DateTime)filter.NewestDate;
                }
                else
                {
                    date = context.Listings.Where(l => l.Quantity > 0).OrderByDescending(x => x.DateEdited).FirstOrDefault().DateEdited.Date;
                }

                var day   = date.Day;
                var month = date.Month;
                var year  = date.Year;

                listingQuery = listingQuery.Where(x => x.DateEdited.Day == day && x.DateEdited.Year == year && x.DateEdited.Month == month);
            }

            if (filter.Date != null)
            {
                var date  = (DateTime)filter.Date;
                var day   = date.Day;
                var month = date.Month;
                var year  = date.Year;

                listingQuery = listingQuery.Where(x => x.DateEdited.Day == day && x.DateEdited.Year == year && x.DateEdited.Month == month);
            }

            if (String.IsNullOrWhiteSpace(filter.SearchText) == false)
            {
                var searchText = filter.SearchText.ToLower();

                listingQuery = listingQuery.Where(x => x.ListingName.ToLower().Contains(searchText));
            }

            if (filter.BeginsWithFilter != filter.BeginsWithSentinel)
            {
                string beginsWithText = filter.BeginsWithFilter.ToString();

                if (filter.BeginsWithSentinel != '0')
                {
                    listingQuery = listingQuery.Where(x => x.ListingName.StartsWith(beginsWithText) || x.ListingName.ToLower().StartsWith(beginsWithText));
                }
                else
                {
                    listingQuery = listingQuery.Where(x => !char.IsLetter(x.ListingName.First()));
                }
            }

            if (String.IsNullOrWhiteSpace(filter.UserID) == false)
            {
                if (filter.UnownedFilter)
                {
                    listingQuery = listingQuery.Where(x => !context.OwnedGames.Where(y => y.UserID.Equals(filter.UserID)).Select(y => y.AppID).Any(z => z == x.Product.AppID));
                }
            }

            if ((filter.UnownedFilter | filter.BlacklistFilter | filter.AffordableFilter) == false)
            {
                if (filter.FriendAppIDs.Count() > 0)
                {
                    listingQuery = listingQuery.Where(x => !filter.FriendAppIDs.Any(z => z == x.Product.AppID));
                }
            }

            if (filter.PlatformID != 0)
            {
                listingQuery = listingQuery.Where(x => x.Platforms.Select(y => y.PlatformID).Contains(filter.PlatformID));
            }

            if (String.IsNullOrWhiteSpace(filter.UserID) == false)
            {
                if (filter.BlacklistFilter)
                {
                    if (filter.LoggedInUser != null)
                    {
                        List <int> ids = filter.LoggedInUser.BlacklistedListings.Select(z => z.ListingID).ToList();
                        listingQuery = listingQuery.Where(x => !ids.Any(a => a == x.ListingID));
                        //IEnumerable<Listing> blacklist = filter.LoggedInUser.BlacklistedListings.AsEnumerable();
                        //listingQuery = from listing in listingQuery where !(from bl in blacklist select bl.ListingID).Contains(listing.ListingID) select listing;
                    }
                    //else
                    //{
                    //    //List<int> ids = filter.LoggedInUser.BlacklistedListings.Select(z => z.ListingID).ToList();
                    //    //listingQuery = listingQuery.Where(x => !ids.Any(a => a == x.ListingID));
                    //}
                }
            }

            if (String.IsNullOrWhiteSpace(filter.UserID) == false)
            {
                if (filter.AffordableFilter)
                {
                    if (filter.LoggedInUser != null)
                    {
                        listingQuery = listingQuery.Where(x => x.ListingPrice <= filter.LoggedInUser.Balance);
                    }
                    else
                    {
                        listingQuery = listingQuery.Where(x => x.ListingPrice <= context.Users.FirstOrDefault(y => y.Id.Equals(filter.UserID)).Balance);
                    }
                }
            }

            if (filter.TagIDs.Count > 0)
            {
                listingQuery = listingQuery.Where(x => !filter.TagIDs.Except(x.Product.Tags.Select(y => y.TagID)).Any());
            }

            if (filter.ProductCategoryIDs.Count > 0)
            {
                listingQuery = listingQuery.Where(x => !filter.ProductCategoryIDs.Except(x.Product.ProductCategories.Select(y => y.ProductCategoryID)).Any());
            }

            if (filter.GameSort > 0)
            {
                if (filter.GameSort == 1)
                {
                    listingQuery = listingQuery.OrderBy(x => x.ListingName);
                }
                else
                {
                    listingQuery = listingQuery.OrderByDescending(x => x.ListingName);
                }
            }
            else if (filter.PriceSort > 0)
            {
                if (filter.PriceSort == 1)
                {
                    listingQuery = listingQuery.OrderBy(x => x.ListingPrice).ThenBy(x => x.ListingName);
                }
                else
                {
                    listingQuery = listingQuery.OrderByDescending(x => x.ListingPrice).ThenBy(x => x.ListingName);
                }
            }
            else if (filter.QuantitySort > 0)
            {
                if (filter.QuantitySort == 1)
                {
                    listingQuery = listingQuery.OrderBy(x => x.Quantity).ThenBy(x => x.ListingName);
                }
                else
                {
                    listingQuery = listingQuery.OrderByDescending(x => x.Quantity).ThenBy(x => x.ListingName);
                }
            }

            TotalItems = listingQuery.Count();

            if (filter.PaginationNum > 0 && filter.Page > 0)
            {
                listingQuery = listingQuery.Skip((filter.Page - 1) * filter.PaginationNum).Take(filter.PaginationNum);
            }
            else if (filter.PaginationNum > 0)
            {
                listingQuery = listingQuery.Take(filter.PaginationNum);
            }

            return(listingQuery);
        }