/stonks

Stonks é um projeto mobile desenvolvido para a plataforma Android, utilizado para aplicar meus conhecimentos mais recentes sobre a plataforma, abordando estratégias de arquitetura, componentes e ferramentas mais atuais como Jetpack Compose.

Primary LanguageKotlinMIT LicenseMIT

Stonks

Introdução

Stonks é um projeto mobile desenvolvido para a plataforma Android, utilizado para aplicar meus conhecimentos mais recentes sobre a plataforma, abordando estratégias de arquitetura, componentes e ferramentas mais atuais como Jetpack Compose.

TLDR;

Para o processo de instalação e execução do projeto, instale a versão mais recente do Android Studio e ao carregar o projeto, siga os passos abaixo:

  • Certifique-se que o arquivo gerando na pasta .gradle/config.properties contém o mesmo caminho presente na variável de ambiente JAVA_HOME configurado em seu usuário;
  • Acesse o arquivo build.gradle do módulo network e informe a chave de autorização do GitHub no AUTHORIZATION_KEY (saiba mais);
  • Execute o script de setup do projeto para instalação do hook de pre-commit responsável pela execução do detekt:
sh ./tools/setup.sh

Caution

Caso esteja executando o projeto em um ambiente com restrições de rede com proxy, certifique-se que as dependências utilizadas no gerenciador de dependências possui as versões utilizadas por este projeto (saiba mais).

🚩 Features

  • Módularização: distribuição funcional entre os módulos;
  • Home: feature responsável pela exibição da carteira de ativos e histórico transacional;
  • Stock alert: feature responsável pela gestão de alerta de ativos;
  • Comparador de preços: feature responsável pela comparação de preços do ativo x alerta;
  • Push: motor responsável pelo disparo de push's para o cliente;

Tip

Para que o comparador de preços funcione, ao cadastrar novo alerta utilize alguma das ações parametrizadas no mock de stock-alert.

📚 Tech Stack

🧪 Quality

Tip

Para executar o analisador de código estático, na raiz do projeto execute o seguinte comando:

./gradlew detekt

📈 Coverage

Para geração do relatório de cobertura de testes, foi aplicado o uso da biblioteca Kover.

Tip

Para executar o relatório de cobertura de todos os módulos, na raiz do projeto execute o seguinte comando:

./gradlew koverHtmlReportDebug

🏗️ Arquitetura

A arquitetura do projeto foi baseada nas práticas recomendadas pelo Android Guide Arch abordando padrões como SOLID, MVVM, Single source of truth (SSOT), Unidirectional Data Flow (UDF) e práticas de modularização funcional.

🧩 Modularização

  • :app: módulo principal do aplicativo responsável por conter toda lógica de inicialização do app;
  • gradle-build: módulo responsável pela configuração de build system do projeto provendo plugins reutilizáveis em qualquer novo módulo kotlin-library ou android-library eliminando duplicações de scripts de build;
  • :testing : módulo responsável pelas lógicas comuns para desenvolvimento de testes, deve ser utilizado somente com testImplementation ou androidTestImplementation;
  • :common : módulo responsável pelas lógicas comuns entre os módulos, como abstrações genéricas, formatadores, utilitários, etc;
  • :design-system : módulo responsável por contér design tokens e componentes reutilizáveis entre as features;
  • :infrastructure:network : módulo responsável por conter lógicas estruturais do projeto, atualmente contendo apenas lógicas relacionadas a camada de serviço;
  • :feature:home : módulo responsável por contér lógicas da home principal do app;
  • :feature:stocks : módulo responsável por contér lógicas da feature de alerta de ativos/produtos;

A modularização funcional dos módulos no Gradle é essencial para a organização, reutilização e manutenção eficiente do código. Por este motivo este projeto utiliza a biblioteca Module Graph Assert que auxilia neste processo.

Tip

Para executar a análise do grafo ou relatório de distribuição dos módulos, na raiz do projeto execute os seguintes comandos:

# analyzing dependency graph
./gradlew assertModuleGraph

# generating dependency graph
./gradlew generateModulesGraphvizText

📦 Automação

Com o objetivo de automatizar o processo de contribuição neste projeto, foi incluído um workflow via GitHub Actions responsável por executar todos os gates de qualidade e build dos artefatos.