Esempio n. 1
0
        public async Task <bool> Handle(QuitCircleCommand request, CancellationToken cancellationToken)
        {
            var myId = Guid.Parse(_httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value);

            var userCircle = await _userCircleRelationRepository.GetRelationAsync(request.CircleId, myId);

            if (userCircle == null)
            {
                return(true);
            }

            var circle = await _circleRepository.GetByIdAsync(request.CircleId);

            if (circle.OwnerId == myId)
            {
                throw new ClientException("操作失败", new List <string> {
                    $"User {myId} is the owner of the circle {request.CircleId}, can't quit circle."
                });
            }

            userCircle.Quit();
            _userCircleRelationRepository.Remove(userCircle);

            return(await _userCircleRelationRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken));
        }
Esempio n. 2
0
        public async Task <bool> Handle(AddCircleMemberCommand request, CancellationToken cancellationToken)
        {
            var circle = await _circleRepository.GetByIdAsync(request.CircleId);

            if (circle == null)
            {
                throw new ClientException("操作失败", new List <string> {
                    $"Circle {request.CircleId} dos not exist."
                });
            }

            var myId = Guid.Parse(_httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value);

            if (circle.OwnerId != myId)
            {
                throw new ClientException("当前用户不是圈主", new List <string> {
                    $"Circle {request.CircleId} does not belong to user {myId}"
                });
            }

            // 添加并发送用户已入圈事件
            if (await AddCircleMemberAsync(circle.Id, request.UserId, _userCircleRelationRepository, cancellationToken))
            {
                var messageSession = (IMessageSession)_serviceProvider.GetService(typeof(IMessageSession));
                await SendJoinedCircleEventAsync(circle, request.UserId, messageSession, _logger);

                return(true);
            }

            throw new ApplicationException("操作失败");
        }
Esempio n. 3
0
        public async Task Handle(JoinedCircleDomainEvent notification, CancellationToken cancellationToken)
        {
            _logger.LogInformation("----- Handling JoinedCircleDomainEvent: at {AppName} - ({@DomainEvent})", Program.AppName, notification);

            var circle = await _circleRepository.GetByIdAsync(notification.CircleId);

            circle.IncreaseUserCount();
        }
        public async Task <bool> Handle(JoinCircleCommand request, CancellationToken cancellationToken)
        {
            var myId       = Guid.Parse(_httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value);
            var userCircle = await _userCircleRelationRepository.GetRelationAsync(request.CircleId, myId);

            if (userCircle == null)
            {
                var circle = await _circleRepository.GetByIdAsync(request.CircleId);

                if (circle == null)
                {
                    throw new ClientException("操作失败", new List <string> {
                        $"Circle {request.CircleId} dos not exist."
                    });
                }

                _messageSession = (IMessageSession)_serviceProvider.GetService(typeof(IMessageSession));

                if (circle.VerifyJoin)
                {
                    // 发送用户申请入圈事件
                    await SendAppliedJoinCircleEventAsync(myId, circle, request.Description);

                    return(true);
                }

                // 无需审核,直接入圈,创建user circle关系
                ////await _addCircleMemberCommandHandler.AddCircleMemberAsync(circle, myId, cancellationToken);
                //userCircle = new UserCircleRelation(myId, request.CircleId);
                //_userCircleRelationRepository.Add(userCircle);
                //if (await _userCircleRelationRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken))
                //{
                //    await SendJoinedCircleEventAsync(myId, circle);
                //    return true;
                //}
                //添加并发送用户已入圈事件
                if (await AddCircleMemberCommandHandler.AddCircleMemberAsync(circle.Id, myId, _userCircleRelationRepository, cancellationToken))
                {
                    await AddCircleMemberCommandHandler.SendJoinedCircleEventAsync(circle, myId, _messageSession, _logger);

                    return(true);
                }

                // 保存失败
                throw new ApplicationException("操作失败");
            }

            throw new ClientException("操作失败", new List <string> {
                $"User {myId} is already in circle {request.CircleId}"
            });
        }
Esempio n. 5
0
        public async Task <bool> Handle(UpdateCircleCommand request, CancellationToken cancellationToken)
        {
            var circle = await _circleRepository.GetByIdAsync(request.Id);

            if (circle == null)
            {
                throw new ClientException("圈子不存在");
            }

            var myId = Guid.Parse(_httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value);

            circle.Update(request.Name, request.Description, request.VerifyJoin, request.BackgroundImage, myId);

            return(await _circleRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken));
        }
        public async Task <bool> Handle(MarkGoodPostCommand request, CancellationToken cancellationToken)
        {
            var post = await _postRepository.GetByIdAsync(request.PostId);

            if (post == null)
            {
                throw new ClientException("操作失败", new List <string> {
                    $"Post {request.PostId} does not exist."
                });
            }

            if (post.CircleId == null)
            {
                throw new ClientException("操作失败", new List <string> {
                    $"Post {request.PostId} is not in any circle."
                });
            }

            // 圈子主人必须是当前用户
            var circle = await _circleRepository.GetByIdAsync(post.CircleId.Value);

            var myId = Guid.Parse(_httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value);

            if (circle.OwnerId != myId)
            {
                throw new ClientException("当前用户不是圈主", new List <string> {
                    $"User {myId} is not the owner of circle {circle.Id}"
                });
            }

            if (request.Good)
            {
                post.MarkCircleGood();
            }
            else
            {
                post.UnMarkCircleGood();
            }

            return(await _postRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken));
        }