Ejemplo n.º 1
0
        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()
                }
            });
        }
Ejemplo n.º 2
0
        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
                {
                });
            }
        }