public FeelUserJourneyQueryResult Handle(FeelUserJourneyQuery query) { try { var isCategoryLevel = query.CategoryId != 0; var isSubcategoryLevel = query.SubCategoryId != 0; var isCountryLevel = query.CountryId != 0; var isStateLevel = query.StateId != 0; var isCityLevel = query.CityId != 0; var isOnlineExperiences = false; var EventCategory = query.MasterEventType == Contracts.Enums.MasterEventType.Online ? _eventCategory.GetAll().Where(s => s.MasterEventTypeId == Contracts.Enums.MasterEventType.Online).FirstOrDefault() : _eventCategory.Get(query.CategoryId); var allCategories = new List <FIL.Contracts.DataModels.EventCategory>(); if (EventCategory == null && query.PageType == Contracts.Enums.PageType.Category) { return(new FeelUserJourneyQueryResult { }); } if (!isCountryLevel && query.PageType == Contracts.Enums.PageType.Country) { return(new FeelUserJourneyQueryResult { }); } if (isCountryLevel && query.PageType == Contracts.Enums.PageType.Country) { if (isCategoryLevel && query.CategoryId == 0) // If Global country/state/city page { isCategoryLevel = false; } if (isSubcategoryLevel && query.SubCategoryId == 0) // If Global country/state/city page { isSubcategoryLevel = false; } var country = _countryRepository.Get(query.CountryId); if (country == null) { return(new FeelUserJourneyQueryResult { }); } } var subCategories = _eventCategory.GetByEventCategoryId(query.CategoryId).Where(s => s.IsEnabled).ToList(); if (query.MasterEventType == Contracts.Enums.MasterEventType.Online || query.MasterEventType == Contracts.Enums.MasterEventType.InRealLife) { isOnlineExperiences = query.MasterEventType == Contracts.Enums.MasterEventType.Online ? true : false; allCategories = _eventCategory.GetAll().ToList(); var parentCategoryIds = allCategories.Where(s => s.MasterEventTypeId == query.MasterEventType).Select(s => s.Id); subCategories = allCategories.Where(s => parentCategoryIds.Any(p => p == s.EventCategoryId)).ToList(); } if (isSubcategoryLevel) { subCategories = subCategories.Where(s => s.Id == query.SubCategoryId).ToList(); } var firstEventCategory = _eventCategory.Get(subCategories.FirstOrDefault().EventCategoryId); if (firstEventCategory != null && (!isCountryLevel && !isStateLevel && !isCategoryLevel && !isCityLevel && !isSubcategoryLevel)) { isOnlineExperiences = firstEventCategory.MasterEventTypeId == Contracts.Enums.MasterEventType.Online ? true : false; } var placeDetails = _placeProvider.GetAllPlaces(query, subCategories, EventCategory, query.MasterEventType, isCountryLevel, isStateLevel, isCityLevel).Where(s => s.CurrencyId != 0 && !s.IsTokenize).ToList(); if (!placeDetails.Any()) { return(new FeelUserJourneyQueryResult { }); } var pageDetail = new PageDetail { PageType = query.PageType, PagePath = query.PagePath, IsCategoryLevel = isCategoryLevel, IsSubCategoryLevel = isSubcategoryLevel, IsCountryLevel = isCountryLevel, IsStateLevel = isStateLevel, IsCityLevel = isCityLevel }; List <DynamicPlaceSections> DynamicPlaceSections = new List <DynamicPlaceSections>(); CountryPageDetail countryPageDetail = new CountryPageDetail(); DynamicPlaceSections AllplaceTiles = new DynamicPlaceSections(); List <GeoLocation> Cities = new List <GeoLocation>(); List <GeoLocation> States = new List <GeoLocation>(); List <GeoLocation> Countries = new List <GeoLocation>(); List <SubCategory> allSubCategories = new List <SubCategory>(); if (((!isCityLevel || isCategoryLevel) && query.PageType == Contracts.Enums.PageType.Category) || (query.PageType == Contracts.Enums.PageType.Country && (!isSubcategoryLevel && !isCityLevel)) ) // Get subcat for category => category/country/state OR Country => category/country/state { if (query.MasterEventType == Contracts.Enums.MasterEventType.Online || query.MasterEventType == Contracts.Enums.MasterEventType.InRealLife) { subCategories = allCategories.Where(s => s.MasterEventTypeId == query.MasterEventType).ToList(); } if (((isCountryLevel || isStateLevel || isCityLevel) && query.PageType == Contracts.Enums.PageType.Category) || ((isStateLevel || isCityLevel || isCountryLevel) && (isCategoryLevel) && query.PageType == Contracts.Enums.PageType.Category)) // filter the subcat if it's category => state/country or country => category page { subCategories = subCategories.Where(x => placeDetails.Any(y => y.EventCategoryId == x.Id)).ToList(); } else if (query.PageType == Contracts.Enums.PageType.Country && !isCategoryLevel && !isSubcategoryLevel) // Global country/city/state landing page { subCategories = _eventCategory.GetByIds(placeDetails.Select(s => s.ParentCategoryId).Distinct()).ToList(); } allSubCategories = _subCategoryProvider.GetSubCategories(query, placeDetails, subCategories, pageDetail).OrderBy(s => s.Order).ToList(); } if (((!isCityLevel || isCountryLevel) && pageDetail.PageType == Contracts.Enums.PageType.Category) || (pageDetail.PageType == Contracts.Enums.PageType.Country && !(isSubcategoryLevel && isCityLevel))) { var cityGroup = placeDetails.Select(s => new { s.CityId, s.CityName }).Distinct().Take(10); var stateGroup = placeDetails.Select(s => new { s.StateId, s.StateName }).Distinct().Take(10); // If it's online then don't show city/state/country if (!isOnlineExperiences) { foreach (var group in cityGroup) { GeoLocation city = new GeoLocation(); if (group.CityName != "") { Cities.Add(GeoLocation(group.CityName, group.CityId, placeDetails.First().ParentCategorySlug, subCategories.First().Slug, isCategoryLevel, placeDetails.First().ParentCategoryId, subCategories.First().Id, query.CountryId, "city", pageDetail)); } } foreach (var group in stateGroup) { GeoLocation state = new GeoLocation(); if (group.StateName != "") { States.Add(GeoLocation(group.StateName, group.StateId, placeDetails.First().ParentCategorySlug, subCategories.First().Slug, isCategoryLevel, placeDetails.First().ParentCategoryId, subCategories.First().Id, query.CountryId, "state", pageDetail)); } } if (query.PageType == Contracts.Enums.PageType.Category) { var countryGroup = placeDetails.Select(s => new { s.CountryId, s.CountryName }).Distinct().Take(10); foreach (var group in countryGroup) { GeoLocation country = new GeoLocation(); if (group.CountryName != "") { Countries.Add(GeoLocation(group.CountryName, group.CountryId, placeDetails.First().ParentCategorySlug, subCategories.First().Slug, isCategoryLevel, placeDetails.First().ParentCategoryId, subCategories.First().Id, query.CountryId, "country", pageDetail)); } } } } DynamicPlaceSections = _dynamicSectionProvider.GetDynamicSections(placeDetails, query.MasterEventType, pageDetail); } AllplaceTiles.PlaceDetails = placeDetails.Take(320).ToList(); AllplaceTiles.SectionDetails = new SectionDetail(); if (query.MasterEventType == Contracts.Enums.MasterEventType.Online || query.MasterEventType == Contracts.Enums.MasterEventType.InRealLife) { AllplaceTiles.SectionDetails.Heading = query.MasterEventType == Contracts.Enums.MasterEventType.Online ? "Top Online Experiences from around the World" : "In-Real-Life experiences around the world"; } else if (query.PageType == Contracts.Enums.PageType.Category) { AllplaceTiles.SectionDetails.Heading = (isCategoryLevel ? EventCategory.DisplayName : subCategories.First().DisplayName) + (isOnlineExperiences ? " from around " : " around ") + (isCountryLevel ? placeDetails.First().CountryName : isStateLevel ? placeDetails.First().StateName : isCityLevel ? placeDetails.First().CityName : "the World"); } else if (query.PageType == Contracts.Enums.PageType.Country) { AllplaceTiles.SectionDetails.Heading = ((!pageDetail.IsCategoryLevel && !pageDetail.IsSubCategoryLevel) ? "Feels" : pageDetail.IsCategoryLevel ? placeDetails.First().ParentCategory : pageDetail.IsSubCategoryLevel ? placeDetails.First().Category : "") + (isOnlineExperiences ? " from around " : " around ") + (pageDetail.IsCityLevel ? placeDetails.First().CityName : pageDetail.IsStateLevel ? placeDetails.First().StateName : placeDetails.First().CountryName); } AllplaceTiles.SectionDetails.IsShowMore = true; var searchValue = ""; if (query.MasterEventType == Contracts.Enums.MasterEventType.Online || query.MasterEventType == Contracts.Enums.MasterEventType.InRealLife) { searchValue = ""; } else if (query.PageType == Contracts.Enums.PageType.Category) { searchValue = placeDetails.First().ParentCategory + (isSubcategoryLevel ? ", " + placeDetails.First().Category : "") + (isCountryLevel ? ", " + placeDetails.First().CountryName : "") + (isStateLevel ? ", " + placeDetails.First().StateName : "") + (isCityLevel ? ", " + placeDetails.First().CityName : ""); } else { searchValue = placeDetails.First().CountryName + (isSubcategoryLevel ? ", " + placeDetails.First().Category : "" + (isCategoryLevel ? ", " + placeDetails.First().ParentCategory : "")) + (isStateLevel ? ", " + placeDetails.First().StateName : "") + (isCityLevel ? ", " + placeDetails.First().CityName : ""); } if (query.PageType == Contracts.Enums.PageType.Country) { DynamicPlaceSections = DynamicPlaceSections.OrderBy(a => Guid.NewGuid()).ToList(); var description = ""; if (pageDetail.IsCityLevel) { var cityDescription = _cityDescriptionRepository.GetBycityId(placeDetails.First().CityId); description = cityDescription != null ? cityDescription.Description : ""; } else if (pageDetail.IsStateLevel) { var stateDescription = _stateDescriptionRepository.GetByStateId(placeDetails.First().StateId); description = stateDescription != null ? stateDescription.Description : ""; } else { var countryDescription = _countryDescriptionRepository.GetByCountryId(query.CountryId); description = countryDescription != null ? countryDescription.Description : ""; } countryPageDetail.Count = (pageDetail.IsCountryLevel && !pageDetail.IsStateLevel && !pageDetail.IsCityLevel) ? _countryRepository.GetAllCountryPlace().Where(s => s.Id == query.CountryId).FirstOrDefault().Count : placeDetails.GroupBy(x => x.Name, (key, group) => group.First()).Count(); countryPageDetail.Description = description; countryPageDetail.SectionTitle = pageDetail.IsCityLevel ? placeDetails.First().CityName : isStateLevel?placeDetails.First().StateName: placeDetails.First().CountryName; } return(new FeelUserJourneyQueryResult { AllPlaceTiles = AllplaceTiles, SubCategories = allSubCategories, GeoData = new GeoData { Cities = Cities, Countries = Countries, States = States }, DynamicPlaceSections = DynamicPlaceSections, SearchValue = searchValue, ContryPageDetails = countryPageDetail, Success = true }); } catch (Exception e) { _logger.Log(LogCategory.Error, new Exception("", e)); return(new FeelUserJourneyQueryResult { }); } }
public DynamicPlaceSections GetDynamicPlaceSection(List <PlaceDetail> placeDetails, FIL.Contracts.Enums.MasterEventType masterEventType, string Key, PageDetail pageDetail, bool IsMainCategory = false) { DynamicPlaceSections DynamicPlaceSection = new DynamicPlaceSections(); DynamicPlaceSection.PlaceDetails = new List <PlaceDetail>(); var placeDetailList = placeDetails; DynamicPlaceSection.SectionDetails = new SectionDetail(); DynamicPlaceSection.PlaceDetails = placeDetailList.OrderBy(a => Guid.NewGuid()).ToList(); if (masterEventType == Contracts.Enums.MasterEventType.Online) { DynamicPlaceSection.SectionDetails.Heading = "Top " + placeDetails.FirstOrDefault().ParentCategory + " from around the World"; } else if (pageDetail.PageType == Contracts.Enums.PageType.Category) { DynamicPlaceSection.SectionDetails.Heading = ((Key.ToLower().Contains("top") || placeDetails.First().Category.Contains("top")) ? "" : ((Key.ToLower().Contains("museums") || placeDetails.First().Category.Contains("museums"))) ? "Iconic " : "Top ") + (pageDetail.IsCategoryLevel ? Key : placeDetails.First().Category) + (placeDetails.FirstOrDefault().MasterEventTypeId == FIL.Contracts.Enums.MasterEventType.Online ? " from around " : " around ") + (pageDetail.IsCategoryLevel ? (pageDetail.IsCountryLevel ? placeDetails.First().CountryName : pageDetail.IsStateLevel ? placeDetails.First().StateName : pageDetail.IsCityLevel ? placeDetails.First().CityName : "the World") : Key); } else { StringBuilder sbTicketSummary = new StringBuilder(); sbTicketSummary.Append("Top "); if ((!pageDetail.IsCategoryLevel && !pageDetail.IsSubCategoryLevel) || pageDetail.IsCategoryLevel) { sbTicketSummary.Append(Key); } else { sbTicketSummary.Append(placeDetails.First().Category); } sbTicketSummary.Append(IsMainCategory ? " feels around " : (placeDetails.FirstOrDefault().MasterEventTypeId == FIL.Contracts.Enums.MasterEventType.Online ? " from around " : " around ")); if ((!pageDetail.IsCategoryLevel && !pageDetail.IsSubCategoryLevel) || pageDetail.IsCategoryLevel) { if (pageDetail.IsCityLevel) { sbTicketSummary.Append(placeDetailList.First().CityName); } else if (pageDetail.IsStateLevel) { sbTicketSummary.Append(placeDetailList.First().StateName); } else { sbTicketSummary.Append(placeDetailList.First().CountryName); } } else { sbTicketSummary.Append(Key); } DynamicPlaceSection.SectionDetails.Heading = sbTicketSummary.ToString(); } DynamicPlaceSection.SectionDetails.IsShowMore = true; if (masterEventType == Contracts.Enums.MasterEventType.Online) { DynamicPlaceSection.SectionDetails.Url = "/c/" + placeDetails.First().ParentCategorySlug; } else if (pageDetail.PageType == Contracts.Enums.PageType.Category) { DynamicPlaceSection.SectionDetails.Url = "/c/" + placeDetails.First().ParentCategorySlug + "/" + DynamicPlaceSection.PlaceDetails.First().SubCategorySlug + (pageDetail.IsCountryLevel ? "/" + placeDetailList.First().StateName : (pageDetail.IsStateLevel || pageDetail.IsCityLevel) ? "/" + placeDetailList.First().CityName : ""); } else { StringBuilder sbTicketSummary = new StringBuilder(); sbTicketSummary.Append(pageDetail.PagePath); if (IsMainCategory && !pageDetail.IsSubCategoryLevel) { sbTicketSummary.Append("/" + DynamicPlaceSection.PlaceDetails.First().ParentCategorySlug); } if (!IsMainCategory && !pageDetail.IsSubCategoryLevel) { sbTicketSummary.Append("/" + DynamicPlaceSection.PlaceDetails.First().SubCategorySlug); } if (pageDetail.IsSubCategoryLevel && pageDetail.IsCountryLevel) { sbTicketSummary.Append("/" + Key); } else if (!pageDetail.IsCategoryLevel && !pageDetail.IsSubCategoryLevel && pageDetail.IsStateLevel) { sbTicketSummary.Append("/" + placeDetailList.First().StateName.Replace(" ", "-").Replace(".", "").ToLower()); } else if (pageDetail.IsCityLevel || pageDetail.IsStateLevel) { sbTicketSummary.Append("/" + placeDetailList.First().CityName.Replace(" ", "-").Replace(".", "").ToLower()); } DynamicPlaceSection.SectionDetails.Url = sbTicketSummary.ToString(); } if (masterEventType == Contracts.Enums.MasterEventType.Online) { DynamicPlaceSection.SectionDetails.Query = "?category=" + placeDetailList.First().ParentCategoryId; } else if (pageDetail.PageType == Contracts.Enums.PageType.Category) { DynamicPlaceSection.SectionDetails.Query = (pageDetail.IsCategoryLevel ? "?category=" + placeDetailList.First().ParentCategoryId + (pageDetail.IsCountryLevel ? "&country=" + placeDetailList.First().CountryId : pageDetail.IsStateLevel ? "&state=" + placeDetailList.First().StateId : pageDetail.IsCityLevel ? "&city=" + placeDetailList.First().CityId : "") : pageDetail.IsCountryLevel ? "?category=" + placeDetailList.First().ParentCategoryId + "&subcategory=" + placeDetailList.First().EventCategoryId + "&state=" + placeDetailList.First().StateId : (pageDetail.IsStateLevel || pageDetail.IsCityLevel) ? "?category=" + placeDetailList.First().ParentCategoryId + "&subcategory=" + placeDetailList.First().EventCategoryId + "&city=" + placeDetailList.First().CityId : "?category=" + placeDetailList.First().ParentCategoryId + "&subcategory=" + placeDetailList.First().EventCategoryId + "&country=" + placeDetailList.First().CountryId ); } else { StringBuilder sbTicketSummary = new StringBuilder(); sbTicketSummary.Append("?country=" + placeDetailList.First().CountryId); if (IsMainCategory) { sbTicketSummary.Append("&category=" + placeDetailList.First().ParentCategoryId); } if (!IsMainCategory) { sbTicketSummary.Append("&category=" + placeDetailList.First().ParentCategoryId + "&subcategory=" + placeDetailList.First().EventCategoryId); } if (pageDetail.IsSubCategoryLevel && pageDetail.IsCountryLevel) { sbTicketSummary.Append("&state=" + placeDetailList.First().StateId); } if (!pageDetail.IsCategoryLevel && !pageDetail.IsSubCategoryLevel && pageDetail.IsStateLevel) { sbTicketSummary.Append("&state=" + placeDetailList.First().StateId); } if (((pageDetail.IsStateLevel || pageDetail.IsCityLevel) && pageDetail.PageType == Contracts.Enums.PageType.Category) || pageDetail.PageType == Contracts.Enums.PageType.Country && pageDetail.IsCityLevel) { sbTicketSummary.Append("&city=" + placeDetailList.First().CityId); } DynamicPlaceSection.SectionDetails.Query = sbTicketSummary.ToString(); } return(DynamicPlaceSection); }