Este proyecto contiene las siguientes características:
- Splash Screen Animado - Animación Lottie del Purple Git Cat
- Pantalla principal - Lista de gatos aleatorios con imágenes de The Cat API
- Sistema de favoritos - Gestión de gatos favoritos (límite de 3 gratis)
- Pull-to-Refresh - Actualización de la lista deslizando hacia abajo
- Manejo de Errores - Pantalla de estado vacío ("Empty State") amigable cuando falla la carga
- Tokenización de pago - Desbloqueo de favoritos ilimitados mediante tokenización
- Multi-idioma - Soporte para Español e Inglés
- Tema personalizado - Diseño purple-pink gradient en toda la aplicación
Este proyecto implementa:
- The Cat API:
https://api.thecatapi.com/v1/images/search- Para obtener imágenes aleatorias de gatos - Mock Payment API:
https://api.example.com/tokenize- Simulación de tokenización de métodos de pago
Este proyecto implementa Clean Architecture + MVVM + Modularización
┌─────────────────────────────────────────────┐
│ APP (UI Layer) │
│ - SplashActivity, MainActivity │
│ - CatListScreen, PaymentBottomSheet │
│ - Compose UI, Theme, Navigation │
└─────────────────┬───────────────────────────┘
│
┌─────────────────▼───────────────────────────┐
│ PRESENTATION (ViewModels) │
│ - CatListViewModel │
│ - UI State Management │
└─────────────────┬───────────────────────────┘
│
┌─────────────────▼───────────────────────────┐
│ DOMAIN (Use Cases) │
│ - GetCatListUseCase │
│ - ToggleFavoriteUseCase │
│ - TokenizePaymentMethodUseCase │
│ - Entities: Cat, PaymentToken │
│ - Repositories (Interfaces) │
└─────────────────┬───────────────────────────┘
│
┌─────────────────▼───────────────────────────┐
│ DATA (Repository Implementation) │
│ - CatRepositoryImpl │
│ - PaymentRepositoryImpl │
│ - Data Sources, DTOs, Mappers │
└─────────────────┬───────────────────────────┘
│
┌─────────────────▼───────────────────────────┐
│ FRAMEWORK (External Dependencies) │
│ - Retrofit (API calls) │
│ - Room (Local database) │
│ - Coil (Image loading) │
│ - DataStore (Token storage) │
└─────────────────────────────────────────────┘
El proyecto está dividido en 4 módulos independientes:
:app- Capa de presentación UI:domain- Lógica de negocio y casos de uso:data- Implementación de repositorios y fuentes de datos:framework- Implementaciones de infraestructura (Retrofit, Room, etc.)
- Screens:
CatListScreen,SplashActivity - Components:
CatItem,PaymentBottomSheet - Theme:
Color.kt,Theme.kt,Typography.kt - Navigation: Compose Navigation
CatListViewModel- Gestiona el estado de la pantalla principal- Estados:
CatListUiState(loading, error, success) - Eventos: Cargar gatos, toggle favoritos, tokenizar pago
GetCatListUseCase- Obtiene y combina datos de gatos (API + DB)ToggleFavoriteUseCase- Gestiona favoritos con reglas de negocioTokenizePaymentMethodUseCase- Tokeniza métodos de pago- Entities:
Cat,PaymentToken - Repositories (Interfaces):
CatRepository,PaymentRepository
CatRepositoryImpl- Implementación del repositorio de gatosPaymentRepositoryImpl- Implementación del repositorio de pagos- Data Sources:
RemoteCatDataSource,LocalCatDataSource - DTOs:
CatDto, objetos de transferencia de datos - Mappers: Conversión entre DTOs y Entities
- Retrofit: Cliente HTTP para consumir APIs REST
- Room: Base de datos local para persistencia
- Coil: Librería de carga de imágenes optimizada para Compose
- DataStore: Almacenamiento de tokens y preferencias
- Gson: Serialización/deserialización JSON
- Dagger Hilt: Inyección de dependencias
Se implementan 19 tests en las capas: Domain (Use Cases)
// Domain Layer Tests
✅ GetCatListUseCaseTest (5 tests)
- Éxito con datos del repositorio
- Manejo de errores
- Lista vacía
- Integridad de datos
✅ ToggleFavoriteUseCaseTest (7 tests)
- Toggle de favoritos existentes
- Agregar favorito bajo límite
- Error al alcanzar límite (3 favoritos)
- Acceso ilimitado con token
- Tests de boundary conditions
✅ TokenizePaymentMethodUseCaseTest (7 tests)
- Tokenización exitosa
- Guardado de token
- Manejo de errores de red
- Validación de parámetrosCobertura de pruebas: 100% en capa de dominio (Use Cases)
- Retrofit (2.11.0) - Cliente REST type-safe
- OkHttp - Interceptores y logging
- Gson - Conversión JSON
- Room (2.6.1) - Base de datos SQLite
- DataStore - Almacenamiento key-value
- Coil (2.7.0) - Librería de imágenes para Compose
- Dagger Hilt (2.52) - Framework DI para Android
- Jetpack Compose - UI declarativa moderna
- Material 3 - Sistema de diseño
- Lottie (6.3.0) - Animaciones vectoriales
- Compose Navigation - Navegación entre pantallas
- JUnit (4.13.2) - Framework de pruebas
- MockK (1.13.8) - Biblioteca de mocks para Kotlin
- Coroutines Test (1.7.3) - Pruebas de coroutines
- Turbine (1.0.0) - Pruebas de Flows
- Gradle (8.7.0) - Sistema de compilación
- Kotlin (1.9.0) - Lenguaje principal
- KSP - Procesamiento de anotaciones
La aplicación sigue los principios de Clean Architecture:
- Independencia de frameworks: La lógica de negocio no depende de Android
- Testeable: Cada capa puede testearse independientemente
- Independiente de UI: El UI es fácil de cambiar sin afectar la lógica
- Independiente de DB: Room puede reemplazarse por otra solución
- Independiente de agentes externos: APIs pueden cambiar fácilmente
- Single Responsibility: Cada clase tiene una única responsabilidad
- Open/Closed: Abierto para extensión, cerrado para modificación
- Liskov Substitution: Las interfaces son implementables sin romper contratos
- Interface Segregation: Interfaces pequeñas y específicas
- Dependency Inversion: Dependemos de abstracciones, no de implementaciones
- MVVM - Model-View-ViewModel
- Repository Pattern - Abstracción de fuentes de datos
- Use Case Pattern - Encapsulación de lógica de negocio
- Dependency Injection - Inversión de control con Hilt
- Observer Pattern - StateFlow para reactividad
- Android Studio Hedgehog | 2023.1.1 o superior
- Gradle 8.7.0
- Kotlin 1.9.0
- JDK 17
- Android SDK 34 (compileSdk)
- Dispositivo/Emulador con API 24+ (Android 7.0+)
git clone https://github.com/yourusername/CatWalletApp.git
cd CatWalletApp./gradlew build# Todos los tests
./gradlew test
# Tests por módulo
./gradlew :domain:test
./gradlew :data:test
./gradlew :app:test# Debug
./gradlew :app:assembleDebug
# Release
./gradlew :app:assembleReleaseO simplemente presiona ▶ Run en Android Studio
CatWalletApp/
├── app/ # Módulo de aplicación (UI)
│ ├── src/main/
│ │ ├── java/.../ui/
│ │ │ ├── splash/ # Splash screen con Lottie
│ │ │ ├── catlist/ # Pantalla principal
│ │ │ ├── payment/ # Bottom sheet de pago
│ │ │ └── theme/ # Tema y colores
│ │ ├── res/
│ │ │ ├── raw/ # purple_cat_splash.json
│ │ │ └── values/ # Strings, colors, themes
│ │ └── AndroidManifest.xml
│ └── build.gradle.kts
│
├── domain/ # Módulo de dominio
│ ├── src/main/java/.../domain/
│ │ ├── model/ # Entities: Cat, PaymentToken
│ │ ├── repository/ # Interfaces de repositorios
│ │ ├── usecase/ # Casos de uso
│ │ └── util/ # Constantes y utilidades
│ └── build.gradle.kts
│
├── data/ # Módulo de datos
│ ├── src/main/java/.../data/
│ │ ├── repository/ # Implementaciones
│ │ ├── datasource/ # Data sources
│ │ ├── dto/ # DTOs
│ │ └── mapper/ # Entity ↔ DTO mappers
│ └── build.gradle.kts
│
├── framework/ # Módulo de framework
│ ├── src/main/java/.../framework/
│ │ ├── api/ # Retrofit interfaces
│ │ ├── db/ # Room database
│ │ ├── di/ # Hilt modules
│ │ └── datasource/ # Implementaciones
│ └── build.gradle.kts
│
├── gradle/ # Configuración Gradle
│ └── libs.versions.toml # Catálogo de versiones
├── build.gradle.kts
├── settings.gradle.kts
└── README.md
- Animación Lottie del Purple Git Cat
- Transición suave a la pantalla principal
- Fondo con gradiente purple-pink
- Carga de imágenes aleatorias desde The Cat API
- Pull-to-refresh para actualizar
- Visualización en cards con diseño moderno
- Botón de favoritos en cada card
- Estado de Error: Diseño amigable con animación y botón de reintento cuando falla la conexión
- Límite de 3 favoritos para usuarios gratuitos
- Persistencia local con Room
- Indicador visual de favoritos
- Desbloqueo de favoritos ilimitados
- Bottom sheet moderno para ingresar datos de tarjeta
- Simulación de tokenización segura
- Almacenamiento del token con DataStore
- Desbloqueo automático de favoritos ilimitados
- Soporte para Español e Inglés
- Cambio automático según idioma del dispositivo
- Tests de UI con Compose Testing
- Tests de integración
- CI/CD con GitHub Actions
- Modo oscuro mejorado
- Compartir gatos favoritos
- Búsqueda de gatos por raza
Felipe Chaux
- GitHub: @felipechaux
Desarrollado con ❤️ usando Clean Architecture y Jetpack Compose



