Ejemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RewardAndRecognitionActivityHandler"/> class.
        /// </summary>
        /// <param name="logger">The logger.</param>
        /// <param name="localizer">The current cultures' string localizer.</param>
        /// <param name="telemetryClient">The application insights telemetry client. </param>
        /// <param name="options">The options.</param>
        /// <param name="telemetryOptions">Telemetry instrumentation key</param>
        /// <param name="configureAdminStorageProvider">Provider for fetching information about admin details from storage table.</param>
        /// <param name="teamStorageProvider">Provider for fetching information about team details from storage table.</param>
        /// <param name="awardsStorageProvider">Provider for fetching information about awards from storage table.</param>
        /// <param name="endorseDetailStorageProvider">Provider for fetching information about endorsement details from storage table.</param>
        /// <param name="rewardCycleStorageProvider">Provider for fetching information about active award cycle details from storage table.</param>
        /// <param name="nominateDetailSearchService">Provider to search nomination details in Azure search service.</param>
        /// <param name="botAdapter">Bot adapter.</param>
        /// <param name="microsoftAppCredentials">MicrosoftAppCredentials of bot.</param>
        public RewardAndRecognitionActivityHandler(
            ILogger <RewardAndRecognitionActivityHandler> logger,
            IStringLocalizer <Strings> localizer,
            TelemetryClient telemetryClient,
            IOptions <RewardAndRecognitionActivityHandlerOptions> options,
            IOptions <TelemetryOptions> telemetryOptions,
            IConfigureAdminStorageProvider configureAdminStorageProvider,
            ITeamStorageProvider teamStorageProvider,
            IAwardsStorageProvider awardsStorageProvider,
            IEndorsementsStorageProvider endorseDetailStorageProvider,
            IRewardCycleStorageProvider rewardCycleStorageProvider,
            IAwardNominationSearchService nominateDetailSearchService,
            BotFrameworkAdapter botAdapter,
            MicrosoftAppCredentials microsoftAppCredentials)
        {
            options          = options ?? throw new ArgumentNullException(nameof(options));
            telemetryOptions = telemetryOptions ?? throw new ArgumentNullException(nameof(telemetryOptions));

            this.logger                        = logger;
            this.localizer                     = localizer;
            this.telemetryClient               = telemetryClient;
            this.options                       = options;
            this.instrumentationKey            = telemetryOptions.Value.InstrumentationKey;
            this.configureAdminStorageProvider = configureAdminStorageProvider;
            this.teamStorageProvider           = teamStorageProvider;
            this.awardsStorageProvider         = awardsStorageProvider;
            this.endorseDetailStorageProvider  = endorseDetailStorageProvider;
            this.rewardCycleStorageProvider    = rewardCycleStorageProvider;
            this.nominateDetailSearchService   = nominateDetailSearchService;
            this.botAdapter                    = botAdapter;
            this.microsoftAppCredentials       = microsoftAppCredentials;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Get the results from Azure search service and populate the result (card + preview).
        /// </summary>
        /// <param name="applicationBasePath">Application base URL.</param>
        /// <param name="query">Query which the user had typed in message extension search.</param>
        /// <param name="cycleId">Current reward cycle id.</param>
        /// <param name="teamId">Get the results based on the TeamId.</param>
        /// <param name="count">Count for pagination.</param>
        /// <param name="skip">Skip for pagination.</param>
        /// <param name="searchService">Search service.</param>
        /// <param name="localizer">The current cultures' string localizer.</param>
        /// <returns><see cref="Task"/> Returns MessagingExtensionResult which will be used for providing the card.</returns>
        public static async Task <MessagingExtensionResult> GetSearchResultAsync(
            string applicationBasePath,
            string query,
            string cycleId,
            string teamId,
            int?count,
            int?skip,
            IAwardNominationSearchService searchService,
            IStringLocalizer <Strings> localizer)
        {
            MessagingExtensionResult composeExtensionResult = new MessagingExtensionResult
            {
                Type             = "result",
                AttachmentLayout = AttachmentLayoutTypes.List,
                Attachments      = new List <MessagingExtensionAttachment>(),
            };

            IList <NominationEntity> searchServiceResults;

            searchServiceResults = await searchService?.SearchNominationsAsync(query, cycleId, teamId, count, skip);

            if (searchServiceResults != null)
            {
                foreach (var nominatedDetail in searchServiceResults)
                {
                    AdaptiveCard endorseAdaptiveCard = new AdaptiveCard(new AdaptiveSchemaVersion(Constants.AdaptiveCardVersion))
                    {
                        Body = new List <AdaptiveElement>
                        {
                            new AdaptiveColumnSet
                            {
                                Columns = new List <AdaptiveColumn>
                                {
                                    new AdaptiveColumn
                                    {
                                        Width = AdaptiveColumnWidth.Stretch,
                                        Items = new List <AdaptiveElement>
                                        {
                                            new AdaptiveTextBlock
                                            {
                                                Text = nominatedDetail.AwardName,
                                                HorizontalAlignment = AdaptiveHorizontalAlignment.Left,
                                                Weight = AdaptiveTextWeight.Bolder,
                                                Size   = AdaptiveTextSize.Large,
                                                Wrap   = true,
                                            },
                                        },
                                    },
                                    new AdaptiveColumn
                                    {
                                        Width = AdaptiveColumnWidth.Auto,
                                        Items = new List <AdaptiveElement>
                                        {
                                            new AdaptiveImage
                                            {
                                                Url = string.IsNullOrEmpty(nominatedDetail.AwardImageLink) ? new Uri(string.Format(CultureInfo.InvariantCulture, "{0}/Content/DefaultAwardImage.png", applicationBasePath)) : new Uri(nominatedDetail.AwardImageLink),
                                                HorizontalAlignment = AdaptiveHorizontalAlignment.Right,
                                                PixelHeight         = PixelHeightAwardImage,
                                                PixelWidth          = PixelWidthAwardImage,
                                            },
                                        },
                                    },
                                },
                            },
                            new AdaptiveTextBlock
                            {
                                Text = nominatedDetail.NomineeNames,
                                Wrap = true,
                                HorizontalAlignment = AdaptiveHorizontalAlignment.Left,
                                Weight  = AdaptiveTextWeight.Bolder,
                                Spacing = AdaptiveSpacing.Large,
                            },
                            new AdaptiveTextBlock
                            {
                                Text = localizer.GetString("NominatedByText", nominatedDetail.NominatedByName),
                                Wrap = true,
                                HorizontalAlignment = AdaptiveHorizontalAlignment.Left,
                                Spacing             = AdaptiveSpacing.Default,
                            },
                            new AdaptiveTextBlock
                            {
                                Text = nominatedDetail.ReasonForNomination,
                                Wrap = true,
                                HorizontalAlignment = AdaptiveHorizontalAlignment.Left,
                                Spacing             = AdaptiveSpacing.Default,
                            },
                        },
                        Actions = new List <AdaptiveAction>
                        {
                            new AdaptiveSubmitAction
                            {
                                Title = localizer.GetString("EndorseButtonText"),
                                Data  = new AdaptiveCardAction
                                {
                                    MsteamsCardAction = new CardAction
                                    {
                                        Type = Constants.FetchActionType,
                                    },
                                    Command = Constants.EndorseAction,
                                    NomineeUserPrincipalNames = nominatedDetail.NomineeUserPrincipalNames,
                                    AwardName        = nominatedDetail.AwardName,
                                    AwardId          = nominatedDetail.AwardId,
                                    NomineeNames     = nominatedDetail.NomineeNames,
                                    NomineeObjectIds = nominatedDetail.NomineeObjectIds,
                                    RewardCycleId    = nominatedDetail.RewardCycleId,
                                },
                            },
                        },
                    };

                    ThumbnailCard previewCard = new ThumbnailCard
                    {
                        Title    = HttpUtility.HtmlEncode(nominatedDetail.NomineeNames),
                        Subtitle = $"<p style='font-weight: 600;'>{HttpUtility.HtmlEncode(nominatedDetail.AwardName)}</p>",
                    };

                    composeExtensionResult.Attachments.Add(new Attachment
                    {
                        ContentType = AdaptiveCard.ContentType,
                        Content     = endorseAdaptiveCard,
                    }.ToMessagingExtensionAttachment(previewCard.ToAttachment()));
                }
            }

            return(composeExtensionResult);
        }