public void Invite(CircleInviteCommand command)
        {
            using (var transaction = new TransactionScope())
            {
                var fromUserId = new UserId(command.FromUserId);
                var fromUser   = userRepository.Find(fromUserId);
                if (fromUser == null)
                {
                    throw new UserNotFoundException(fromUserId, "초대한 사용자를 찾지 못했음");
                }

                var invitedUserId = new UserId(command.InvitedUserId);
                var invitedUser   = userRepository.Find(invitedUserId);
                if (invitedUser == null)
                {
                    throw new UserNotFoundException(invitedUserId, "초대받은 사용자를 찾지 못했음");
                }

                var circleId = new CircleId(command.CircleId);
                var circle   = circleRepository.Find(circleId);
                if (circle == null)
                {
                    throw new CircleNotFoundException(circleId, "서클을 찾지 못했음");
                }

                // 서클에 소속된 사용자가 서클장을 포함 30명 이하인지 확인
                if (circle.Members.Count >= 29)
                {
                    throw new CircleFullException(circleId);
                }

                var circleInvitation = new CircleInvitation(circle, fromUser, invitedUser);
                circleInvitationRepository.Save(circleInvitation);
                transaction.Complete();
            }
        }
Exemple #2
0
        public void Invite(CircleInviteCommand command)
        {
            using (var transaction = new TransactionScope())
            {
                var fromUserId = new UserId(command.FromUserId);
                var fromUser   = userRepository.Find(fromUserId);
                if (fromUser == null)
                {
                    throw new UserNotFoundException(fromUserId, "招待元ユーザが見つかりませんでした。");
                }

                var invitedUserId = new UserId(command.InvitedUserId);
                var invitedUser   = userRepository.Find(invitedUserId);
                if (invitedUser == null)
                {
                    throw new UserNotFoundException(invitedUserId, "招待先ユーザが見つかりませんでした。");
                }

                var circleId = new CircleId(command.CircleId);
                var circle   = circleRepository.Find(circleId);
                if (circle == null)
                {
                    throw new CircleNotFoundException(circleId, "サークルが見つかりませんでした。");
                }

                // サークルのオーナーを含めて30名か確認
                if (circle.Members.Count >= 29)
                {
                    throw new CircleFullException(circleId);
                }

                var circleInvitation = new CircleInvitation(circle, fromUser, invitedUser);
                circleInvitationRepository.Save(circleInvitation);
                transaction.Complete();
            }
        }