Example #1
0
        public async Task Verify(Guid circleId)
        {
            BetrayedCircle betrayedCircle = await _betrayedCircleRepository.FindBetrayedCircleByCircleId(circleId);

            if (betrayedCircle != null)
            {
                throw new PlayersMayNotJoinOrBetrayCircleThatHasBeenBetrayedException();
            }
        }
        public async Task <BetrayedCircle> BetrayCircle(
            Guid betrayedCircleId,
            Guid circleId,
            Guid playerId,
            string key
            )
        {
            await _circleKeyMustBeValidInOrderToJoinOrBetrayCircleRule.Verify(circleId, key);

            await _playersMayNotJoinOrBetrayCircleThatHasBeenBetrayedRule.Verify(circleId);

            await _playersMayNotJoinOrBetrayTheirOwnCircleRule.Verify(circleId, playerId);

            await _playersMayNotBetrayCircleTheyAreAMemberOfRule.Verify(circleId, playerId);

            BetrayedCircle betrayedCircle = new BetrayedCircle(betrayedCircleId, circleId, playerId);

            betrayedCircle.RaiseEvent(new CircleBetrayedEvent(betrayedCircle.Id, betrayedCircle.CircleId, betrayedCircle.PlayerId));
            return(betrayedCircle);
        }
        public async Task HandleAsync(BetrayCircleCommand command)
        {
            Player player = await _playerStore.LoadAsync(command.PlayerId);

            if (player == null)
            {
                throw new PlayerDoesNotExistException();
            }
            Circle circle = await _circleStore.LoadAsync(command.CircleId);

            if (circle == null)
            {
                throw new CircleDoesNotExistException();
            }
            BetrayedCircle betrayedCircle = await _betrayCircleService.BetrayCircle(
                command.BetrayedCircleId,
                command.CircleId,
                command.PlayerId,
                command.Key
                );

            await _betrayedCircleStore.SaveAsync(betrayedCircle);
        }