Esempio n. 1
0
        private void Handle(Deposit cmd)
        {
            var sender = Sender;

            if (cmd.To != _state.AccountNumber)
            {
                throw new NotFoundException("Invalid Account Number");
            }

            if (cmd.Amount <= 0)
            {
                throw new ValidationException("Invalid Deposit Amout, it must be greater than zero!");
            }


            var credited = new AccountCredited
            {
                TransactionId = cmd.TransactionId,
                Amount        = cmd.Amount,
                CurrencyDate  = cmd.CurrencyDate,
                From          = cmd.From,
                To            = _accountNumber
            };

            // when last event is persisted, send response
            Persist(credited, e =>
            {
                ApplyEvent(e);
                Respond(sender, "Ok", new[] { credited });
            });
        }
Esempio n. 2
0
 public static IImmutableList <string> GetTopics(this AccountCredited self)
 {
     return(ImmutableArray.CreateRange(
                new[]
     {
         "\\Accounts",
         $"\\Account\\{self.AccountId}",
     }));
 }
Esempio n. 3
0
 public void Apply(AccountCredited @event)
 {
     Transactions.Add(new Transaction()
     {
         Amount      = @event.Amount,
         Id          = @event.Id,
         Type        = "Credit",
         Description = @event.Description
     });
 }
Esempio n. 4
0
        public IImmutableList <string> GetTopics(object message)
        {
            return(message switch
            {
                AccountCreated evt => evt.GetTopics(),
                AccountCredited evt => evt.GetTopics(),
                AccountDebited evt => evt.GetTopics(),

                _ => _onlyRootTopic
            });
        public static object CreateAccountObject(int version)
        {
            object accountObject = null;

            var internalCounter = version + 1;

            {
                const int checkpointVersion = 10;

                var checkPointModVersion = internalCounter % checkpointVersion;
                if (checkPointModVersion == 0)
                {
                    int otherCheckPointsCount = internalCounter / checkpointVersion;

                    var elementsCount = internalCounter / 2;

                    var creditedSum = ComputeSum(20, elementsCount, 20) - ComputeSum(100, otherCheckPointsCount, 100);
                    var debitedSum  = ComputeSum(10, elementsCount, 20);

                    var checkpoint = new AccountCheckPoint(creditedSum, debitedSum);

                    accountObject = checkpoint;
                }
                else
                {
                    var modVersion = internalCounter % 2;
                    if (modVersion == 0)
                    {
                        var credited = new AccountCredited(internalCounter * 10, internalCounter % 17);
                        accountObject = credited;
                    }
                    else
                    {
                        var debited = new AccountDebited(internalCounter * 10, internalCounter % 17);
                        accountObject = debited;
                    }
                }
            }
            return(accountObject);
        }
        public static object CreateAccountObject(int version)
        {
            object accountObject = null;

            var internalCounter = version + 1;
            
            {
                const int checkpointVersion = 10;

                var checkPointModVersion = internalCounter % checkpointVersion;
                if (checkPointModVersion == 0)
                {
                    int otherCheckPointsCount = internalCounter / checkpointVersion;

                    var elementsCount = internalCounter / 2;

                    var creditedSum = ComputeSum(20, elementsCount, 20) - ComputeSum(100, otherCheckPointsCount, 100);
                    var debitedSum = ComputeSum(10, elementsCount, 20);

                    var checkpoint = new AccountCheckPoint(creditedSum, debitedSum);

                    accountObject = checkpoint;
                }
                else
                {
                    var modVersion = internalCounter % 2;
                    if (modVersion == 0)
                    {
                        var credited = new AccountCredited(internalCounter * 10, internalCounter % 17);
                        accountObject = credited;
                    }
                    else
                    {
                        var debited = new AccountDebited(internalCounter * 10, internalCounter % 17);
                        accountObject = debited;
                    }
                }
            }
            return accountObject;
        }
Esempio n. 7
0
 public void Apply(AccountCredited credit)
 {
     credit.Apply(this);
     Console.ForegroundColor = ConsoleColor.Green;
     Console.WriteLine($"Crediting {Owner} {credit.Amount.ToString("C")}: {credit.Description}");
 }
Esempio n. 8
0
 public void Apply(AccountCredited @event)
 {
     Balance          += @event.Amount;
     AvailableBalance += @event.Amount;
 }
Esempio n. 9
0
 public void Handle(AccountCredited accountCredited)
 {
     Balance += accountCredited.Amount;
 }
Esempio n. 10
0
 private void Apply(AccountCredited accountCredited)
 {
     Balance          += accountCredited.Amount;
     AvailableBalance += accountCredited.Amount;
 }
Esempio n. 11
0
 protected void When(AccountCredited e)
 {
     balance += Money.Amount(e.Amount);
 }
Esempio n. 12
0
 private void UpdateState(AccountCredited ac)
 {
     this.accountState.Credit(ac.Amount);
     log.Info($"Account credited by {ac.AccountId}, current state: {this.accountState.CurrentAmount}");
 }
Esempio n. 13
0
 private void When(AccountCredited @event)
 {
     this.Balance = this.Balance + @event.CreditAmount;
 }
Esempio n. 14
0
 private void Apply(AccountCredited risedEvent) => Balance += risedEvent.Amount;