Exemplo n.º 1
0
        public async Task <ActionResult> Index(int?categoryId, int?currencyId, int?locationId, string sortBy, string searchTerm, int?page, MarketItemType?type)
        {
            var searchModel = new MarketItemSearchModel
            {
                CategoryId   = categoryId.HasValue ? categoryId.Value : 0,
                LocationId   = locationId.HasValue ? locationId.Value : 0,
                CurrencyId   = currencyId.HasValue ? currencyId.Value : 0,
                SortBy       = sortBy,
                ItemType     = type,
                SearchTerm   = searchTerm,
                Page         = page.HasValue ? page.Value : 1,
                ItemsPerPage = 24                 //TODO: UI selectable item count??
            };

            var response = await MarketplaceReader.GetMarketItems(searchModel);

            if (categoryId != Constant.MARKETPLACE_CATEGORY_ADULT)
            {
                response = response.Where(x => !x.IsAdult).ToList();
            }

            var pagedItems = response.Skip(searchModel.ItemsPerPage * (searchModel.Page - 1)).Take(searchModel.ItemsPerPage);
            var model      = new MarketPlaceModel
            {
                CategoryId  = categoryId.HasValue ? categoryId.Value : 0,
                LocationId  = locationId.HasValue ? locationId.Value : 0,
                CurrencyId  = currencyId.HasValue ? currencyId.Value : 0,
                ItemType    = type == null ? Cryptopia.Resources.Market.itemTypeAll : type.ToString(),
                SortBy      = string.IsNullOrEmpty(sortBy) ? Resources.Market.marketItemSortyByTitle : sortBy,
                SearchTerm  = searchTerm,
                Categories  = await MarketplaceReader.GetMarketCategories(),
                MarketItems = new StaticPagedList <MarketListItemModel>(pagedItems, Math.Max(searchModel.Page, 1), searchModel.ItemsPerPage, response.Count),
                Locations   = StaticDataCache.Locations.Where(x => x.ParentId == 0).OrderBy(x => x.Name).ToList(),
                Currencies  = await CurrencyReader.GetCurrencies()
            };

            return(View("MarketPlace", model));
        }
Exemplo n.º 2
0
        public async Task <List <MarketListItemModel> > GetMarketItems(MarketItemSearchModel model)
        {
            using (var context = ExchangeDataContextFactory.CreateReadOnlyContext())
            {
                var pageNum        = model.Page;
                var categoryId     = model.CategoryId;
                var locationId     = model.LocationId;
                var currencyId     = model.CurrencyId;
                var searchTerm     = model.SearchTerm ?? "";
                var sortby         = model.SortBy ?? "Title";
                var marketItemType = model.ItemType;
                var query          = from marketItem in context.MarketItem.Where(n => n.Status == MarketItemStatus.Active)
                                     join category1 in context.MarketCategory on marketItem.CategoryId equals category1.Id
                                     join category2 in context.MarketCategory on category1.ParentId equals category2.Id
                                     join category3 in context.MarketCategory on category2.ParentId equals category3.Id
                                     join location1 in context.Location on marketItem.LocationId equals location1.Id
                                     join location2 in context.Location on location1.ParentId equals location2.Id
                                     where (marketItemType == null || marketItem.Type == marketItemType) &&
                                     (currencyId == 0 || currencyId == marketItem.CurrencyId) &&
                                     (categoryId == 0 || (categoryId == category1.Id || categoryId == category2.Id || categoryId == category3.Id)) &&
                                     (locationId == 0 || (locationId == location1.Id || locationId == location2.Id)) &&
                                     (searchTerm == "" || (marketItem.Title.Contains(searchTerm) || marketItem.Description.Contains(searchTerm)))
                                     select new
                {
                    Id       = marketItem.Id,
                    Category = marketItem.Category.DisplayName,
                    Location = marketItem.Location.ParentId != null
                                                                                                ? string.Concat(marketItem.Location.Parent.Name, ", ", marketItem.Location.Name)
                                                                                                : marketItem.Location.Name,
                    Title           = marketItem.Title,
                    Description     = marketItem.Description,
                    MainImage       = marketItem.MainImage,
                    AskingPrice     = marketItem.AskingPrice,
                    ReservePrice    = marketItem.ReservePrice,
                    CurrentBidPrice = (decimal?)marketItem.Bids.Max(x => x.BidAmount) ?? 0,
                    Type            = marketItem.Type,
                    Status          = marketItem.Status,
                    Feature         = marketItem.Feature,
                    CloseDate       = marketItem.CloseDate,
                    Created         = marketItem.Created,
                    Symbol          = marketItem.Currency.Symbol,
                    IsAdult         = (category1.Id == Constant.MARKETPLACE_CATEGORY_ADULT || category2.Id == Constant.MARKETPLACE_CATEGORY_ADULT || category3.Id == Constant.MARKETPLACE_CATEGORY_ADULT)
                };

                switch (sortby)
                {
                case "Title":
                    query = query.OrderBy(x => x.Title);
                    break;

                case "Highest Price":
                    query = query.OrderByDescending(x => x.AskingPrice);
                    break;

                case "Lowest Price":
                    query = query.OrderBy(x => x.AskingPrice);
                    break;

                case "Closing Soon":
                    query = query.OrderBy(x => x.CloseDate);
                    break;

                case "Newest":
                    query = query.OrderByDescending(x => x.Created);
                    break;

                default:
                    break;
                }

                var results = await query.ToListNoLockAsync().ConfigureAwait(false);

                return(results.Select(marketItem => new MarketListItemModel
                {
                    Title = marketItem.Title,
                    Closes = marketItem.CloseDate.GetTimeToGo(),
                    Featured = marketItem.Feature,
                    Id = marketItem.Id,
                    ItemType = marketItem.Type,
                    Location = marketItem.Location,
                    MainImage = marketItem.MainImage,
                    NoReserve = marketItem.ReservePrice > 0,
                    Price = marketItem.AskingPrice,
                    ReserveMet = marketItem.CurrentBidPrice >= marketItem.ReservePrice,
                    Symbol = marketItem.Symbol,
                    IsAdult = marketItem.IsAdult
                }).ToList());
            }
        }