/// <summary> /// Get the results from Azure Search service and populate the result (card + preview). /// </summary> /// <param name="query">Query which the user had typed in Messaging Extension search field.</param> /// <param name="commandId">Command id to determine which tab in Messaging Extension has been invoked.</param> /// <param name="userObjectId">Azure Active Directory id of the user.</param> /// <param name="count">Number of search results to return.</param> /// <param name="localDateTime">Indicates local date and time of end user.</param> /// <returns><see cref="Task"/>Returns Messaging Extension result object, which will be used for providing the card.</returns> public async Task <MessagingExtensionResult> GetPostsAsync( string query, string commandId, string userObjectId, int count, DateTimeOffset?localDateTime) { MessagingExtensionResult composeExtensionResult = new MessagingExtensionResult { Type = "result", AttachmentLayout = AttachmentLayoutTypes.List, Attachments = new List <MessagingExtensionAttachment>(), }; IEnumerable <EventEntity> trainingResults; SearchParametersDto searchParamsDto; // commandId should be equal to Id mentioned in Manifest file under composeExtensions section. switch (commandId?.ToUpperInvariant()) { case BotCommands.RecentTrainingsCommandId: searchParamsDto = new SearchParametersDto { SearchString = query, SearchResultsCount = count, SearchScope = EventSearchType.AllPublicPrivateEventsForUser, UserObjectId = userObjectId, }; trainingResults = await this.userEventSearchService.GetEventsAsync(searchParamsDto); await this.BindCategoryDetails(trainingResults); composeExtensionResult = MessagingExtensionCard.GetCard(trainingResults, this.applicationBasePath, this.localizer, localDateTime); break; case BotCommands.PopularTrainingsCommandId: searchParamsDto = new SearchParametersDto { SearchString = query, SearchResultsCount = count, SearchScope = EventSearchType.AllPublicPrivateEventsForUser, UserObjectId = userObjectId, SortByFilter = (int)SortBy.PopularityByRegisteredUsers, }; trainingResults = await this.userEventSearchService.GetEventsAsync(searchParamsDto); await this.BindCategoryDetails(trainingResults); composeExtensionResult = MessagingExtensionCard.GetCard(trainingResults, this.applicationBasePath, this.localizer, localDateTime); break; default: break; } return(composeExtensionResult); }
/// <summary> /// Get messaging extension search result based on user search query and command. /// </summary> /// <param name="teamId">Team Id where bot is installed.</param> /// <param name="searchQuery">User search query text.</param> /// <param name="commandId">Messaging extension command id e.g. recentActivities or allActivities.</param> /// <param name="count">Count for pagination in Messaging extension.</param> /// <param name="skip">Skip for pagination in Messaging extension.</param> /// <returns>A task that represents compose extension result with activities.</returns> private async Task <MessagingExtensionResult> GetSearchResultAsync(string teamId, string searchQuery, string commandId, int count, int skip) { try { MessagingExtensionResult composeExtensionResult = new MessagingExtensionResult(); IList <GroupActivityEntity> groupActivities = await this.groupActivityStorageHelper.GetGroupActivityEntityDetailAsync(teamId); // On initial run searchQuery value is "true". if (searchQuery != "true") { this.logger.LogInformation($"search query entered by user is {searchQuery} for {teamId}"); groupActivities = groupActivities.Where(x => x.GroupActivityTitle.Contains(searchQuery, StringComparison.OrdinalIgnoreCase)).ToList(); } // If no activities found for a team. if (groupActivities.Count() <= 0) { composeExtensionResult.Type = MessagingExtensionMessageType; composeExtensionResult.Text = Strings.NoActivitiesFoundText; this.logger.LogInformation($"No activities found for {teamId}"); return(composeExtensionResult); } composeExtensionResult.Type = MessagingExtenstionResultType; composeExtensionResult.AttachmentLayout = AttachmentLayoutTypes.List; switch (commandId) { case RecentCommandId: composeExtensionResult.Attachments = MessagingExtensionCard.GetGroupActivityCard(groupActivities.OrderByDescending(groupActivity => groupActivity.Timestamp).Skip(skip).Take(count).ToList()); break; case AllCommandId: composeExtensionResult.Attachments = MessagingExtensionCard.GetGroupActivityCard(groupActivities.Skip(skip).Take(count).ToList()); break; } return(composeExtensionResult); } catch (Exception ex) { this.logger.LogError(ex, $"Error while generating result for messaging extension for {commandId} for {teamId}"); return(null); } }