public decimal GetAccountBalance(string account)
 {
     using (CAP_EventSourcingEntities entities = new CAP_EventSourcingEntities())
     {
         DateTime dateOfBusiness = AccountUtility.GetDateOfBusiness(entities);
         DateTime snapshotDate = dateOfBusiness - TimeSpan.FromDays(2.0);
         return AccountUtility.GetAccountBalance(account, snapshotDate, dateOfBusiness, entities);
     }
 }
Esempio n. 2
0
 public decimal GetAccountBalance(string account)
 {
     using (CAP_EventSourcingEntities entities = new CAP_EventSourcingEntities())
     {
         DateTime dateOfBusiness = AccountUtility.GetDateOfBusiness(entities);
         DateTime snapshotDate   = dateOfBusiness - TimeSpan.FromDays(2.0);
         return(AccountUtility.GetAccountBalance(account, snapshotDate, dateOfBusiness, entities));
     }
 }
Esempio n. 3
0
 private static AccountBalance GetSnapshot(string account, DateTime snapshotDate, CAP_EventSourcingEntities entities)
 {
     IQueryable<AccountBalance> snapshots =
         from b in entities.AccountBalances
         where
             b.Account == account &&
             b.DateOfBusiness == snapshotDate
         select b;
     AccountBalance snapshot = snapshots.FirstOrDefault();
     if (snapshot == null)
         throw new ApplicationException("No such account.");
     return snapshot;
 }
Esempio n. 4
0
 // TODO 3c: Query is more complex.
 public static decimal GetAccountBalance(string account, DateTime snapshotDate, DateTime closingDate, CAP_EventSourcingEntities entities)
 {
     AccountBalance snapshot = GetSnapshot(account, snapshotDate, entities);
     IQueryable<decimal?> transfersFrom =
         from t in entities.Transfers
         where
             t.From == account &&
             t.DateOfBusiness > snapshotDate &&
             t.DateOfBusiness <= closingDate
         select (decimal?)t.Amount;
     IQueryable<decimal?> transfersTo =
         from t in entities.Transfers
         where
             t.To == account &&
             t.DateOfBusiness > snapshotDate &&
             t.DateOfBusiness <= closingDate
         select (decimal?)t.Amount;
     return snapshot.Balance - (transfersFrom.Sum() ?? 0.0m) + (transfersTo.Sum() ?? 0.0m);
 }
        // TODO 3d: Command is just an insert.
        public void Transfer(string fromAccount, string toAccount, decimal amount)
        {
            using (CAP_EventSourcingEntities entities = new CAP_EventSourcingEntities())
            {
                DateTime dateOfBusiness = AccountUtility.GetDateOfBusiness(entities);
                DateTime snapshotDate = dateOfBusiness - TimeSpan.FromDays(2.0);
                decimal accountBalance = AccountUtility.GetAccountBalance(fromAccount, snapshotDate, dateOfBusiness, entities);

                if (accountBalance < amount)
                    throw new ApplicationException("Insufficient funds");

                entities.AddToTransfers(new Transfer()
                {
                    From = fromAccount,
                    To = toAccount,
                    Amount = amount,
                    DateOfBusiness = dateOfBusiness
                });

                entities.SaveChanges();
            }
        }
Esempio n. 6
0
        // TODO 3d: Command is just an insert.
        public void Transfer(string fromAccount, string toAccount, decimal amount)
        {
            using (CAP_EventSourcingEntities entities = new CAP_EventSourcingEntities())
            {
                DateTime dateOfBusiness = AccountUtility.GetDateOfBusiness(entities);
                DateTime snapshotDate   = dateOfBusiness - TimeSpan.FromDays(2.0);
                decimal  accountBalance = AccountUtility.GetAccountBalance(fromAccount, snapshotDate, dateOfBusiness, entities);

                if (accountBalance < amount)
                {
                    throw new ApplicationException("Insufficient funds");
                }

                entities.AddToTransfers(new Transfer()
                {
                    From           = fromAccount,
                    To             = toAccount,
                    Amount         = amount,
                    DateOfBusiness = dateOfBusiness
                });

                entities.SaveChanges();
            }
        }
Esempio n. 7
0
 public static DateTime GetDateOfBusiness(CAP_EventSourcingEntities entities)
 {
     return entities.Current.Single().DateOfBusiness;
 }
Esempio n. 8
0
        private static AccountBalance GetSnapshot(string account, DateTime snapshotDate, CAP_EventSourcingEntities entities)
        {
            IQueryable <AccountBalance> snapshots =
                from b in entities.AccountBalances
                where
                b.Account == account &&
                b.DateOfBusiness == snapshotDate
                select b;
            AccountBalance snapshot = snapshots.FirstOrDefault();

            if (snapshot == null)
            {
                throw new ApplicationException("No such account.");
            }
            return(snapshot);
        }
Esempio n. 9
0
        // TODO 3c: Query is more complex.
        public static decimal GetAccountBalance(string account, DateTime snapshotDate, DateTime closingDate, CAP_EventSourcingEntities entities)
        {
            AccountBalance        snapshot      = GetSnapshot(account, snapshotDate, entities);
            IQueryable <decimal?> transfersFrom =
                from t in entities.Transfers
                where
                t.From == account &&
                t.DateOfBusiness > snapshotDate &&
                t.DateOfBusiness <= closingDate
                select(decimal?) t.Amount;

            IQueryable <decimal?> transfersTo =
                from t in entities.Transfers
                where
                t.To == account &&
                t.DateOfBusiness > snapshotDate &&
                t.DateOfBusiness <= closingDate
                select(decimal?) t.Amount;

            return(snapshot.Balance - (transfersFrom.Sum() ?? 0.0m) + (transfersTo.Sum() ?? 0.0m));
        }
Esempio n. 10
0
 public static DateTime GetDateOfBusiness(CAP_EventSourcingEntities entities)
 {
     return(entities.Current.Single().DateOfBusiness);
 }