Skip to content

Latest commit

 

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TMDB - App Test

Maintainability

Objetivo

Criação de uma aplicação que exibe uma lista de filmes usando a API do TMDB.

Features

Carregar lista de filmes

Após abrir a aplicação, a tela inicial exibirá um Grid contendo os filmes carregados pela API do TMDB. A requisição foi realizada utilizando o endpoint Movie Lists/Popular. É necessário informar a página para que este endpoint retorne um Array contendo no máximo 20 filmes.

Sempre que o último elemento da lista é exibido, será feita uma requisição de novos vídeos referentes a página seguinte.

Filtrar os filmes por Popular e Upcoming

Por padrão, todos os filmes retornados pela API serão exibidos. Ao clicar em Upcoming será realizado um filtro nos filmes já carregados, exibindo apenas os filmes que ainda serão lançados. Ao clicar em Popular, o filtro será removido e todos os filmes previamente carregados, serão exibidos novamente.

Exibir os detalhes do filme selecionado

Ao clicar em algum filme da lista, será exibido uma nova tela contendo os detalhes do filme selecionado.

Layout

Portrait

Quando a aplicação está no formato Portrait (Vertical), os elementos da tela inicial serão exibidos no formato de Grid.

Portrait (Home) Portrailt (Details)

Landscape

Quando a aplicação está no formato Landscape (Horizontal), os elementos da tela inicial serão exibidos no formato de Lista, para facilitar a navegação e visualização dos filmes exibidos.

Landscape (Home)

Projeto

As features foram criadas utilizando a arquitetura VIP (View, Interactor, Presenter). As interações do usuário na tela, fazem com que a View comunique com o Interactor, para que o mesmo efetue requisições ao TMDB através da classe NetworkService. Após receber os dados da requisição, o Interactor passa os dados para o Presenter, que será responsável por manipular/tratar os dados e encaminhar para a View, que irá exibir as informações na tela. Devido a forma como o SwiftUI renderiza a hierarquia de Views, foi necessário adicionar uma classe ViewModel, que retem os dados e, ao ser alterada, faz com que o SwiftUI renderize a tela novamente.

VIP

Foi criada uma classe chamada ImageDownloader, responsável por fazer cache das imagens (banners e fotos), para melhorar a performance da aplicação. Existe também uma classe Formatter, com funções auxiliares responsáveis por formatar as datas que serão exibidas na tela.

Cobertura de Testes

XCode Build Code Coverage: 63% - Foram criados Spy, Mocks, Fake e Stubs das camadas, entidades e network, para realização dos testes. Os testes estão configurados para serem executados no Xcode usando o XCTest.

Próximos Passos

  • Mudar a arquitetura para MVVM ou Composable Architecture pois funcionam melhor com o SwiftUI.
  • Adicionar a possibilidade da autenticação de usuário;
  • Melhorar design das telas
  • Tratar Light / Dark mode

Dividas Tecnicas

  • Remover variáveis que não estão sendo utilizadas nas entidades.
  • Avaliar o que realmente precisa ser async e o que precisa atuar na main thread

Requisitos para rodar o projeto

  • Sistema operacional: MacOS
  • IDE: Xcode 16
  • Simulador iOS (18.1): iPhone 15 Pro / iPhone 15 Pro Max
  • Ao abrir o projeto, ter certeza que esteja selecionado o scheme "TMDB, conforme imagem abaixo"

Xcode

Links de referência

Video

TMDB.App.mp4

About

The Movie DB App

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages