private FeelSearchQueryResult AdvanceSearch(FeelSearchQuery query) { var siteEvents = _eventSiteIdMappingRepository .GetBySiteId(query.SiteId) .OrderBy(o => o.SortOrder).ToList(); List <Contracts.DataModels.Event> searchEvents = new List <Contracts.DataModels.Event>(); if (query.PlaceAltIds != null && query.PlaceAltIds.Count() > 0) { searchEvents = _eventRepository.GetEventsByAltIds(query.PlaceAltIds) .ToList(); } else { searchEvents = _eventRepository.GetFeelEventsBySearchString(query.Name, query.SiteId) .ToList(); } var eventMapping = searchEvents.ToDictionary(e => e.Id); var eventIds = eventMapping.Keys; var eventCategoryMappings = _eventCategoryMappingRepository.GetByEventIds(eventIds).Where(ed => ed.IsEnabled == true); var allEventDetails = _eventDetailRepository.GetByEventIds(eventIds).Where(ed => ed.IsEnabled == true); var allEventRatings = _ratingRepository.GetByEventIds(eventIds); var venueMapping = _venueRepository.GetByVenueIds(allEventDetails.Select(ed => ed.VenueId).Distinct()) .ToDictionary(v => v.Id); var eventDetailsMapping = allEventDetails.GroupBy(ed => ed.EventId) .ToDictionary(g => g.Key, g => g.ToList()); var eventCategoryMapping = eventCategoryMappings.GroupBy(ed => ed.EventId) .ToDictionary(g => g.Key, g => g.ToList()); var eventRatingMapping = allEventRatings.GroupBy(ed => ed.EventId) .ToDictionary(g => g.Key, g => g.ToList()); var cityIds = venueMapping.Values.Select(s => s.CityId).Distinct(); var cityMapping = _cityRepository.GetByCityIds(cityIds) .ToDictionary(c => c.Id); var stateId = cityMapping.Values.Select(c => c.StateId).Distinct(); var stateMapping = _stateRepository.GetByStateIds(stateId) .ToDictionary(s => s.Id); var countryIdList = stateMapping.Values.Select(s => s.CountryId).Distinct(); var countryMapping = _countryRepository.GetByCountryIds(countryIdList) .ToDictionary(c => c.Id); var eventsBySortOrder = new List <FIL.Contracts.DataModels.Event>(); foreach (var item in siteEvents) { var events = searchEvents.FirstOrDefault(w => w.Id == item.EventId); if (events != null) { eventsBySortOrder.Add(AutoMapper.Mapper.Map <FIL.Contracts.DataModels.Event>(events)); } } var CategoryEventData = eventsBySortOrder.Select(ce => { try { var eventObj = eventMapping[ce.Id]; var eventDetails = eventDetailsMapping[ce.Id]; var eventCategoryMap = eventCategoryMapping[ce.Id]; List <FIL.Contracts.DataModels.Rating> eventRatings; if (eventRatingMapping.ContainsKey(ce.Id)) { eventRatings = eventRatingMapping[ce.Id]; } else { eventRatings = null; } var eventDetailIdList = eventDetails.Select(s => s.Id).Distinct().ToList(); var venues = eventDetails.Select(s => s.VenueId).Distinct().Select(v => venueMapping[v]); var cities = venues.Select(s => s.CityId).Distinct().Select(c => cityMapping[c]); var states = cities.Select(s => s.StateId).Distinct().Select(s => stateMapping[s]); var countries = states.Select(s => s.CountryId).Distinct().Select(c => countryMapping[c]); var eventTicketAttributeMapping = new List <Contracts.DataModels.EventTicketAttribute> { _eventTicketAttributeRepository.GetMaxPriceByEventDetailId(eventDetailIdList), _eventTicketAttributeRepository.GetMinPriceByEventDetailId(eventDetailIdList) }; var currencyMapping = _currencyTypeRepository.GetByCurrencyId(eventTicketAttributeMapping.First().CurrencyId); List <string> eventCatMappings = new List <string>(); foreach (var eventCat in eventCategoryMap) { var eventCategoryDataModel = _eventCategoryRepository.Get(eventCat.EventCategoryId); var eventCategoryModel = AutoMapper.Mapper.Map <Contracts.Models.EventCategory>(eventCategoryDataModel); eventCatMappings.Add(eventCategoryModel.DisplayName); } return(new CategoryEventContainer { CategoryEvent = Mapper.Map <Contracts.Models.CategoryEvent>(ce), EventType = eventObj.EventTypeId.ToString(), EventCategory = eventObj.EventCategoryId.ToString(), City = Mapper.Map <IEnumerable <City> >(cities), State = Mapper.Map <IEnumerable <State> >(states), Country = Mapper.Map <IEnumerable <Country> >(countries), Event = Mapper.Map <Event>(eventObj), EventDetail = Mapper.Map <IEnumerable <EventDetail> >(eventDetails), Rating = Mapper.Map <IEnumerable <Rating> >(eventRatings), CurrencyType = Mapper.Map <CurrencyType>(currencyMapping), Venue = Mapper.Map <IEnumerable <Venue> >(venues), EventTicketAttribute = Mapper.Map <IEnumerable <EventTicketAttribute> >(eventTicketAttributeMapping), EventCategories = eventCatMappings }); } catch (Exception e) { return(new CategoryEventContainer { }); } }); return(new FeelSearchQueryResult { FeelAdvanceSearchQueryResult = new FeelCategoryEventQueryResult { CategoryEvents = CategoryEventData.ToList() } }); }
public FeelCategoryEventQueryResult Handle(FeelCategoryEventQuery query) { try { query.SiteId = FIL.Contracts.Enums.Site.feelaplaceSite; var countryDescription = new FIL.Contracts.DataModels.CountryDescription(); var cityDescription = new FIL.Contracts.DataModels.CityDescription(); var countryContents = new List <FIL.Contracts.DataModels.CountryContentMapping>(); var indexEventId = eventIdProvider(query); var siteEvents = _eventSiteIdMappingRepository .GetBySiteId(query.SiteId) .OrderBy(o => o.SortOrder).ToList(); var categoryEvents = _eventRepository.GetByAllEventIds(indexEventId) .Where(e => e.IsEnabled) .ToList(); var eventMapping = categoryEvents.ToDictionary(e => e.Id); var eventIds = eventMapping.Keys; var eventCategoryMappings = _eventCategoryMappingRepository.GetByEventIds(eventIds).Where(ed => ed.IsEnabled == true); var allEventDetails = _eventDetailRepository.GetByEventIds(eventIds).Where(ed => ed.IsEnabled == true); var allEventAttributes = _eventAttributeRepository.GetByEventDetailIds(allEventDetails.Select(s => s.Id)); var allEventTicketDetails = _eventTicketDetailRepository.GetAllByEventDetailIds(allEventDetails.Select(s => s.Id)); var allEventTicketDetailTicketCategoryTypeMapping = _eventTicketDetailTicketCategoryTypeMappingRepository.GetByEventTicketDetails(allEventTicketDetails.Select(s => s.Id).ToList()).Where(s => s.TicketCategoryTypeId == 2); allEventTicketDetails = allEventTicketDetails.Where(s => allEventTicketDetailTicketCategoryTypeMapping.All(p => p.EventTicketDetailId != s.Id)); var allLiveEventDetails = _liveEventDetailRepository.GetAllByEventIds(eventIds.ToList()); var allEventRatings = _ratingRepository.GetByEventIds(eventIds); var venueMapping = _venueRepository.GetByVenueIds(allEventDetails.Select(ed => ed.VenueId).Distinct()) .ToDictionary(v => v.Id); var eventDetailsMapping = allEventDetails.GroupBy(ed => ed.EventId) .ToDictionary(g => g.Key, g => g.ToList()); var eventCategoryMapping = eventCategoryMappings.GroupBy(ed => ed.EventId) .ToDictionary(g => g.Key, g => g.ToList()); var eventRatingMapping = allEventRatings.GroupBy(ed => ed.EventId) .ToDictionary(g => g.Key, g => g.ToList()); var cityIds = venueMapping.Values.Select(s => s.CityId).Distinct(); var allCities = _cityRepository.GetByCityIds(cityIds); var cityMapping = allCities.ToDictionary(c => c.Id); var stateId = cityMapping.Values.Select(c => c.StateId).Distinct(); var stateMapping = _stateRepository.GetByStateIds(stateId) .ToDictionary(s => s.Id); var countryIdList = stateMapping.Values.Select(s => s.CountryId).Distinct(); var countryMapping = _countryRepository.GetByCountryIds(countryIdList) .ToDictionary(c => c.Id); if (query.IsCountryLandingPage) { if (countryIdList.ToList().Any()) { countryDescription = _countryDescriptionRepository.GetByCountryId(countryIdList.ToList().ElementAt(0)); countryContents = _countryContentMappingRepository.GetByCountryId(countryIdList.ToList().ElementAt(0)).ToList(); } } if (query.IsCityLandingPage) { if (cityIds.ToList().Any()) { var cities = _cityRepository.GetAllByName(allCities.ElementAt(0).Name); foreach (var currentCity in allCities) { cityDescription = _cityDescriptionRepository.GetBycityId(currentCity.Id); if (cityDescription != null) { break; } } } } var eventsBySortOrder = new List <FIL.Contracts.DataModels.Event>(); foreach (var item in siteEvents) { var events = categoryEvents.FirstOrDefault(w => w.Id == item.EventId); if (events != null) { eventsBySortOrder.Add(AutoMapper.Mapper.Map <FIL.Contracts.DataModels.Event>(events)); } } eventsBySortOrder = eventsBySortOrder.Where(s => !s.IsTokenize).ToList(); var CategoryEventData = eventsBySortOrder.Select(ce => { try { var eventObj = eventMapping[ce.Id]; var EventCategory = eventObj.EventCategoryId.ToString(); var parentCategory = ""; var eventDetails = eventDetailsMapping[ce.Id]; var eventAttribute = allEventAttributes.Where(s => s.EventDetailId == eventDetails.FirstOrDefault().Id).FirstOrDefault(); var eventTicketDetails = allEventTicketDetails.Where(s => eventDetails.Exists(p => p.Id == s.EventDetailId)); var eventCategoryMap = eventCategoryMapping[ce.Id]; if (eventCategoryMap.Any()) { var eventCategory = _eventCategoryRepository.Get(eventCategoryMap.FirstOrDefault().EventCategoryId); if (eventCategory != null) { EventCategory = eventCategory.Slug; var parentCategoryModel = _eventCategoryRepository.Get(eventCategory.EventCategoryId); parentCategory = parentCategoryModel.Slug; } } List <FIL.Contracts.DataModels.Rating> eventRatings; if (eventRatingMapping.ContainsKey(ce.Id)) { eventRatings = eventRatingMapping[ce.Id]; } else { eventRatings = null; } var eventDetailIdList = eventDetails.Select(s => s.Id).Distinct().ToList(); var eventTicketDetailIdList = eventTicketDetails.Select(s => s.Id).Distinct().ToList(); var venues = eventDetails.Select(s => s.VenueId).Distinct().Select(v => venueMapping[v]); var cities = venues.Select(s => s.CityId).Distinct().Select(c => cityMapping[c]); var states = cities.Select(s => s.StateId).Distinct().Select(s => stateMapping[s]); var countries = states.Select(s => s.CountryId).Distinct().Select(c => countryMapping[c]); var eventTicketAttributeMapping = new List <Contracts.DataModels.EventTicketAttribute> { _eventTicketAttributeRepository.GetMaxPriceByEventTicketDetailId(eventTicketDetailIdList), _eventTicketAttributeRepository.GetMinPriceByEventTicketDetailId(eventTicketDetailIdList) }; var currencyMapping = _currencyTypeRepository.GetByCurrencyId(eventTicketAttributeMapping.Where(s => s.IsEnabled == true).ToList().First().CurrencyId); List <string> eventCatMappings = new List <string>(); var eventCategoryDataModel = _eventCategoryRepository.GetByIds(eventCategoryMap.Select(s => s.EventCategoryId)); foreach (var eventCat in eventCategoryDataModel) { eventCatMappings.Add(eventCat.DisplayName); } var localDateTime = eventDetails.FirstOrDefault().StartDateTime.DayOfWeek + ", " + eventDetails.FirstOrDefault().StartDateTime.ToString(@"MMM dd, yyyy HH:mm", new CultureInfo("en-US")).ToUpper(); if (eventAttribute != null) { localDateTime = eventDetails.FirstOrDefault().StartDateTime.DayOfWeek + ", " + _localTimeZoneConvertProvider.ConvertToLocal(eventDetails.FirstOrDefault().StartDateTime, eventAttribute.TimeZone).ToString(@"MMM dd, yyyy HH:mm", new CultureInfo("en-US")).ToUpper(); } return(new CategoryEventContainer { CategoryEvent = Mapper.Map <Contracts.Models.CategoryEvent>(ce), EventType = eventObj.EventTypeId.ToString(), EventCategory = EventCategory, City = Mapper.Map <IEnumerable <City> >(cities), State = Mapper.Map <IEnumerable <State> >(states), Country = Mapper.Map <IEnumerable <Country> >(countries), Event = Mapper.Map <Event>(eventObj), EventDetail = Mapper.Map <IEnumerable <EventDetail> >(eventDetails), Rating = Mapper.Map <IEnumerable <Rating> >(eventRatings), CurrencyType = Mapper.Map <CurrencyType>(currencyMapping), Venue = Mapper.Map <IEnumerable <Venue> >(venues), EventTicketAttribute = Mapper.Map <IEnumerable <EventTicketAttribute> >(eventTicketAttributeMapping), EventCategories = eventCatMappings, LocalStartDateTime = localDateTime, TimeZoneAbbrivation = eventAttribute != null ? eventAttribute.TimeZoneAbbreviation : "UTC", EventFrequencyType = eventDetails.FirstOrDefault().EventFrequencyType, ParentCategory = parentCategory, LiveEventDetail = allLiveEventDetails.Where(s => s.EventId == ce.Id).FirstOrDefault() }); } catch (Exception e) { return(new CategoryEventContainer { }); } }); return(new FeelCategoryEventQueryResult { CategoryEvents = CategoryEventData.ToList(), CountryDescription = Mapper.Map <Contracts.Models.CountryDescription>(countryDescription), CityDescription = cityDescription, CountryContentMapping = Mapper.Map <List <CountryContentMapping> >(countryContents) }); } catch (Exception e) { return(new FeelCategoryEventQueryResult { }); } }