Exemple #1
0
        Deposit(AcknowledgeCashDeposit cmd)
        => account =>
        {
            if (account.Status != AccountStatus.Active)
            {
                return(Errors.AccountNotActive);
            }

            var evt      = cmd.ToEvent();
            var newState = account.Apply(evt);

            return(evt, newState);
        };
            Validation <Guid> Initialize(CreateAccountWithOptions cmd)
            {
                Guid     id  = generateId();
                DateTime now = DateTime.UtcNow;

                var create = new CreateAccount
                             (
                    Timestamp: now,
                    AccountId: id,
                    Currency: cmd.Currency
                             );

                var depositCash = new AcknowledgeCashDeposit
                                  (
                    Timestamp: now,
                    AccountId: id,
                    Amount: cmd.InitialDepositAccount,
                    BranchId: cmd.BranchId
                                  );

                var setOverdraft = new SetOverdraft
                                   (
                    Timestamp: now,
                    AccountId: id,
                    Amount: cmd.AllowedOverdraft
                                   );

                var transitions =
                    from e1 in Account.Create(create)
                    from e2 in Account.Deposit(depositCash)
                    from e3 in Account.SetOverdraft(setOverdraft)
                    select List <Event>(e1, e2, e3);

                return(transitions(default(AccountState))
                       .Do(t => t.Item1.ForEach(saveAndPublish))
                       .Map(_ => id));
            }