Skip to content

IagoRochaDev/SavePoint-AppAndroid

Repository files navigation

🎮 SavePoint

Android Kotlin Compose Firebase

SavePoint é um gerenciador de biblioteca de jogos offline-first focado em performance e disponibilidade. O aplicativo permite que jogadores organizem suas coleções, acompanhem o progresso de seus títulos e mantenham tudo sincronizado na nuvem, sem nunca perder a fluidez da experiência offline.


📸 Screenshots

Screenshot 1 Screenshot 2 Screenshot 3
Screenshot 4 Screenshot 5 Screenshot 6
Screenshot 7 Screenshot 8 Screenshot 9

🚀 Destaques de Engenharia

Para demonstrar o valor técnico deste projeto, destaquei as principais conquistas de implementação:

  • 🛡️ Clean Architecture Rigorosa: Separação total de responsabilidades. A lógica de negócio reside na camada de Domain, totalmente agnóstica a frameworks externos ou detalhes de UI.
  • 🧩 Use Cases (Interactors): Cada ação do usuário é encapsulada em um UseCase (ex: AddGameUseCase, SyncGamesUseCase). Isso garante reuso, facilita testes unitários e mantém os ViewModels magros.
  • 🌊 Reactive Stream com Flow: Utilização extensiva de Kotlin Flows para propagar mudanças do banco de dados (Room) até a UI em tempo real, garantindo uma interface sempre atualizada e reativa.
  • 🔄 Sincronização Delta Eficiente: Redução de ~90% no consumo de dados e custos de infraestrutura. Implementei um algoritmo de Delta Sync utilizando Timestamps e flags no Room para trafegar apenas registros modificados.
  • ⚡ Performance Percebida (Zero Lag): 100% de disponibilidade offline com o Room como Single Source of Truth (SSOT).

🏛️ Arquitetura e Design de Software

O projeto utiliza Clean Architecture e princípios SOLID, garantindo um código sustentável.

Camadas do Sistema:

  • Domain: A "jóia da coroa". Contém as Entities, Repository Interfaces e UseCases. Não depende de nada.
  • Data: Implementa os repositórios. Gerencia o Room (local) e Firestore (remoto), além de conter os Mappers para conversão entre Data Transfer Objects (DTOs) e Domain Models.
  • UI (Presentation): 100% Jetpack Compose. ViewModels expõem um único StateFlow representando o estado da tela, seguindo o padrão Unidirectional Data Flow (UDF).

🔄 Fluxo de Dados (UDF + Flow)

  1. Observação Reativa: A UI observa um StateFlow vindo do ViewModel.
  2. Ação (Intent): O usuário clica em um botão, disparando uma função no ViewModel.
  3. Execução: O ViewModel invoca um UseCase, que por sua vez chama o Repository.
  4. Atualização: O dado é salvo no Room, que emite um novo valor pelo Flow, atualizando toda a cadeia automaticamente.

✨ Funcionalidades Principais

  • Autenticação: Login via Google e E-mail/Senha (Firebase Auth).
  • UseCases Validados: Lógica de entrada e regras de negócio testadas isoladamente.
  • Gerenciamento de Jogos: CRUD completo com persistência local imediata.
  • Cloud Backup: Sincronização em background transparente para o usuário.
  • Modo Offline: Experiência ininterrupta independente da qualidade da rede.

🛠️ Stack Tecnológica

Categoria Tecnologia
Arquitetura Clean Architecture, MVVM, UDF
Assincronismo Kotlin Coroutines & Flows
Interface Jetpack Compose
DI Hilt (Dependency Injection)
Persistência Room (SQLite) & DataStore
Cloud Firebase (Auth & Firestore)
Networking Retrofit & OkHttp

🧪 Qualidade e Testes

A arquitetura limpa permite testes altamente eficazes:

  • Unit Tests: Testando UseCases e ViewModels isolando as dependências com MockK.
  • Flow Testing: Utilização da biblioteca Turbine para validar emissões de fluxos assíncronos.

Desenvolvido por Iago Rocha
LinkedIn

About

SavePoint é um gerenciador de biblioteca de jogos offline-first focado em performance e disponibilidade. O aplicativo permite que jogadores organizem suas coleções, acompanhem o progresso de seus títulos e mantenham tudo sincronizado na nuvem, sem nunca perder a fluidez da experiência offline.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages