public void DisplayConversationInfo(ConversationType type, string id) { this.lab_conversationId.Text = id; this.lab_convarsationType.Text = type.ToString(); }
private void ChatBox_OnChatCreatedEvent(ConversationType type, string id) { this.lab_convarsationType.Text = type.ToString(); this.lab_conversationId.Text = id; }
public async Task <PollDto> VotePollAsync(Guid pollId, long conversationId, ConversationType conversationType, List <PollVoteVm> options, long votingUserId) { if (!await conversationsService.IsUserInConversationAsync(conversationType, conversationId, votingUserId).ConfigureAwait(false)) { throw new PermissionDeniedException("User is not in conversation."); } using (MessengerDbContext context = contextFactory.Create()) { var poll = await context.Polls .Include(opt => opt.Options) .ThenInclude(opt => opt.PollOptionVotes) .FirstOrDefaultAsync(opt => opt.PollId == pollId && opt.ConvertsationId == conversationId && opt.ConversationType == conversationType) .ConfigureAwait(false); if (poll == null) { throw new ObjectDoesNotExistsException($"Poll not found (Poll Id: {pollId}, {conversationType.ToString()}Id: {conversationId})."); } if (options == null || !options.Any()) { foreach (var option in poll.Options) { option.PollOptionVotes = option.PollOptionVotes.Where(vote => vote.UserId != votingUserId).ToList(); } } List <PollOptionVote> newVotes = new List <PollOptionVote>(); List <PollOptionVote> removedVotes = new List <PollOptionVote>(); foreach (var voteOption in options) { var option = poll.Options.FirstOrDefault(opt => opt.OptionId == voteOption.OptionId); if (option != null && voteOption.Sign != null && voteOption.Sign.Data != null) { if (!option.PollOptionVotes.Any(vote => vote.UserId == votingUserId)) { if (poll.SignRequired) { if (voteOption.Sign == null || voteOption.Sign.Data == null || !voteOption.Sign.Data.Any()) { throw new InvalidSignException($"Vote №{voteOption.OptionId} is not signed."); } var signKey = await context.Keys .FirstOrDefaultAsync(key => key.KeyId == voteOption.Sign.KeyId && key.Type == KeyType.SignAsymKey) .ConfigureAwait(false); if (signKey == null) { throw new ObjectDoesNotExistsException($"Key not found (Key Id: {voteOption.Sign.KeyId}."); } } newVotes.Add(new PollOptionVote { ConversationId = conversationId, ConversationType = conversationType, OptionId = voteOption.OptionId, UserId = votingUserId, PollId = pollId, Sign = voteOption.Sign?.Data, SignKeyId = voteOption.Sign?.KeyId }); } else { removedVotes.Add(option.PollOptionVotes .FirstOrDefault(opt => opt.UserId == votingUserId && opt.OptionId == voteOption.OptionId)); } } else { if (!option.PollOptionVotes.Any(vote => vote.UserId == votingUserId)) { newVotes.Add(new PollOptionVote { ConversationId = conversationId, ConversationType = conversationType, OptionId = voteOption.OptionId, UserId = votingUserId, PollId = pollId }); } else { removedVotes.Add(option.PollOptionVotes .FirstOrDefault(opt => opt.UserId == votingUserId && opt.OptionId == voteOption.OptionId)); } } foreach (var vote in newVotes) { option.PollOptionVotes.Add(vote); } foreach (var vote in removedVotes) { option.PollOptionVotes.Remove(vote); } } if (!poll.MultipleSelection && poll.Options.Count(opt => opt.PollOptionVotes.Any(vote => vote.UserId == votingUserId)) > 1) { throw new InvalidOperationException("Multiple voting is not allowed in current poll."); } context.Polls.Update(poll); await context.SaveChangesAsync().ConfigureAwait(false); return(PollConverter.GetPollDto(poll)); } }