Exemple #1
0
        // Summary:
        //   Get the current exchange rate from the API repository and converts as ShowConversionDto.
        //
        // Parameters:
        //   createConversionDto:
        //     An instance to CreateConversionDto.
        // Return:
        //   showConversionDto
        //     An instance to ShowConversionDto
        private async Task <ShowConversionDto> CalculateValue(CreateConversionDto createConversionDto)
        {
            LatestExchangeRates latestExchangeRates = await _currencyRepository.GetLatestConversionRatesByCurrency("EUR");

            ShowConversionDto showConversionDto = new ShowConversionDto(createConversionDto.FromCurrency, createConversionDto.ToCurrency, createConversionDto.Value);

            showConversionDto.ExchangeRate = CalculateExchangeRateValue(showConversionDto, latestExchangeRates);

            return(showConversionDto);
        }
Exemple #2
0
        // Summary:
        //   Manually converting and mapping the exchange rates from default base currency vaalue to the target currency.
        //
        // Parameters:
        //   LatestExchangeRates:
        //     An instance to LatestExchangeRates.
        //   ShowConversionDto:
        //     An instance to ShowConversionDto.
        // Return:
        //   float
        //     Converted final exchange rate
        private float CalculateExchangeRateValue(ShowConversionDto showConversionDto, LatestExchangeRates latestExchangeRates)
        {
            float fromVsBaseExchangeRate = showConversionDto.FromCurrency == latestExchangeRates.Base ? 1 : FindExchangeRate(latestExchangeRates, showConversionDto.FromCurrency);
            float baseVsToExchangeRate   = showConversionDto.ToCurrency == latestExchangeRates.Base ? 1 : FindExchangeRate(latestExchangeRates, showConversionDto.ToCurrency);

            if (fromVsBaseExchangeRate > 0 && baseVsToExchangeRate > 0)
            {
                float finalExchangeRate = (1 / fromVsBaseExchangeRate) * baseVsToExchangeRate;
                return(finalExchangeRate);
            }

            throw new NotSupportedException($"Conversion from {showConversionDto.FromCurrency} to {showConversionDto.ToCurrency} is not supported at the moment");
        }
        public async Task <ActionResult <ShowConversionDto> > ConvertSourceToDestinationCurrency([FromBody] CreateConversionDto createConversionDto)
        {
            try
            {
                ShowConversionDto showConversionDto = await this._currencyService.Convert(createConversionDto);

                if (showConversionDto.FromCurrency is null)
                {
                    // need to log
                    return(NotFound());
                }

                return(Ok(showConversionDto));
            }
            catch (Exception)
            {
                // need to log
                return(NotFound());
            }
        }
Exemple #4
0
        // Summary:
        //   It internally converts the base currency to the targer currency since API only supports EUR
        //
        // Parameters:
        //   latestExchangeRates:
        //     An instance to LatestExchangeRates
        //   string:
        //     Currency code.
        // Return:
        //   showExchangeRateDto
        //     An instance to ShowExchangeRateDto
        private ShowExchangeRateDto ConvertAsBaseCurrency(LatestExchangeRates latestExchangeRates, string currencyCode)
        {
            ShowExchangeRateDto convertedRates = new ShowExchangeRateDto()
            {
                Base      = currencyCode,
                Timestamp = latestExchangeRates.Timestamp,
                Date      = latestExchangeRates.Date,
                Rates     = new Dictionary <string, float>()
            };

            if (latestExchangeRates.Base == currencyCode)
            {
                convertedRates.Rates = latestExchangeRates.Rates;
                return(convertedRates);
            }

            foreach (KeyValuePair <string, float> entry in latestExchangeRates.Rates.ToList())
            {
                ShowConversionDto showConversionDto = new ShowConversionDto(currencyCode, entry.Key, 0);
                convertedRates.Rates.Add(entry.Key, CalculateExchangeRateValue(showConversionDto, latestExchangeRates));
            }

            return(convertedRates);
        }
Exemple #5
0
        // Summary:
        //   It will convert the given value from source currency to target
        //
        // Parameters:
        //   createConversionDto:
        //     An instance to CreateConversionDto.
        // Return:
        //   showConversionDto
        //     An instance to ShowConversionDto
        public async Task <ShowConversionDto> Convert(CreateConversionDto createConversionDto)
        {
            ShowConversionDto showConversionDto = await CalculateValue(createConversionDto);

            return(showConversionDto);
        }