/// <summary> /// Get LnD team events as per user search text. /// </summary> /// <param name="searchParametersDto">Search parameters entered by user.</param> /// <returns>List of events.</returns> public async Task <IEnumerable <EventEntity> > GetEventsAsync(Models.SearchParametersDto searchParametersDto) { searchParametersDto = searchParametersDto ?? throw new ArgumentNullException(nameof(searchParametersDto), "Search parameters are null"); searchParametersDto.SkipRecords = searchParametersDto.PageCount * this.botOptions.Value.EventsPageSize; searchParametersDto.SearchResultsCount = this.botOptions.Value.EventsPageSize; var searchParameters = this.InitializeSearchParameters(searchParametersDto); var events = await this.eventSearchService.GetEventsAsync(searchParametersDto.SearchString.EscapeSpecialCharacters(), searchParameters); return(events); }
/// <summary> /// Initialization of search service parameters which will help in searching the documents. /// </summary> /// <param name="searchParametersDto">Search parameters.</param> /// <returns>Represents an search parameter object.</returns> private Azure.Search.Models.SearchParameters InitializeSearchParameters(Models.SearchParametersDto searchParametersDto) { Azure.Search.Models.SearchParameters searchParameters = new Azure.Search.Models.SearchParameters() { Top = searchParametersDto.SearchResultsCount.HasValue && searchParametersDto.SortByFilter != (int)SortBy.PopularityByRecentCollaborators ? searchParametersDto.SearchResultsCount : ApiSearchResultCount, Skip = searchParametersDto.SkipRecords.HasValue && searchParametersDto.SortByFilter != (int)SortBy.PopularityByRecentCollaborators ? searchParametersDto.SkipRecords : 0, Select = searchParametersDto.SearchScope == EventSearchType.SearchByName ? new[] { nameof(EventEntity.Name), nameof(EventEntity.EventId), } : new[] { nameof(EventEntity.Audience), nameof(EventEntity.CategoryId), nameof(EventEntity.Description), nameof(EventEntity.EndTime), nameof(EventEntity.EventId), nameof(EventEntity.MaximumNumberOfParticipants), nameof(EventEntity.Name), nameof(EventEntity.Photo), nameof(EventEntity.SelectedColor), nameof(EventEntity.StartDate), nameof(EventEntity.StartTime), nameof(EventEntity.TeamId), nameof(EventEntity.Type), nameof(EventEntity.MandatoryAttendees), nameof(EventEntity.AutoRegisteredAttendees), nameof(EventEntity.RegisteredAttendeesCount), nameof(EventEntity.Venue), nameof(EventEntity.RegisteredAttendees), }, SearchFields = new[] { nameof(EventEntity.Name), nameof(EventEntity.Description) }, // default search event by name and description Filter = this.filterQueryGenerator.GetStrategy(searchParametersDto.SearchScope)?.GenerateFilterQuery(searchParametersDto), }; searchParameters.OrderBy = searchParametersDto.SortByFilter == (int)SortBy.Recent ? new[] { $"{nameof(EventEntity.CreatedOn)} desc" } : new[] { $"{nameof(EventEntity.RegisteredAttendeesCount)} desc" }; var filterConditions = this.GetFilterCondition(searchParametersDto.CreatedByFilter, searchParametersDto.CategoryFilter); if (!string.IsNullOrEmpty(filterConditions)) { searchParameters.Filter += $" and {filterConditions}"; } return(searchParameters); }
/// <summary> /// Initialization of search service parameters which will help in searching the documents. /// </summary> /// /// <param name="searchParametersDto">Search parameters entered by user.</param> /// <returns>Represents an search parameter object.</returns> private Azure.Search.Models.SearchParameters InitializeSearchParameters(Models.SearchParametersDto searchParametersDto) { Azure.Search.Models.SearchParameters searchParameters = new Azure.Search.Models.SearchParameters() { Top = searchParametersDto.SearchResultsCount ?? ApiSearchResultCount, Skip = searchParametersDto.SkipRecords ?? 0, Select = new[] { nameof(EventEntity.Audience), nameof(EventEntity.CategoryId), nameof(EventEntity.CreatedBy), nameof(EventEntity.CreatedOn), nameof(EventEntity.Description), nameof(EventEntity.EndTime), nameof(EventEntity.EventId), nameof(EventEntity.IsAutoRegister), nameof(EventEntity.MaximumNumberOfParticipants), nameof(EventEntity.MeetingLink), nameof(EventEntity.Name), nameof(EventEntity.Photo), nameof(EventEntity.StartDate), nameof(EventEntity.StartTime), nameof(EventEntity.Status), nameof(EventEntity.TeamId), nameof(EventEntity.Type), nameof(EventEntity.UpdatedBy), nameof(EventEntity.UpdatedOn), nameof(EventEntity.Venue), nameof(EventEntity.EndDate), nameof(EventEntity.IsRegistrationClosed), nameof(EventEntity.RegisteredAttendeesCount), }, SearchFields = new[] { nameof(EventEntity.Name), nameof(EventEntity.Description) }, // default search event by name Filter = this.filterQueryGenerator.GetStrategy(searchParametersDto.SearchScope).GenerateFilterQuery(searchParametersDto), }; if (searchParametersDto.SearchScope == EventSearchType.GetCategoryEvent) { searchParameters.Top = 1; searchParameters.Select = new[] { nameof(EventEntity.CategoryId), nameof(EventEntity.EventId), }; } searchParameters.OrderBy = new[] { $"{nameof(EventEntity.CreatedOn)} desc" }; return(searchParameters); }
/// <summary> /// Get events as per user search text. /// </summary> /// <param name="searchParametersDto">Search parameters entered by user.</param> /// <returns>List of events.</returns> public async Task <IEnumerable <EventEntity> > GetEventsAsync(Models.SearchParametersDto searchParametersDto) { searchParametersDto = searchParametersDto ?? throw new ArgumentNullException(nameof(searchParametersDto), "Search parameter is null"); if (searchParametersDto.SearchScope != EventSearchType.DayBeforeReminder && searchParametersDto.SearchScope != EventSearchType.WeekBeforeReminder && string.IsNullOrEmpty(searchParametersDto.UserObjectId)) { return(Enumerable.Empty <EventEntity>()); } searchParametersDto.SkipRecords = searchParametersDto.SortByFilter != (int)SortBy.PopularityByRecentCollaborators && searchParametersDto.SearchResultsCount != null ? searchParametersDto.PageCount * searchParametersDto.SearchResultsCount : null; var searchParameters = this.InitializeSearchParameters(searchParametersDto); var events = await this.eventSearchService.GetEventsAsync(searchParametersDto.SearchString.EscapeSpecialCharacters(), searchParameters); if (events.IsNullOrEmpty() || searchParametersDto.SearchScope == EventSearchType.DayBeforeReminder || searchParametersDto.SearchScope == EventSearchType.WeekBeforeReminder) { return(events); } foreach (var eventDetails in events) { eventDetails.IsMandatoryForLoggedInUser = this.CheckIfMandatoryForLoggedInUser(eventDetails, searchParametersDto.UserObjectId); eventDetails.IsLoggedInUserRegistered = this.CheckIfLoggedInUserRegistered(eventDetails, searchParametersDto.UserObjectId); if (searchParametersDto.SortByFilter == (int)SortBy.PopularityByRecentCollaborators && !searchParametersDto.RecentCollaboratorIds.IsNullOrEmpty()) { if (!string.IsNullOrEmpty(eventDetails.RegisteredAttendees)) { var registeredAttendees = eventDetails.RegisteredAttendees.Split(";"); var recentCollaborators = searchParametersDto.RecentCollaboratorIds.Intersect <string>(registeredAttendees); eventDetails.LoggedInUserCollaboratorsCount = recentCollaborators?.Count() ?? 0; } if (!string.IsNullOrEmpty(eventDetails.AutoRegisteredAttendees)) { var autoRegisteredAttendees = eventDetails.AutoRegisteredAttendees.Split(";"); var recentCollaborators = searchParametersDto.RecentCollaboratorIds.Intersect <string>(autoRegisteredAttendees); eventDetails.LoggedInUserCollaboratorsCount += recentCollaborators?.Count() ?? 0; } } } return(searchParametersDto.SortByFilter == (int)SortBy.PopularityByRecentCollaborators ? events.OrderByDescending(userEvent => userEvent.LoggedInUserCollaboratorsCount).Skip(searchParametersDto.SkipRecords ?? 0).Take((int)searchParametersDto.SearchResultsCount) : events); }