예제 #1
0
        public void Close()
        {
            if (GetCurrentBalance() > Amount.Create(0))
            {
                throw new AccountCannotBeClosedException($"The account {Id} can not be closed because it has funds.");
            }

            Raise(ClosedDomainEvent.Create(this));
        }
예제 #2
0
        public async Task Delete(ClosedDomainEvent domainEvent)
        {
            string deleteSQL =
                @"DELETE FROM [Transaction] WHERE AccountId = @Id;
                      DELETE FROM Account WHERE Id = @Id;";

            var id = new SqlParameter("@Id", domainEvent.AggregateRootId);

            int affectedRows = await context.Database.ExecuteSqlCommandAsync(
                deleteSQL, id);
        }
예제 #3
0
        public void Close()
        {
            if (Transactions.GetCurrentBalance() > 0)
            {
                throw new AccountCannotBeClosedException($"The account {Id} can not be closed because it has funds.");
            }

            var domainEvent = new ClosedDomainEvent(
                Id,
                Version
                );

            Raise(domainEvent);
        }
예제 #4
0
        public async Task Delete(ClosedDomainEvent domainEvent)
        {
            using (IDbConnection db = new SqlConnection(connectionString))
            {
                string deleteSQL =
                    @"DELETE FROM [Transaction] WHERE AccountId = @Id;
                      DELETE FROM Account WHERE Id = @Id;";

                DynamicParameters deleteParameters = new DynamicParameters();
                deleteParameters.Add("@id", domainEvent.AggregateRootId);

                int rowsAffected = await db.ExecuteAsync(deleteSQL, deleteParameters);
            }
        }
예제 #5
0
        public async Task Delete(ClosedDomainEvent domainEvent)
        {
            Account account = await mongoContext
                              .Accounts
                              .Find(e => e.Id == domainEvent.AggregateRootId)
                              .SingleOrDefaultAsync();

            if (account == null)
            {
                throw new AccountNotFoundException($"The account {domainEvent.AggregateRootId} does not exists or is already closed.");
            }

            if (account.Version != domainEvent.Version)
            {
                throw new TransactionConflictException(account, domainEvent);
            }

            await mongoContext.Accounts.DeleteOneAsync(e => e.Id == account.Id);
        }
예제 #6
0
 protected void When(ClosedDomainEvent domainEvent)
 {
 }