Skip to content

Kauffmann54/Cine-SKY

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

Desafio Cine SKY Swift/iOS

Autor: Guilherme Kauffmann

Objetivo:

Utilizar uma API do RapidAPI e realizar a implementação de duas APIs do "IMDb API” (https://rapidapi.com/apidojo/api/imdb8/endpoints):

  1. GET title/get-most-popular-movies
    • Esta API retorna uma lista com os IDs dos filmes mais populares do IMDb.
  2. GET title/get-overview-details
    • Esta API recupera os dados de cada filme para montar as telas de listagem e detalhe.

API Service

Função para retornar a lista com os IDs do filmes mais populares do IMDb.

/// Retrieves the list with the most popular movie IDs
///
/// - Returns: `Result` Returns the result of the request
func getMostPopularMovies(completion: @escaping (Result) -> Void) {
  let url = baseURL.appendingPathComponent(mostPopularMoviesPath)

  let headers: HTTPHeaders = [
    "x-rapidapi-key": rapidapi_key,
    "x-rapidapi-host": rapidapi_host
  ]

  AF.request(url, method: .get, headers: headers)
  .validate(statusCode: 200..<300)
  .responseJSON { (response) in
        switch response.result {
            case .success(let json):
              let array = json as! Array<String>
              completion(Result.success(array))
            case .failure(let error):
              completion(Result.failure(error))
        }
    }
}

Função para retornar os detalhes do filme selecionado, a partir do seu ID.

/// Retrieves the details of the selected movie
///
/// - Parameter movieId: Selected movie ID
/// - Returns: `Result` Returns the result of the request
func getOverviewDetails(movieId: String, completion: @escaping (Result) -> Void) {
  let url = baseURL.appendingPathComponent(overviewDetailsPath)

  let headers: HTTPHeaders = [
    "x-rapidapi-key": rapidapi_key,
    "x-rapidapi-host": rapidapi_host
  ]

  let params: [String: Any] = [
    "tconst": movieId
  ]

  AF.request(url, method: .get, parameters: params, headers: headers)
  	.validate(statusCode: 200..<300)
  	.responseJSON { (response) in
         switch response.result {
            case .success:
              	do {
                  	let jsonDecode = try JSONDecoder().decode(Movie.self, from: response.data!)
                    completion(Result.success(jsonDecode))
                } catch let error {
                    completion(Result.failure(error))
                }
                break
             case .failure(let error):
                   completion(Result.failure(error))
             }
        }
}

Telas

  • Tela inicial do aplicativo:

Cine_SKY_LaunchScreen

  • Tela principal do app:
    • Recupera a lista de IDs dos filmes e para cada célula do CollectionView é feita uma requisição para obter os detalhes do

Cine_SKY_TelaInicial

  • Tela de detalhe do filme:
    • Recupera os dados filme e insere na tela.
    • Recupera o link da imagem e o link do vídeo para poder ser exibido no player de vídeo.

Cine_SKY_Detail

  • Tela principal quando não consegue recuperar a lista de filmes, exibe um alerta e tenta buscar novamente os dados a cada 10 segundos.

Cine_SKY_Error

About

Desafio Cine SKY Swift/iOS

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published