private async Task <List <string> > GetChannelClientsAsync(ChannelRequest request) { // TODO: Change this code. Recommended to use Clients.Group() var members = await _channelMemberService.GetChannelMembersAsync(request); return(await FilterClients(members, request.ClientConnectionId)); }
protected async Task <List <string> > GetNotMutedChannelMembersConnectionsAsync(Guid channelId, IReadOnlyCollection <Guid> notifyMemberIds) { var channelMembers = await _channelMemberService.GetChannelMembersAsync(channelId); var notMutedMemberIds = channelMembers.Where(x => !x.IsMuted && notifyMemberIds.Contains(x.MemberId)) .Select(x => x.MemberId) .ToList(); var notMutedConnectionClientIds = (await MemberService.GetClientsByMemberIds(notMutedMemberIds)) .Select(x => x.ConnectionClientId) .ToList(); return(notMutedConnectionClientIds); }
public async Task JoinToChannelAsync(JoinToChannelRequest request) { var channel = await UnitOfWork.ChannelRepository.GetChannelByIdAsync(request.ChannelId); Ensure.That(channel) .WithException(x => new NotFoundException(new ErrorDto(ErrorCode.NotFound, "Channel does not exist."))) .IsNotNull(); var member = await UnitOfWork.MemberRepository.GetMemberBySaasUserIdAsync(request.SaasUserId); Ensure.That(member) .WithException(x => new ServiceException(new ErrorDto(ErrorCode.NotFound, "Member does not exist."))) .IsNotNull(); var members = await _channelMemberService.GetChannelMembersAsync(new ChannelRequest(request.SaasUserId, request.ChannelId)); if (members.Any(x => x.MemberId == member.Id)) { throw new ConflictException(new ErrorDto(ErrorCode.ConflictError, "You have been already joined to the channel.")); } // Throw if the channel is private but the user isn't allowed if (channel.Type == ChannelType.Private && channel.CreatorId != member.Id) { throw new ConflictException(new ErrorDto(ErrorCode.ConflictError, "This channel is not available for you.")); } var channelMember = new ChannelMembers { ChannelId = channel.Id, MemberId = member.Id, LastReadMessageId = null }; using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { await UnitOfWork.ChannelMemberRepository.AddChannelMemberAsync(channelMember); await UnitOfWork.ChannelRepository.IncrementChannelMembersCount(channel.Id); transactionScope.Complete(); } }