Example #1
0
        public void TestAddDepositToAccountEvent()
        {
            var accountGuid = Guid.NewGuid();
            var depositId   = Guid.NewGuid();
            var eventGuid   = Guid.NewGuid();
            var addDepositToAccountEvent = new AddDepositToAccountEvent {
                EventGuid = eventGuid,
                ItemGuid  = accountGuid,
                DepositId = depositId
            };
            var accountAggregate = new AccountAggregate();

            accountAggregate.From(new List <IEvent>()
            {
                addDepositToAccountEvent
            });

            Assert.Single(accountAggregate.DepositsGuides);
            Assert.Equal(depositId, accountAggregate.DepositsGuides.First());
        }
Example #2
0
        public override void Handle(ICommand item)
        {
            var createDepositCommand = (CreateDepositCommand)item;
            var accountId            = createDepositCommand.AccountId;

            if (accountId.Equals(Guid.Empty))
            {
                var errorEvent = new ErrorEvent(Guid.NewGuid(), Guid.Empty, createDepositCommand, "Account Guid empty");
                _eventPublisher.Publish(errorEvent);
                return;
            }

            var account = _accountAggregateService.Load(accountId);

            if (account.Guid.Equals(Guid.Empty))
            {
                var errorEvent = new ErrorEvent(Guid.NewGuid(), accountId, account, "Account not found");
                _eventPublisher.Publish(errorEvent);
                return;
            }

            var depositGuid = GetDepositGuid();

            var createDepositEvent = new CreateDepositEvent {
                ItemGuid    = depositGuid,
                AccountGuid = accountId
            };

            _eventPublisher.Publish(createDepositEvent);

            var addDepositToAccountEvent = new AddDepositToAccountEvent
            {
                ItemGuid  = accountId,
                DepositId = depositGuid
            };

            _eventPublisher.Publish(addDepositToAccountEvent);
        }