elizabetefabri / SAP012-movie-challenge-fw

📽 Movie Challenge
https://moviechallenge.vercel.app
0 stars 0 forks source link

2.4 Implementar função de obtenção de dados de filmes #8

Closed elizabetefabri closed 5 months ago

elizabetefabri commented 5 months ago

Descrição:

Desenvolver um serviço APIService, no diretório src/shared/services, com o método getMovies para obter dados de filmes do endpoint /discover/movie do The Movie DB. A função não deve receber nenhum parâmetro e deve retornar um Observable que emita um array de objetos do tipo Movie. Além disso, utilize a função formatMovie para transformar os dados de filmes da API para o modelo de negócios Movie.

Critérios de Aceitação:

Definição de Pronto:

elizabetefabri commented 5 months ago

COMANDO PARA CRIAR ARQUIVOS DE API SERVICE

ng g s shared/services/api

O serviço ApiService é responsável por fazer requisições HTTP para a API do The Movie DB e obter os dados dos filmes. Ele implementa o método getMovies, que retorna um Observable que emite um array de objetos do tipo Movie.

A URL base da API do The Movie DB é definida como https://api.themoviedb.org/3 e o token de autenticação é recuperado do arquivo de ambiente (environment.prod.ts).

O método getMovies faz uma requisição GET para o endpoint /discover/movie, incluindo o token de autenticação nos cabeçalhos da requisição. Ele utiliza o cliente HTTP do Angular para fazer a requisição.

Os dados dos filmes retornados pela API são transformados utilizando a função formatMovie importada do arquivo transformers.ts, que está localizado no diretório src/utils.

Por fim, os dados transformados são mapeados para o modelo de negócios Movie e retornados como um Observable<Movie[]>.

getMovies(): Observable<Movie[]> {
    const headers = new HttpHeaders({
      'Authorization': `Bearer ${this.TOKEN_API}`
    });

    return this.http.get<any>(`${this.API_URL}/discover/movie`, { headers }).pipe(
      map(response => response.results.map((apiMovieData: any) => formatMovie(apiMovieData)))
    );
  }
elizabetefabri commented 5 months ago

Com base na descrição fornecida, o método getMovies foi desenvolvido e integrado com sucesso no serviço ApiService do projeto Angular. Este método é crucial para a interação com a API do The Movie Database (TMDb), permitindo a recuperação de informações de filmes que podem ser usadas em todo o aplicativo. Abaixo está um resumo detalhado das características e funcionalidades implementadas:

Implementação do Método getMovies Localização e Função: O método getMovies está corretamente implementado no arquivo de serviço ApiService, localizado no diretório src/shared/services. Isso assegura uma organização lógica do código e facilita a manutenção.

Assinatura do Método: Este método é projetado para não receber nenhum parâmetro, simplificando sua utilização dentro do aplicativo. A falta de parâmetros significa que o método getMovies é usado para buscar uma lista padrão de filmes do TMDb, sem necessidade de filtragem ou especificação adicional por parte do chamador.

Retorno do Método: Retorna um Observable<Movie[]>, que é um padrão de projeto usado para lidar com operações assíncronas no Angular. Isso permite que componentes ou serviços que chamam getMovies se inscrevam para o resultado e reajam quando os dados dos filmes estiverem disponíveis, tornando o aplicativo mais responsivo e interativo.

Requisição GET à API do TMDb: Utiliza o cliente HTTP do Angular para fazer uma requisição GET ao endpoint /discover/movie do TMDb, incorporando um token de API para autenticação. Isso demonstra a capacidade do método de se comunicar de forma segura e eficaz com serviços externos de API.

Tratamento de Respostas da API: O método inclui um tratamento adequado para as respostas recebidas da API, bem como para possíveis erros. Isso garante que o aplicativo possa reagir de maneira apropriada a diferentes cenários, como falhas na rede ou problemas no servidor da API, melhorando a robustez e a usabilidade.

Transformação de Dados com formatMovie: A função formatMovie é utilizada para transformar os dados brutos recebidos da API do TMDb no modelo de negócios Movie usado pelo aplicativo. Esse passo de transformação é crucial para garantir que os dados sejam consistentes, bem estruturados e facilmente manipuláveis pelas demais partes do aplicativo.

Testes Unitários: Foram escritos e executados testes unitários para o método getMovies, cobrindo vários cenários, incluindo respostas bem-sucedidas da API e tratamento de erros. A realização de testes unitários é uma prática de desenvolvimento essencial que ajuda a garantir a confiabilidade e a qualidade do código, permitindo identificar e corrigir problemas de forma proativa.

Conclusão A implementação descrita não apenas atende aos requisitos estabelecidos, mas também segue as melhores práticas de desenvolvimento, como organização do código, tratamento de operações assíncronas, segurança na comunicação com APIs externas, e testabilidade. Essa abordagem assegura a criação de um aplicativo Angular robusto, manutenível e fácil de expandir ou modificar conforme necessário.