コード例 #1
0
        public async Task <Result> CreateForCounterparty(Counterparty counterparty, Currencies currency)
        {
            return(await Result.Success()
                   .Ensure(IsCounterpartyVerified, "Account creation is only available for verified counterparties")
                   .Map(CreateAccount)
                   .Tap(LogSuccess)
                   .OnFailure(LogFailure));

            bool IsCounterpartyVerified() => new[] { CounterpartyStates.ReadOnly, CounterpartyStates.FullAccess }.Contains(counterparty.State);


            async Task <CounterpartyAccount> CreateAccount()
            {
                var account = new CounterpartyAccount
                {
                    Balance        = 0,
                    CounterpartyId = counterparty.Id,
                    Currency       = Currencies.USD, // Only USD currency is supported
                    Created        = _dateTimeProvider.UtcNow()
                };

                _context.CounterpartyAccounts.Add(account);
                await _context.SaveChangesAsync();

                return(account);
            }

            void LogSuccess(CounterpartyAccount account)
            {
                _logger.LogCounterpartyAccountCreationSuccess(
                    $"Successfully created account for counterparty: '{counterparty.Id}', account id: {account.Id}");
            }

            void LogFailure(string error)
            {
                _logger.LogCounterpartyAccountCreationFailure($"Failed to create account for counterparty {counterparty.Id}, error {error}");
            }
        }
コード例 #2
0
 private bool AreCurrenciesMatch(CounterpartyAccount account, PaymentCancellationData data) => account.Currency == data.Currency;
コード例 #3
0
 private bool AreCurrenciesMatch(CounterpartyAccount account, MoneyAmount amount) => account.Currency == amount.Currency;
コード例 #4
0
 private bool AreCurrenciesMatch(CounterpartyAccount account, PaymentData paymentData) => account.Currency == paymentData.Currency;