public Amount RetrieveBalance(LoyaltyPointAccountIdentity identity, Currency requiredCurrency)
        {
            log.Trace("Retrieving balance for '{0}' using implementation '{1}'.", identity, decorated.GetType().Name);

            var result = decorated.RetrieveBalance(identity, requiredCurrency);

            return(result);
        }
        public Amount RetrieveBalance(LoyaltyPointAccountIdentity identity, Currency requiredCurrency)
        {
            if (!transactions.Any())
            {
                return(new Amount(requiredCurrency, 0));
            }

            var result = transactions.Aggregate((a, b) =>
                                                new Amount(requiredCurrency, currencyAdaptor.Adapt(b, requiredCurrency).Value + a.Value));

            return(result);
        }
        public LoyaltyPointAccount(
            IAccountState createdState,
            IAccountState activeState,
            IAccountState inactiveState,
            LoyaltyPointAccountIdentity identity,
            Currency primaryCurrency)
        {
            this.createdState  = CtorGuard.NotNull(createdState, nameof(createdState));
            this.activeState   = CtorGuard.NotNull(activeState, nameof(activeState));
            this.inactiveState = CtorGuard.NotNull(inactiveState, nameof(inactiveState));

            this.identity        = identity;
            this.primaryCurrency = primaryCurrency;

            SetState(createdState);
        }
 public void Deposit(LoyaltyPointAccountIdentity identity, Amount amount)
 {
     transactions.Add(amount);
 }
 public void Deposit(LoyaltyPointAccountIdentity identity, Amount amount)
 {
     log.Warning("Request to deposit Loyalty Points into Inactive account rejected. The deposited amount of '{0}' will not reflect in account '{1}'.", amount, identity);
 }
        public Amount RetrieveBalance(LoyaltyPointAccountIdentity identity, Currency requiredCurrency)
        {
            log.Warning("Request to retrieve balance of '{0}' ignored. A default balance of '{1}' will be returned.", identity, defaultBalance);

            return(defaultBalance);
        }