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); }
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); }
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); }