Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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();
            }
        }