Ejemplo n.º 1
0
        public async Task <IActionResult> Index([FromForm] MarketIndexParamsViewModel filters)
        {
            var userObj = await _userManager.GetUserAsync(User);

            var filtersObj = filters;

            if (filtersObj.Sort == null)
            {
                filtersObj.Sort = userObj.MarketSort == null ? MarketIndexParamsViewModel.SortOrder.DateDescending : (MarketIndexParamsViewModel.SortOrder)userObj.MarketSort.Value;
            }
            else
            {
                userObj.MarketSort = (byte)filtersObj.Sort;
            }
            if (filtersObj.View == null)
            {
                filtersObj.View = userObj.MarketView == null ? MarketIndexParamsViewModel.ViewKind.Tiles : (MarketIndexParamsViewModel.ViewKind)userObj.MarketView.Value;
            }
            else
            {
                userObj.MarketView = (byte)filtersObj.View;
            }
            if (filtersObj.FilterTabPinned == null)
            {
                filtersObj.FilterTabPinned = userObj.MarketIsViewPinned == null ? false : userObj.MarketIsViewPinned.Value;
            }
            else
            {
                userObj.MarketIsViewPinned = filtersObj.FilterTabPinned;
            }
            await _userManager.UpdateAsync(userObj);

            var model = _marketLogic.GetIndexViewModel(await _userManager.GetPlayerIdAsync(User), filtersObj);

            return(View(model));
        }
Ejemplo n.º 2
0
        public MarketIndexViewModel GetIndexViewModel(int?playerId, MarketIndexParamsViewModel filters)
        {
            var ownAds = _dbContext.MarketAd.Where(ad => ad.AuthorId == playerId);
            var model  = new MarketIndexViewModel
            {
                OwnActiveAds   = ownAds.Count(ad => ad.Active),
                OwnInactiveAds = ownAds.Count(ad => !ad.Active),
                OwnAdReactions = ownAds.Sum(ad => ad.Reactions.Count()),
                ItemTypes      = EnumExtensions.ToDictionary <int>(typeof(Item.ItemType)),
                WeaponTypes    = EnumExtensions.ToDictionary <int>(typeof(Item.ItemWeaponType)),
                Filters        = filters,
            };

            if (filters.HasItemLevelFilters)
            {
                var items = _dbContext.MarketAdBundleItem
                            .Include(bi => bi.Item)
                            .Include(bi => bi.Bundle)
                            .ThenInclude(b => b.Ad)
                            .ThenInclude(a => a.Author)
                            .Where(i =>
                                   // Item-level filters
                                   (string.IsNullOrWhiteSpace(filters.NamePart) || i.Item.Name.Contains(filters.NamePart)) &&
                                   (filters.ItemRarities == null || filters.ItemRarities.Count() == 0 || filters.ItemRarities.Contains(i.Item.Rarity)) &&
                                   (filters.ItemTypes == null || filters.ItemTypes.Count() == 0 || filters.ItemTypes.Contains(i.Item.Type)) &&
                                   (filters.WeaponTypes == null || filters.WeaponTypes.Count() == 0 ||
                                    (i.Item.WeaponType != null && filters.WeaponTypes.Contains(i.Item.WeaponType.Value))) &&
                                   (filters.WeaponRanges == null || filters.WeaponRanges.Count() == 0 ||
                                    (i.Item.WeaponRange.HasValue && filters.WeaponRanges.Contains(i.Item.WeaponRange.Value))) &&
                                   (filters.MinEnergy == null || filters.MinEnergy <= 0 ||
                                    (i.Item.Energy.HasValue && i.Item.Energy >= filters.MinEnergy)) &&
                                   (filters.MinImpact == null || filters.MinImpact <= 0 ||
                                    (i.Item.Impact.HasValue && i.Item.Impact >= filters.MinImpact)) &&
                                   (filters.MinPiercing == null || filters.MinPiercing <= 0 ||
                                    (i.Item.Piercing.HasValue && i.Item.Piercing >= filters.MinPiercing)) &&
                                   (filters.MinTier == null || filters.MinTier <= 1 || i.Item.Tier >= filters.MinTier) &&
                                   (filters.MaxTier == null || filters.MaxTier >= TauManager.Constants.MaxTier || i.Item.Tier <= filters.MaxTier) &&
                                   // Bundle-level filters
                                   (filters.AdTypes == null || filters.AdTypes.Count() == 0 ||
                                    (filters.AdTypes != null && filters.AdTypes.Contains(MarketAd.AdType.Buy) && i.Bundle.Type == MarketAdBundle.BundleType.Request) ||
                                    (filters.AdTypes != null &&
                                     (filters.AdTypes.Contains(MarketAd.AdType.Sell) || filters.AdTypes.Contains(MarketAd.AdType.Lend)) &&
                                     i.Bundle.Type == MarketAdBundle.BundleType.Offer)) &&
                                   // Ad-level filters
                                   (filters.AdTypes == null || filters.AdTypes.Count() == 0 || filters.AdTypes.Contains(i.Bundle.Ad.Type)) &&
                                   (i.Bundle.Ad.Active) &&
                                   // Generic conditions
                                   ((i.Bundle.Type == MarketAdBundle.BundleType.Offer && (i.Bundle.Ad.Type == MarketAd.AdType.Sell || i.Bundle.Ad.Type == MarketAd.AdType.Lend)) ||
                                    (i.Bundle.Type == MarketAdBundle.BundleType.Request && i.Bundle.Ad.Type == MarketAd.AdType.Buy))
                                   )
                            .ToList();
                var allAds = items.Select(i => i.Bundle.Ad)
                             .Distinct();
                var allAdsSorted = filters.Sort == MarketIndexParamsViewModel.SortOrder.DateAscending ?
                                   allAds.OrderBy(ad => ad.PlacementDate) :
                                   allAds.OrderByDescending(ad => ad.PlacementDate);
                model.OfferAds = allAdsSorted.Where(ad => ad.Type == MarketAd.AdType.Sell || ad.Type == MarketAd.AdType.Lend)
                                 .Select(ad => new MarketAdViewModel(ad));
                model.AskAds = allAdsSorted.Where(ad => ad.Type == MarketAd.AdType.Buy)
                               .Select(ad => new MarketAdViewModel(ad));
            }
            else
            {
                var allAds = _dbContext.MarketAd
                             .Include(ad => ad.Author)
                             .Include(ad => ad.Bundles)
                             .ThenInclude(ab => ab.Items)
                             .ThenInclude(abi => abi.Item)
                             .Where(ad =>
                                    (filters.AdTypes == null || filters.AdTypes.Count() == 0 || filters.AdTypes.Contains(ad.Type)) &&
                                    ad.Active)
                             .ToList();

                var allAdsSorted = filters.Sort == MarketIndexParamsViewModel.SortOrder.DateAscending ?
                                   allAds.OrderBy(ad => ad.PlacementDate) :
                                   allAds.OrderByDescending(ad => ad.PlacementDate);

                model.OfferAds = allAdsSorted.Where(ad => ad.Type == MarketAd.AdType.Sell || ad.Type == MarketAd.AdType.Lend)
                                 .Select(ad => new MarketAdViewModel(ad));
                model.AskAds = allAdsSorted.Where(ad => ad.Type == MarketAd.AdType.Buy)
                               .Select(ad => new MarketAdViewModel(ad));
            }
            return(model);
        }