/// <summary> /// This method is to Fetch currency conversion data for historical dates /// </summary> /// <param name="currencyBase"></param> /// <param name="apiURL"></param> /// <param name="accessKey"></param> /// <returns></returns> public async Task <APIResponse> GetCurrencyConversionDataByDate(CurrencyBase currencyBase, string apiURL, string accessKey) { string uRl = apiURL + currencyBase.ExchangeRateDate.ToString("yyyy-MM-dd") + "?access_key=" + accessKey + "&base=" + currencyBase.BaseCurrency + "&symbols=" + currencyBase.ConvertCurrency; return(await GetAPIResponse(uRl)); }
/// <summary> /// This method is to execute historical date currency conversion /// </summary> /// <returns></returns> public async Task HistoricalCurrencyConversion() { CurrencyBase currencyBase = new CurrencyBase(); Console.Clear(); Console.BackgroundColor = ConsoleColor.DarkBlue; Console.WriteLine("-------------------------Fetch currency data by date-----------------"); Console.ResetColor(); string inputBaseCurrencyMessage = "Please enter base currency data in 3 character ISO format[Example:'EUR']"; currencyBase.BaseCurrency = GetCurrencyCode(inputBaseCurrencyMessage); string baseCurrencyMessage = "Please enter amount in {0}:" + currencyBase.BaseCurrency; currencyBase.BaseAmount = ReadDouble(baseCurrencyMessage); string inputConvertedCurrencyMessage = "Please enter converted currency data in 3 character ISO format[Example:'EUR']"; currencyBase.ConvertCurrency = GetCurrencyCode(inputConvertedCurrencyMessage); Console.WriteLine("Do you want to enter historical date?(Y/N)"); if (Console.ReadKey().Key == ConsoleKey.Y) { string dateMessage = "Please enter date in YYYY-MM-DD format"; currencyBase.ExchangeRateDate = ReadDatetime(dateMessage); } else { currencyBase.ExchangeRateDate = DateTime.Now; } APIResponse aPIResponse = await _aPIInteraction.GetCurrencyConversionDataByDate(currencyBase, _configuration.GetValue <string>("URL"), _configuration.GetValue <string>("AccessKey")); ProcessCurrencyCalculationResponse(aPIResponse, currencyBase); }
/// <summary> /// Сохранить валюту. /// </summary> /// <param name="Currency">Сохраняемая валюта.</param> /// <returns>Сохраненная валюта с заполненным идентификатором</returns> public Guid Save(CurrencyBase currency) { using (var uow = CreateUnitOfWork()) { return(uow.CurrencyRepository.Save(currency)); } }
/// <summary> /// Fetches the rates based on historical date /// </summary> /// <param name="baseCur"></param> /// <param name="toCur"></param> /// <param name="baseAmount"></param> /// <param name="date"></param> /// <returns></returns> public async Task <ExchangeAPIResponse> GetHistoricalRates(string baseCur, string toCur, string baseAmount, string date) { ExchangeAPIResponse exchangeResponse = new ExchangeAPIResponse(); CurrencyBase currencyBase = new CurrencyBase(); currencyBase.BaseAmount = _calculationHelper.CheckIfDouble(baseAmount); DateTime?checkDate = _calculationHelper.CheckIfDatetime(date); if (checkDate != null && !double.IsNaN(currencyBase.BaseAmount)) { currencyBase.BaseCurrency = baseCur; currencyBase.ConvertCurrency = toCur; currencyBase.ExchangeRateDate = Convert.ToDateTime(checkDate); APIResponse aPIResponse = await _aPIInteraction.GetCurrencyConversionDataByDate(currencyBase, _configuration.GetValue <string>("URL"), _configuration.GetValue <string>("AccessKey")); return(SendLatestRatesResponse(aPIResponse, currencyBase)); } else { exchangeResponse.IsSuccess = false; exchangeResponse.Description = "Parameters passed are not correct"; exchangeResponse.StatusCode = HttpStatusCode.BadRequest; return(exchangeResponse); } }
/// <summary> /// This method is to show the final output /// </summary> /// <param name="aPIResponse">Response from the API</param> /// <param name="curBase">Input Output data</param> public void ProcessCurrencyCalculationResponse(APIResponse aPIResponse, CurrencyBase curBase) { if (aPIResponse.success) { curBase.ConvertedAmount = _calculationHelper.GetConvertedAmount(aPIResponse.rates, curBase); Console.WriteLine("The converted amount in {0} is " + curBase.ConvertedAmount, curBase.ConvertCurrency); } else if (aPIResponse.error != null) { Console.WriteLine("There was an error as:" + aPIResponse.error.info); } else { Console.WriteLine("There was an error processing the data"); } Console.WriteLine("Press any key to exit"); Console.ReadKey(); }
/// <summary> /// This method sends the response with the new calculation /// </summary> /// <param name="aPIResponse"></param> /// <param name="currencyBase"></param> /// <returns></returns> public ExchangeAPIResponse SendLatestRatesResponse(APIResponse aPIResponse, CurrencyBase currencyBase) { ExchangeAPIResponse exchangeAPIResponse = new ExchangeAPIResponse(); if (aPIResponse.success) { exchangeAPIResponse.IsSuccess = true; exchangeAPIResponse.StatusCode = HttpStatusCode.OK; exchangeAPIResponse.ConvertedAmount = _calculationHelper.GetConvertedAmount(aPIResponse.rates, currencyBase); exchangeAPIResponse.Date = (currencyBase.ExchangeRateDate == DateTime.MinValue) ? String.Empty : currencyBase.ExchangeRateDate.ToString("yyyy-MM-dd"); exchangeAPIResponse.Description = "Successfully found rates"; } else { exchangeAPIResponse.IsSuccess = false; exchangeAPIResponse.Description = (aPIResponse.error != null)? aPIResponse.error.info: "There was an error processing the data"; exchangeAPIResponse.StatusCode = HttpStatusCode.BadRequest; } return(exchangeAPIResponse); }
/// <summary> /// This method is to execute current date currency conversion /// </summary> /// <returns></returns> public async Task CurrencyConversion() { CurrencyBase curBase = new CurrencyBase(); Console.Clear(); Console.BackgroundColor = ConsoleColor.DarkBlue; Console.WriteLine("-------------------------Fetch latest currency data-----------------"); Console.ResetColor(); string inputBaseCurrencyMessage = "Please enter base currency data in 3 character ISO format[Example:'EUR']"; curBase.BaseCurrency = GetCurrencyCode(inputBaseCurrencyMessage); string baseCurrencyMessage = "Please enter amount in {0}:" + curBase.BaseCurrency; curBase.BaseAmount = ReadDouble(baseCurrencyMessage); string inputConvertedCurrencyMessage = "Please enter converted currency data in 3 character ISO format[Example:'EUR']"; curBase.ConvertCurrency = GetCurrencyCode(inputConvertedCurrencyMessage); APIResponse aPIResponse = await _aPIInteraction.GetCurrencyConversionData(curBase, _configuration.GetValue <string>("URL"), _configuration.GetValue <string>("AccessKey")); ProcessCurrencyCalculationResponse(aPIResponse, curBase); }
/// <summary> /// This method is to fetch latest rates /// </summary> /// <param name="baseCur"></param> /// <param name="toCur"></param> /// <param name="baseAmount"></param> /// <returns></returns> public async Task <ExchangeAPIResponse> GetLatestConversion(string baseCur, string toCur, string baseAmount) { ExchangeAPIResponse exchangeResponse = new ExchangeAPIResponse(); CurrencyBase currencyBase = new CurrencyBase(); currencyBase.BaseAmount = _calculationHelper.CheckIfDouble(baseAmount); if (!double.IsNaN(currencyBase.BaseAmount)) { currencyBase.BaseCurrency = baseCur; currencyBase.ConvertCurrency = toCur; APIResponse aPIResponse = await _aPIInteraction.GetCurrencyConversionData(currencyBase, _configuration.GetValue <string>("URL"), _configuration.GetValue <string>("AccessKey")); return(SendLatestRatesResponse(aPIResponse, currencyBase)); } else { exchangeResponse.IsSuccess = false; exchangeResponse.Description = "Base Amount is not a valid number"; exchangeResponse.StatusCode = HttpStatusCode.BadRequest; return(exchangeResponse); } }
public Guid Save([FromBody] CurrencyBase currency) { return(CurrencyService.Save(currency)); }
/// <summary> /// This method is to Get the amount in the converted currency based on fetched rates /// </summary> /// <param name="keyValueCurrencyData"></param> /// <param name="currencyBase"></param> /// <returns></returns> public double GetConvertedAmount(Dictionary <string, string> keyValueCurrencyData, CurrencyBase currencyBase) { if (keyValueCurrencyData.TryGetValue(currencyBase.ConvertCurrency, out string exchangeRate)) { double checkedDouble = CheckIfDouble(exchangeRate); if (checkedDouble != double.NaN) { return(CheckIfDouble(exchangeRate) * currencyBase.BaseAmount); } } return(double.NaN); }
public double GetNumOfCoinMiningPerDay(string coinSymbol, PoolName poolName) { if (MyHashRate == -1) { throw new Exception("Invaid MyHashRate property. Please specify MyHashRate property before calling GetNumOfCoinMiningPerDay method."); } CurrencyBase coin = null; if (poolName == PoolName.Bsod) { coin = _bsodCurrencies[coinSymbol]; } else if (poolName == PoolName.Gos) { coin = _gosCurrencies[coinSymbol]; } else if (poolName == PoolName.IceMining) { coin = _iceCurrencies[coinSymbol]; } else if (poolName == PoolName.Zerg || poolName == PoolName.PhiPhi) { throw new ArgumentException("Invalid argument zerg pool not implement.", "poolName"); } if (coin != null) { long poolHashRate = coin.hashrate ?? 0; if (coin.hashrate_shared != null && coin.hashrate_shared != 0) { poolHashRate = coin.hashrate_shared ?? 0; } if (poolHashRate == 0) { Debug.WriteLine(string.Format("Can not calculate num of coin per day because nobody mining {0} coin.", coinSymbol)); return(0); } if (coin.hashRateDiscountPercent > 0) // กรณีเหรียญที่แรงแกว่งมากๆ ให้ discount จำนวนที่ขุดได้ลง { poolHashRate = poolHashRate + (poolHashRate * coin.hashRateDiscountPercent / 100); } double rewardPerBlock = PoolReward.GetPoolOverrideReward(poolName, coinSymbol); if (rewardPerBlock == -1) { rewardPerBlock = double.Parse(coin.reward); } int blockAllDay = coin.h24_blocks; if (coin.h24_blocks_shared != -1) { blockAllDay = coin.h24_blocks_shared; } double receiveCoinsPerDay = 0; if (MyHashRate > poolHashRate) // test กรณี แรงเรามากกว่าแรง pool { receiveCoinsPerDay = (rewardPerBlock * blockAllDay) * (1 - (poolHashRate / MyHashRate)); } else { // receiveCoinsPerDay = (rewardPerBlock / poolHashRate) * MyHashRate * blockAllDay; receiveCoinsPerDay = (MyHashRate / (double)poolHashRate) * (blockAllDay * rewardPerBlock); } return(receiveCoinsPerDay); } else { Debug.WriteLine(string.Format("Can not load {0} information from {1} pool.", coinSymbol, poolName)); return(0); } }
public Decimal TotalBalance(CurrencyBase currency) { return(Exchanges.Sum(e => e.Balance.Items.Where(b => b.Currency.Key == currency.Key).Sum(x => x.Amount))); }
/// <summary> /// This method is to interact with the currency api of fixer.io and retrieve latest conversion rates /// </summary> /// <param name="currencyBase">Currency Base data for base currency and converted data</param> /// <param name="uRl">URL to check</param> /// <returns></returns> public async Task <APIResponse> GetCurrencyConversionData(CurrencyBase currencyBase, string apiURL, string accessKey) { string uRl = apiURL + "latest?access_key=" + accessKey + "&base=" + currencyBase.BaseCurrency + "&symbols=" + currencyBase.ConvertCurrency; return(await GetAPIResponse(uRl)); }
/// <summary> /// Create a new bill. /// </summary> /// <param name="currency">Currency for the new bill.</param> public BillBase(CurrencyBase currency) { Currency = currency; }