Skip to content

Commit

Permalink
Updated README
Browse files Browse the repository at this point in the history
  • Loading branch information
jonathanarodr committed May 5, 2024
1 parent 35fb3a3 commit 3a8ed57
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 18 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ jobs:
uses: gradle/actions/setup-gradle@v3

- name: Build apks
run: ./gradlew app:assemble
run: ./gradlew app:assembleDebug

- name: Upload debug APK
if: success()
Expand Down
108 changes: 91 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,93 @@
# Stonks

## TODO

- Comentar sobre gradle build com conventional plugins
- Justificar uso de plugins de qualidade (doctor, cache, retry, dependency guard, etc)
- Sessão de setup.sh
- JAVA_HOME config.properties
- Hook de pre-commit
- Como gerar coverage
- Build variants
- Linters utilizados (detekt, plugin detekt)
- Dependency graph
- CI
- Arquitetura e design de código
- Module graph: ./gradlew generateModulesGraphvizText
- Dependency graph: ./gradlew dependencyGuard
- Build health: ./gradlew buildHealth
- Coverage: ./gradlew koverHtmlReportDebug
## 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](https://developer.android.com/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;

- 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](https://github.com/jonathanarodr/stonks/blob/main/gradle/libs.versions.toml)).
## 🚩 Features

- [x] Módularização: distribuição funcional entre os módulos ([leia mais](#modularização));
- [x] Home: feature responsável pela exibição da carteira de ativos e histórico transacional;
- [x] Stock alert: feature responsável pela gestão de alerta de ativos;
- [x] 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;

## 📚 Tech Stack

- Aplicação desenvolvida em [Kotlin](https://kotlinlang.org/)
- Build system utilizando Gradle com [Conventional Plugins](https://docs.gradle.org/current/userguide/composite_builds.html) e [Version Catalog](https://docs.gradle.org/current/userguide/platforms.html)
- Componentes visuais inteiramente desenvolvidos com [Jetpack Compose](https://developer.android.com/develop/ui/compose)
- Requisições assíncronas desenvolvidas com [Coroutines](https://developer.android.com/kotlin/coroutines)
- Injeção de dependência com [Koin](https://insert-koin.io/)
- Armazenamento interno com [Room](https://developer.android.com/training/data-storage/room)

## 🧪 Quality

- [Detekt](https://detekt.dev/)
- [Detekt Formatting](https://detekt.dev/docs/rules/formatting/)
- [Compose Rules](https://github.com/mrmans0n/compose-rules)

> [!TIP]
> Para executar o analisador de cófigo 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](https://github.com/Kotlin/kotlinx-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](https://developer.android.com/topic/architecture/recommendations) abordando práticas 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 de 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 feature home;
- `: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](https://github.com/jraska/modules-graph-assert) que auxilia neste processo.

> [!TIP]
> Para executar o 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](https://github.com/jonathanarodr/stonks/actions) via [GitHub Actions](https://docs.github.com/en/actions) responsável por executar todos os gates de qualidade e build dos artefatos.

0 comments on commit 3a8ed57

Please sign in to comment.