public async Task <TemperaturaModel> GetTemperaturaAtualByCidade([FromUri] string cidade)
        {
            TemperaturaModel temperaturaModel = new TemperaturaModel();

            try
            {
                string urlFinal = URL_API_TEMPERATURA.AbsoluteUri + "weather?q="
                                  + cidade.Trim()
                                  + "&units=metric&APPID=ffb5a59fa46d5dadaad146262b19e400";

                using (var http = new HttpClient())
                {
                    var response = await http.GetAsync(urlFinal);

                    if (response.IsSuccessStatusCode)
                    {
                        string stringJson = await response.Content.ReadAsStringAsync();

                        temperaturaModel             = JsonConvert.DeserializeObject <TemperaturaModel>(stringJson);
                        temperaturaModel.Temperatura = (int)Math.Round(Convert.ToDouble(temperaturaModel.main["temp"]));
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(temperaturaModel);
        }
Beispiel #2
0
        public void Gravar(TemperaturaModel model)
        {
            var listaTemperatura = ListarTodos();

            listaTemperatura.Add(model);

            _cache.GravarCache(CacheConstant.LISTA_TEMPERATURA, listaTemperatura, TimeSpan.FromHours(1));
        }
Beispiel #3
0
        public void PreencherTemperaturaMaiorQueTemperaturaMaxima_DeveRetornarException()
        {
            // Arrange
            var temperatura = new TemperaturaModel("Cidade", _descricoes, 0, 0, 35, 10, 30);

            // Act & Assert
            Assert.Throws <OpenWeatherException>(() => temperatura.Validar());
        }
Beispiel #4
0
        public void PreencherCidadeVazia_DeveRetornarException()
        {
            // Arrange
            var temperatura = new TemperaturaModel(string.Empty, _descricoes, 0, 0, 0, 0, 0);

            // Act & Assert
            Assert.Throws <OpenWeatherException>(() => temperatura.Validar());
        }
Beispiel #5
0
        public void PreencherDescrcaioNula_DeveRetornarException()
        {
            // Arrange
            var temperatura = new TemperaturaModel("Cidade", null, 0, 0, 0, 0, 0);

            // Act & Assert
            Assert.Throws <OpenWeatherException>(() => temperatura.Validar());
        }
Beispiel #6
0
 public TemperaturaViewModel(TemperaturaModel model)
 {
     Descricoes       = model.Descricoes;
     SensacaoTermica  = model.SensacaoTermica;
     Humidade         = model.Humidade;
     Temperatua       = model.Temperatua;
     TemperatuaMaxima = model.TemperatuaMaxima;
     TemperatuaMinima = model.TemperatuaMinima;
     DataHora         = model.DataHora;
 }
Beispiel #7
0
        public bool Insert(TemperaturaModel modelo)
        {
            var collection = _database.GetCollection <TemperaturaModel>(_collectionName);

            modelo.DataHora = DateTime.Now;

            collection.InsertOne(modelo);

            return(true);
        }
Beispiel #8
0
        public void PreencherDescrcaioSemRegistros_DeveRetornarException()
        {
            // Arrange
            var descricoes = new string[0];

            var temperatura = new TemperaturaModel("Cidade", descricoes, 0, 0, 0, 0, 0);

            // Act & Assert
            Assert.Throws <OpenWeatherException>(() => temperatura.Validar());
        }
Beispiel #9
0
        public void Gravar(TemperaturaModel model)
        {
            if (model == null)
            {
                throw new OpenWeatherException("Objeto de temperatura está nulo para gravação");
            }

            model.Validar();

            _temperaturaRepository.Gravar(model);
        }
Beispiel #10
0
        public void ConversaoDTO_ParaModel_DeveConverterIgual()
        {
            // Arrange
            var dto = new OpenWeatherRegistroDTO()
            {
                Clouds = new OpenWeatherCloudsDTO
                {
                    All = 79,
                },
                Coord = new OpenWeatherCoordDTO
                {
                    Lat = -22,
                    Lon = -49,
                },
                Dt   = 1608509269,
                Id   = 3448433,
                Main = new OpenWeatherMainDTO
                {
                    Temp      = 26.11f,
                    FeelsLike = 29.2f,
                    GrndLevel = null,
                    Humidity  = 79,
                    Pressure  = 1013,
                    SeaLevel  = null,
                    TempMax   = 26.11f,
                    TempMin   = 26.11f,
                },
                Name = "São Paulo",
                Sys  = new OpenWeatherSysDTO
                {
                    Country  = "BR",
                    Sunrise  = 1608452970,
                    Sunset   = 1608501488,
                    Timezone = -10800,
                },
                Visibility = 10000,
                Weather    = new OpenWeatherWeatherDTO[]
                {
                    new OpenWeatherWeatherDTO {
                        Id          = 803,
                        Main        = "Clouds",
                        Description = "nublado",
                        Icon        = "04n",
                    }
                },
                Wind = new OpenWeatherWindDTO
                {
                    Speed = 2.44f,
                    Deg   = 202,
                }
            };

            var temperatura = new TemperaturaModel(
                dto.Name,
                dto.Weather?.Select(x => x.Description).ToArray(),
                dto.Main.FeelsLike,
                dto.Main.Humidity,
                dto.Main.Temp,
                dto.Main.TempMin,
                dto.Main.TempMax);

            // Act
            var dtoConvertido = dto.ToModel();

            temperatura.DataHora = dtoConvertido.DataHora;

            // Assert
            Assert.Equal(temperatura, dtoConvertido);
        }
        public async Task <PlaylistCustomModel> GetPlayListByCidade([FromUri] string cidade)
        {
            //Inicializa Models Globais
            PlaylistCustomModel playlistCustomModel = new PlaylistCustomModel();
            TokenAcessoModel    tokenAcessoModel    = new TokenAcessoModel();

            try
            {
                // Monta URL API
                string urlFinal = URL_API_PLAYLIST.AbsoluteUri;

                // Get Temperatura atual da cidade
                TemperaturaController temperaturaController = new TemperaturaController();
                TemperaturaModel      temperaturaModel      = await temperaturaController.GetTemperaturaAtualByCidade(cidade);

                // Set Temperatura atual e Cidade
                playlistCustomModel.NomeCidade  = cidade;
                playlistCustomModel.Temperatura = temperaturaModel.Temperatura;

                // Playlist de musicas Pop
                if (temperaturaModel.Temperatura >= 25)
                {
                    urlFinal += "playlists/37i9dQZF1DWVLcZxJO5zyf";
                    playlistCustomModel.GeneroMusicalSugerido = "Pop";
                }
                // Playlist de musicas Rock
                else if (temperaturaModel.Temperatura >= 10 && temperaturaModel.Temperatura < 25)
                {
                    urlFinal += "playlists/37i9dQZF1DXcmaoFmN75bi";
                    playlistCustomModel.GeneroMusicalSugerido = "Rock";
                }
                // Playlist de musicas Classicas
                else if (temperaturaModel.Temperatura < 10)
                {
                    urlFinal += "playlists/37i9dQZF1DWWEJlAGA9gs0";
                    playlistCustomModel.GeneroMusicalSugerido = "Musica Clássica";
                }

                #region Get Token Authorization API
                using (var http = new HttpClient())
                {
                    //Tranforma Client_ID e Client_Secret em Base 64
                    byte[] bytes     = Encoding.ASCII.GetBytes("ce4d41cc1cb14568be5247b1716f57f2:cab9bb46f92d424f89a97d793273906a");
                    string codeToken = Convert.ToBase64String(bytes);

                    // Define Header
                    http.DefaultRequestHeaders.Add("Authorization", "Basic " + codeToken);

                    // Define parameters Body
                    var content = new FormUrlEncodedContent(new[] {
                        new KeyValuePair <string, string>("grant_type", "client_credentials"),
                    });

                    var tokenResponse = await http.PostAsync("https://accounts.spotify.com/api/token", content);

                    if (tokenResponse.IsSuccessStatusCode)
                    {
                        string tokenAcessoString = await tokenResponse.Content.ReadAsStringAsync();

                        tokenAcessoModel = JsonConvert.DeserializeObject <TokenAcessoModel>(tokenAcessoString);
                    }
                }
                #endregion

                #region Retonar Playlist pelo gênero
                using (var http = new HttpClient())
                {
                    // define headers
                    http.DefaultRequestHeaders.Add("Authorization", "Bearer " + tokenAcessoModel.access_token);
                    http.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                    // get response API
                    var response = await http.GetAsync(urlFinal);

                    if (response.IsSuccessStatusCode)
                    {
                        string stringJson = await response.Content.ReadAsStringAsync();

                        List <string> playList = PlayListTemperaturaModel.FromJson(stringJson)
                                                 .Tracks.Items.Select(a => a.Track.Name).ToList();

                        playlistCustomModel.PlayList = playList;
                    }
                }
                #endregion

                playlistCustomModel.Data = DateTime.Now;

                return(playlistCustomModel);
            }
            catch (Exception ex)
            {
                return(new PlaylistCustomModel());
            }
        }