/// <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); }