Closed elizabetefabri closed 5 months ago
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)))
);
}
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.
Descrição:
Desenvolver um serviço
APIService
, no diretório src/shared/services, com o métodogetMovies
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çãoformatMovie
para transformar os dados de filmes da API para o modelo de negócios Movie.Critérios de Aceitação:
[x] Assinatura do método:
getMovies
dentro de um serviçoAPIService
no diretório src/shared/services.[x] Parâmetros:
getMovies
não recebe parâmetros.[x] Tipo de retorno
Observable<Movie[]>
).[x] Requisição da API:
[x] Utilizar o cliente HTTP do Angular para realizar uma requisição GET para
/discover/movie
do The Movie DB.[x] Incluir o token da API nos cabeçalhos da requisição, recuperado do carregador de configuração de ambiente.
[x] Transformação de dados:
formatMovie
para transformar os dados de filmes da API para o modelo de negócios dentro do métodogetMovies
.[x] Testes unitários:
getMovies
do serviçoAPIService
, incluindo casos de teste para uma requisição de API bem-sucedida, tratamento de erros e transformação correta de dados.Definição de Pronto:
[x] O método
getMovies
está implementado no arquivo de serviço apropriado.[x] O método não recebe parâmetros e retorna um Observable que retorna um array de objetos Movie do modelo de negócios (
Observable<Movie[]>
).[x] A função realiza corretamente uma requisição GET para
/discover/movie
do The Movie DB com o token da API.[x] As respostas da API são tratadas corretamente, incluindo casos de erro.
[x] A função
formatMovie
é utilizada para transformar os dados de filmes da API para o modelo de negócios Movie.[x] Os testes unitários do método getMovies foram bem-sucedidos, cobrindo vários cenários.