예제 #1
0
        public async Task <IActionResult> Get()
        {
            var response = await _serviceRates.Get();

            if (response.ResponseH.Result != ResultTypeHelper.ResultMsg.OK)
            {
                var message = new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    Content = new StringContent(response.ResponseH.ErrText)
                };
                return(BadRequest(message));
            }
            else
            {
                return(Ok(response.DataH));
            }
        }
예제 #2
0
        public async Task <IActionResult> GetAssetPairRates(string assetPairId)
        {
            if (string.IsNullOrWhiteSpace(assetPairId))
            {
                return(BadRequest(ErrorResponse.Create($"{nameof(assetPairId)} has invalid value")));
            }

            try
            {
                AssetPairRate rate = await _ratesService.Get(assetPairId);

                return(Ok(Mapper.Map <AssetPairResponseModel>(rate)));
            }
            catch (Exception ex)
            {
                _log.Error(ex, null, $"request: {new {assetPairId}.ToJson()}");

                if (ex is ApiRequestException apiException)
                {
                    return(apiException.GenerateErrorResponse());
                }
                throw;
            }
        }
예제 #3
0
        public async Task <bool> LoadOnlineData(bool forceLoad = false)
        {
            async Task <bool> LoadRates()
            {
                var rates = await ratesService.Get();

                if (rates == null)
                {
                    online = false;
                    return(false);
                }

                Rates = rates.Select(r => new Rate(r.AssetId, r.TargetCurrency, r.Amount, r.Fee)).ToArray();
                // if rates changed
                await ratesData.SaveRates(Rates);

                return(true);
            }

            async Task <bool> LoadUserAssets()
            {
                var userAssets = await userAssetsService.Get(secureStorage.GetUserId().Value);

                if (userAssets == null)
                {
                    online = false;
                    return(false);
                }

                UserAssets = userAssets.Select(a => new UserAsset {
                    AssetId = a.AssetId, Balance = a.Balance, CurrentReceiveAddress = a.CurrentReceiveAddress, Favorited = a.Favorited
                }).ToArray();

                await userData.SaveUserAssets(UserAssets);

                return(true);
            }

            async Task <bool> LoadCards()
            {
                var cards = await userCardsService.Get(secureStorage.GetUserId().Value);

                if (cards == null)
                {
                    online = false;
                    return(false);
                }

                Cards = cards.Select(c => new Card(c.Id, c.Name, c.CardNumberHint, (CardState)(int)c.State, c.Balance, c.BalanceCurrency)).ToArray();
                // if cards changed
                await cardData.SaveCards(Cards);

                return(true);
            }

            async Task <Boolean> LoadBucketAmount()
            {
                var bucketAmount = (await bucketService.GetBalance(secureStorage.GetUserId().Value));

                if (bucketAmount == null)
                {
                    online = false;
                    return(false);
                }

                BucketAmount = bucketAmount.Amount;
                await bucketData.SaveBucketInfo(new BucketInfo { Amount = BucketAmount });

                return(true);
            }

            lock (_lock)
            {
                if (online)
                {
                    return(false);
                }
                online = true;
            }

            try
            {
                if (!await LoadRates())
                {
                    return(false);
                }

                if (!await LoadCards())
                {
                    return(false);
                }

                if (!await LoadBucketAmount())
                {
                    return(false);
                }

                if (!await LoadUserAssets())
                {
                    return(false);
                }

                return(true);
            }
            catch
            {
                online = false;
                throw;
            }
        }