Esempio n. 1
0
        public ConverterMoedaResult ConverterMoeda(ConverterMoedaRequest converterMoedaRequest)
        {
            IConversorACL conversorACL = conversorACLFactory.Create();

            IMoeda MoedaOrigem = moedaFactory.Create(converterMoedaRequest.SiglaMoedaOrigem, converterMoedaRequest.ValorParaConversao);
            IMoeda CotacaoEmDolarMoedaOrigem = conversorACL.GetCotacaoComBaseNoDolar(MoedaOrigem.SiglaMoeda);
            IMoeda dinhieroOrigemEmDolar     = MoedaOrigem.ConverterParaDolar(CotacaoEmDolarMoedaOrigem);

            IMoeda  CotacaoEmDolarMoedaConvertida = conversorACL.GetCotacaoComBaseNoDolar(converterMoedaRequest.MoedaParaConversao);
            Decimal valorDaConversao    = dinhieroOrigemEmDolar.ObterValorDaConversaoDeMoeda(CotacaoEmDolarMoedaConvertida);
            IMoeda  MoedaConvertida     = moedaFactory.Create(converterMoedaRequest.MoedaParaConversao, valorDaConversao);
            ConverterMoedaResult result = new ConverterMoedaResult()
            {
                siglaMoeda = MoedaConvertida.SiglaMoeda,
                valor      = MoedaConvertida.Valor
            };

            return(result);
        }
        public List <IMoeda> GetMoedas()
        {
            IRedisConnectorHelper redisConnectorHelper = redisConnectorHelperFactory.Create();
            String NomeCacheObject = "GetMoedasList";
            var    cacheValue      = redisConnectorHelper.Get <List <IMoeda> >(NomeCacheObject);

            if (cacheValue == null)
            {
                lock (GetMoedasLock)
                {
                    cacheValue = redisConnectorHelper.Get <List <IMoeda> >(NomeCacheObject);

                    if (cacheValue == null)
                    {
                        HttpClient client = new HttpClient();
                        client.BaseAddress = new Uri(Configuration.GetSection("BASE_URL"));
                        HttpResponseMessage response = client.GetAsync("list" + Configuration.GetSection("ACCESS_KEY")).Result;
                        if (response.IsSuccessStatusCode)
                        {
                            var retorno   = JsonConvert.DeserializeXNode(response.Content.ReadAsStringAsync().Result, "Root");
                            var resultado = retorno.Root.Element("currencies").Elements().Select(c => moedaFactory.Create(c.Name.ToString(), c.Value)).ToList();
                            redisConnectorHelper.Set(NomeCacheObject, resultado, 120);
                            return(resultado);
                        }
                        else
                        {
                            throw new Exception("Não foi possivel obter as moedas");
                        }
                    }
                }
            }
            return(cacheValue);
        }