Exemplo n.º 1
0
        /// <summary>
        /// Validates endorsement status.
        /// </summary>
        /// <param name="turnContext">Context object containing information cached for a single turn of conversation with a user.</param>
        /// <param name="valuesforTaskModule">Get the binded values from the card.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        /// <returns>Returns the true, if endorsement is successful, else false.</returns>
        private async Task <bool> CheckEndorseStatusAsync(ITurnContext <IInvokeActivity> turnContext, AdaptiveCardAction valuesforTaskModule, CancellationToken cancellationToken)
        {
            var teamsDetails         = turnContext.Activity.TeamsGetTeamInfo();
            var teamsChannelAccounts = await TeamsInfo.GetTeamMembersAsync(turnContext, teamsDetails.Id, cancellationToken);

            var userDetails   = teamsChannelAccounts.Where(member => member.AadObjectId == turnContext.Activity.From.AadObjectId).FirstOrDefault();
            var endorseEntity = await this.endorseDetailStorageProvider.GetEndorsementsAsync(teamsDetails.Id, valuesforTaskModule.RewardCycleId, valuesforTaskModule.NomineeObjectIds);

            var result = endorseEntity.Where(row => row.EndorsedForAwardId == valuesforTaskModule.AwardId && row.EndorsedByObjectId == userDetails.AadObjectId).FirstOrDefault();

            if (result == null)
            {
                var endorsedetails = new EndorsementEntity
                {
                    TeamId                      = teamsDetails.Id,
                    EndorsedByObjectId          = userDetails.AadObjectId,
                    EndorsedByUserPrincipalName = userDetails.UserPrincipalName,
                    EndorsedForAward            = valuesforTaskModule.AwardName,
                    EndorseeUserPrincipalName   = valuesforTaskModule.NomineeUserPrincipalNames,
                    EndorseeObjectId            = valuesforTaskModule.NomineeObjectIds,
                    EndorsedOn                  = DateTime.UtcNow,
                    EndorsedForAwardId          = valuesforTaskModule.AwardId,
                    AwardCycle                  = valuesforTaskModule.RewardCycleId,
                };

                return(await this.endorseDetailStorageProvider.StoreOrUpdateEndorsementDetailAsync(endorsedetails));
            }

            return(false);
        }
        /// <summary>
        /// Store or update endorsement in Azure table storage.
        /// </summary>
        /// <param name="endorseEntity">Represents endorse entity used for storage and retrieval.</param>
        /// <returns><see cref="Task"/> that represents endorse entity is saved or updated.</returns>
        public async Task <bool> StoreOrUpdateEndorsementDetailAsync(EndorsementEntity endorseEntity)
        {
            await this.EnsureInitializedAsync();

            endorseEntity             = endorseEntity ?? throw new ArgumentNullException(nameof(endorseEntity));
            endorseEntity.RowUniqueId = Guid.NewGuid().ToString();
            TableOperation addOrUpdateOperation = TableOperation.InsertOrReplace(endorseEntity);
            var            result = await this.CloudTable.ExecuteAsync(addOrUpdateOperation);

            return(result.HttpStatusCode == (int)HttpStatusCode.NoContent);
        }