public async Task <ConvertResponse> Convert(ConvertRequest request) { try { FindCurrencyRequest finCurrencyRequest = new FindCurrencyRequest { Currencies = new CurrencyIdentifier[] { request.From, request.To } }; var findCurrencyResponse = await currencyService.FindCurrency(finCurrencyRequest); if (findCurrencyResponse.Success) { var from = findCurrencyResponse.Currencies[0]; var to = findCurrencyResponse.Currencies[1]; var value = from.ConverterToOtherCurrency(to, request.Amount); return(new ConvertResponse { Success = true, Amount = request.Amount, From = from, To = to, Value = value }); } return(new ConvertResponse { Success = false, Error = findCurrencyResponse.Error }); } catch (Exception e) { return(new ConvertResponse { Success = false, Error = new Error { Message = e.Message, Type = "Unspected" } }); } }
public async Task <FindCurrencyResponse> FindCurrency(FindCurrencyRequest request) { try { var client = CreateHttpClient(); var query = HttpUtility.ParseQueryString(string.Empty); query["access_key"] = configuration.AccessKey; query["currencies"] = string.Join(@",", request.Currencies.Select(c => c.Code)); var queryString = query.ToString(); var httpRequest = new HttpRequestMessage(HttpMethod.Get, $"live?{queryString}"); var response = await client.SendAsync(httpRequest); var body = await GetBodyContent <CurrencyLayerLiveCurrencyResponse>(response); return(new FindCurrencyResponse { Success = body.Success, Currencies = body.Error != null ? null : body.Quotes.Select(q => CreateCurrencyByQuoteAndIdentifiers(q, request.Currencies)).ToArray(), Error = body.Error == null ? null : new Error { Type = body.Error.Type, Message = body.Error.Info }, }); } catch (Exception e) { return(new FindCurrencyResponse { Success = false, Error = new Error { Type = "Unspected", Message = e.Message }, }); } }