Skip to content

rodrigommurta/github-repositories

Repository files navigation

LinkedIn

Sumário
  1. Sobre o projeto
  2. Getting Started
  3. Funcionamento
  4. Estrutura
  5. Contato

Sobre o projeto

Este projeto tem o objetivo de criar um aplicativo Android para consultar a API do GitHub e trazer os repositórios mais populares de Kotlin.

[Repositories screen loading]

[Repositories screen success]

[PullRequests screen loading]

[PullRequests screen success]

(back to top)

Getting Started

Algumas referências de versões utilizadas no desenvolvimento:

  • Android Gradle Plugin: 8.7.2
  • Gradle: 8.9
  • Gradle JDK: Azul Zulu 17.0.13

(back to top)

Funcionamento

A tela inicial do app exibe uma lista de repositórios do GitHub baseados em Kotlin. A medida que a lista é rolada e chega ao final, uma nova requisição para buscar mais repositórios é realizada, e adicionada à lista existente.

Ao clicar em um repositório da lista, o app navega para a lista de Pull Requests do repositório selecionado. Quando selecionar um pull request, o aplicativo irá redirecionar o usuário para uma página web referente ao pull request clicado.

(back to top)

Estrutura

Apesar de o app possuir poucas funcionalidades, sua estrutura foi planejada para uma possível escalabilidade.

Arquitetura

A arquitetura utilizada é MVVM + Clean Arch, com modularização.

[Diagram Arch]

Cada módulo possui sua própria camada de gradle, testes e injeção de dependência (Dagger).

Os recursos foram organizados em feature packages (telas).

Data Module

O módulo Data é o responsável por realizar consultas à API e realizar a persistência dos dados obtidos.

Estruturação:

  • Service: interface responsável por acessar a API;
  • LocalDB: package com classes de persistência de dados utilizando Room;
  • ProviderImpl (Repository): responsável por instrumentar as respostas da API, BD, e devolver ao UseCase (Domain);
  • model: package com os modelos de dados remoto.
  • Foi criada a função utilitária NetworkAdapter, que é responsável por receber instruções do ProviderImpl por meio de delegates, e realizar as ações no BD.

Domain Module

Estruturação:

  • Classe utilitária State: abstração para representar o estado da tela, podendo ser Loading, Error ou Success. É implementado por toda Screen;
  • Abstração do UseCase garantindo que todos os UseCases sigam um mínimo padrão de implementação;
  • Cada feature possui:
    • Screen: representação de uma tela, contendo seu State e seu modelo de dados;
    • Modelo de dados;
    • Provider: interface que interliga os módulos Domain e Data;
    • UseCase: responsável por receber pedidos da ViewModel; contactar a camada de Data (não necessariamente; manipular os dados; manipular os estados da tela.

Presentation Module

Estruturação:

  • ViewModel: é quem recebe as instruções da view e define o que deve ser feito;
  • ComposeView: é a representação da tela para o usuário, utilizando compose;
  • ComposeNavigation: representação das rotas de cada tela, utilizada para navegação entre as telas.

App Module

Estruturação:

  • Single Activity (MainActivity): responsável pela criação da única activity do app;
  • Responsável pela inicialização dos módulos de injeção de dependência;
  • Responsável por gerenciar a navegação.

(back to top)

Contato

Rodrigo Murta - [email protected]

LinkedIn: https://www.linkedin.com/in/rodrigomurta/

(back to top)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages