Essa aplicação tem como objetivo implementar a API do GitHub trazendo as funcionalidades lista de repostórios e pull requests.
Lista de repositórios de Java com maior número de estrelas
API: https://api.github.com/search/repositories?q=language:Java&sort=stars&page=0
Lista de pull requests do repositório selecionado
API: https://api.github.com/repos/{owner}/{repo}/pulls
O Projeto foi desenvolvido em multi-módulo (aplicação e features) utilizando a clean architecture e MVVM
Esta dividido em duas camadas - injeção de dependência (di) e camada de apresentação (iu) - e Trás a integração das features, parte da injeção de dependência e a navegação entre telas
Contém as features implementadas na aplicação (repos e pulls). Está dividido entre os pacotes de cada feature e commons que trás o conteúdo compartilhado entre elas. Os pacotes de feature possuem 4 camadas: data, di, domain e iu.
A camada de dados trata as informações que serão mostradas na camada de apresentação (iu) e esta dividida entre as camadas dto, mapper, repository e service
Os DTOs ou Data Transfer Objects são classes de dados em que serão utilizadas para criar os objetos das informações obtidas na API e que serão mostradas na camada de apresentação
Para que as informações sejam mostradas na camada de apresentação seguindo as boas práticas de arquitetura, utilizamos os mappers para converter os DTOs em models para que se tenha estrutura de dados em nível de negócio.
A camada de repositório faz a persistência dos dados para a camada de serviço (service)
A camada de serviço faz as chamadas para API e retorna o resultado obtido
Trata a injeção de dependência do conteúdo utilizado no módulo
Trás as regras de negócio do projeto e esta dividída em interfaces e models
Possui as camadas de compose (telas e componentes) e viewmodel
Camada onde esta o conteúdo visível para o usuário e que obtém as informações por meio da viewmodel através de programação reativa
Essa camada é reponsável por se comunicar com as camadas de dados e domínio para buscar os dados, tratá-los e disponibilizar o conteúdo para a camada compose por meio de programação reativa
- Junit
- Espresso
- Mockk
- Androix Lifecycle
- Androix Runtime
- Coroutines
- Jetpack Compose
- Material design
- Glide
- Hilt
- Retrofit
- Converter Gson
Este projeto foi testado em nível de testes unitários e testes integrados. Para os testes unitários foi utilizado JUnit e mockk e para os testes integrados, Espresso.