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(); } }
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(); } }