コード例 #1
0
        private FullSuggestionModel _RemoveRedundantPagesElements(FullSuggestionModel model, string actionType = "", int page = 0)
        {
            var dict = new Dictionary <string, IList <SuggestionModel> >();

            if (string.IsNullOrEmpty(actionType))
            {
                actionType = model.SuggestedItems.Keys.First();
            }

            IList <SuggestionModel> items = model.SuggestedItems[actionType].Take(page * 18 + 18).ToList();

            dict.Add(actionType, items);

            model.SuggestedItems = dict;

            return(model);
        }
コード例 #2
0
        public FullSuggestionModel GetSuggestion(string woeid, int fresh, DateTime?date)  //, string actionType = "", int page = 0)
        {
            FullSuggestionModel output = null;

            string userId = string.Empty;

            if (User != null && User.Identity != null)
            {
                userId = User.Identity.GetUserId();
            }

            int languageId = 2; // Default is Russian

            languageId = CurrentLang.Id;
            string key = "s" + woeid + "l" + languageId + "d" + (date.HasValue ? date.Value.Ticks.ToString() : string.Empty) + "u" + (userId ?? string.Empty);

            if (HttpContext.Current.Cache[key] != null)
            {
                output = HttpContext.Current.Cache[key] as FullSuggestionModel;
            }

            if (fresh == 0 && output != null && output.SuggestedItems.Any())
            {
                return(output); // _RemoveRedundantPagesElements(output, actionType, page);
            }

            try
            {
                output = _CreateSuggestionsModel(woeid, languageId, userId);

                HttpContext.Current.Cache.Add(key, output, null, DateTime.MaxValue, TimeSpan.FromMinutes(20), CacheItemPriority.High, null);
            }
            catch (Exception ex)
            {
                _logger.Error("Exception API GetSuggestion", ex);
            }

            return(output); // _RemoveRedundantPagesElements(output, actionType, page);
        }
コード例 #3
0
        private FullSuggestionModel _CreateSuggestionsModel(string woeid, int languageId, string userId)
        {
            FullSuggestionModel output = new FullSuggestionModel();

            SuggestionsResult suggestionResult = this._suggestionService.GetSuggestion(woeid, languageId, userId);

            if (suggestionResult != null)
            {
                Dictionary <int, ItemType> itemTypes = this._dataStore.GetAllItemTypes().ToDictionary(k => k.Id);

                foreach (string key in suggestionResult.CommonSuggestions.Keys)
                {
                    output.CommonSuggestedItems.Add(key, suggestionResult.CommonSuggestions[key].Select(x => new SuggestionModel {
                        Name = x
                    }).ToList());
                }

                var itemsToUpdateShowTimes = new List <int>();

                foreach (string actionTypeName in suggestionResult.Suggestions.Keys)
                {
                    // Create HTML id from action type name.
                    string strongActionTypeName = actionTypeName.RemoveSpecialSymbols().ToLower();
                    if (!output.SuggestedItems.Keys.Contains(strongActionTypeName))
                    {
                        output.SuggestedItems.Add(strongActionTypeName, new List <SuggestionModel>());
                    }

                    var itemsCollection = suggestionResult.Suggestions[actionTypeName].SuggestionItems
                                          .Where(x => x.Item.ActionTypeId.HasValue)
                                          .Take(18); // <<<<< ===== TAKE ONLY 18 .

                    // Look through items to build model.
                    foreach (var item in itemsCollection)
                    {
                        string imagePath = String.Empty;
                        if (!string.IsNullOrEmpty(item.Item.DefaultImageUri))
                        {
                            imagePath = item.Item.DefaultImageUri;
                        }
                        else
                        {
                            var images = this._dataStore.GetImagesByItemId(item.ItemId.Value);
                            if (images.Any())
                            {
                                imagePath = images.First().ImageUrl;
                            }
                            else
                            {
                                imagePath = @"/img/default_wear/veshalka.png";
                            }
                        }

                        string   itemTypeFilter = "0";
                        ItemType itemType       = null;
                        if (item.Item.ItemTypeId.HasValue && itemTypes.TryGetValue(item.Item.ItemTypeId.Value, out itemType) && itemType.EnumType.HasValue)
                        {
                            itemTypeFilter = itemType.EnumType.Value.ToString();
                        }

                        output.SuggestedItems[strongActionTypeName].Add(
                            new SuggestionModel
                        {
                            ActionType             = actionTypeName,
                            ImageUrl               = imagePath,
                            ReferrerUrl            = item.Item.Referrer,
                            Price                  = (item.Item.Price ?? 0).ToString() + " " + ContentHelpers.GetLocalCurrencyName(item.Item.Currency),
                            Name                   = item.Item.Name,
                            Description            = item.Item.Description,
                            MadeBy                 = item.Item.MadeBy,
                            ProvideBy              = item.Item.ProvideBy ?? string.Empty,
                            Language               = CurrentLang.Code,
                            Gender                 = item.Item.Gender,
                            Season                 = item.Item.Season.ToString(),
                            WaterProtectionPercent =
                                item.Item.WaterProtectionPercent.HasValue
                                        ? item.Item.WaterProtectionPercent.Value
                                        : 0,
                            IceProtection =
                                item.Item.IceProtectionPercent.HasValue
                                        ? item.Item.IceProtectionPercent.Value
                                        : false,
                            ArmoringPercent =
                                item.Item.ArmoringPercent.HasValue
                                        ? item.Item.ArmoringPercent.Value
                                        : 0,
                            MinAge = item.Item.MinAge.HasValue ? item.Item.MinAge.Value : 0,
                            MaxAge = item.Item.MaxAge.HasValue ? item.Item.MaxAge.Value : 0,
                            SunProtectionPercent =
                                item.Item.SunProtectionPercent.HasValue
                                        ? item.Item.SunProtectionPercent.Value
                                        : 0,
                            ItemType   = itemTypeFilter,
                            IsWardrobe = item.Item.IsWardrobe
                        });
                    }

                    itemsToUpdateShowTimes.AddRange(itemsCollection.Where(x => x.ItemId.HasValue).Select(x => x.ItemId.Value));

                    if (string.IsNullOrEmpty(output.ForecastDescription))
                    {
                        output.ForecastDescription = suggestionResult.Suggestions[actionTypeName].FullDescription;
                    }
                }

                _dataStore.UpdateShowedTimes(itemsToUpdateShowTimes);
            }

            return(output);
        }