Beispiel #1
0
        private async Task TransferAsync(
            IReadOnlyList <BalanceEntity> balances)
        {
            for (var i = 0; i < balances.Count; i++)
            {
                var balance = balances[i];

                try
                {
                    var cashInId = await _migrationRepository.GetOrCreateCashInOutIdAsync(balance.ClientId, _options.TargetAssetId);

                    var cashOutId = await _migrationRepository.GetOrCreateCashInOutIdAsync(balance.ClientId, _options.SourceAssetId);

                    var cashInAmount  = ((double)balance.Balance * _options.Multiplier).TruncateDecimalPlaces((int)_options.TargetAssetAccuracy);
                    var cashOutAmount = (double)balance.Balance * -1;

                    var cashInResult = await _meClient.CashInOutAsync
                                       (
                        id : cashInId.ToString(),
                        clientId : balance.ClientId,
                        assetId : _options.TargetAssetId,
                        amount : cashInAmount
                                       );

                    if (cashInResult.Status != MeStatusCodes.Ok && cashInResult.Status != MeStatusCodes.Duplicate)
                    {
                        _log.Warning($"CashIn [{cashInAmount}] for client [{balance.ClientId}] completed with [{cashInResult.Status.ToString()}] status.");
                    }

                    var cashOutResult = await _meClient.CashInOutAsync
                                        (
                        id : cashOutId.ToString(),
                        clientId : balance.ClientId,
                        assetId : _options.SourceAssetId,
                        amount : cashOutAmount
                                        );

                    if (cashOutResult.Status != MeStatusCodes.Ok || cashOutResult.Status != MeStatusCodes.Duplicate)
                    {
                        _log.Warning($"CashOut [{cashOutAmount}] completed for client {balance.ClientId} with [{cashOutResult.Status.ToString()}] status.");
                    }

                    _log.Info($"Completed {i + 1} of {balances.Count} transfers.");
                }
                catch (Exception e)
                {
                    _log.Error(e, $"Failed to transfer balance [{balance.Balance}] for client [{balance.ClientId}].");
                }
            }
        }