Skip to content

jimmy360/WeatherScope

Repository files navigation

🌤️ WeatherScope

Una aplicación Android moderna para consultar el clima de cualquier ciudad del mundo, desarrollada con Jetpack Compose y las últimas tecnologías de Android.

📱 Características

  • Consulta del clima por ciudad: Obtén información meteorológica actualizada de cualquier ubicación
  • Búsqueda inteligente: Sistema de autocompletado para encontrar ciudades fácilmente
  • Pronóstico extendido: Información del clima para los próximos 3 días
  • Interfaz moderna: Diseñada con Material Design 3 y Jetpack Compose
  • Animaciones fluidas: Transiciones suaves y efectos visuales atractivos
  • Datos en tiempo real: Información meteorológica actualizada

🛠️ Tecnologías Utilizadas

Arquitectura y Framework

  • Kotlin: Lenguaje principal de desarrollo
  • Jetpack Compose: UI moderna y declarativa
  • Hilt: Inyección de dependencias
  • MVVM + Clean Architecture: Arquitectura modular con separación de capas
  • Multi-Module Architecture: Módulos separados (app, domain, data)
  • KSP: Kotlin Symbol Processing para generación de código

Networking y Datos

  • Retrofit: Cliente HTTP para consumo de APIs
  • OkHttp: Interceptores y logging de red
  • Gson: Serialización/deserialización JSON
  • Kotlinx Serialization: Manejo de datos JSON

Animaciones y UI

  • Compose Animations: Animaciones fluidas y naturales
  • Custom Themes: Temas personalizados con colores dinámicos
  • Material Design Components: Componentes modernos y accesibles

UI/UX

  • Material Design 3: Sistema de diseño moderno
  • Material Icons Extended: Iconografía extendida
  • Coil: Carga de imágenes optimizada
  • Splash Screen: Pantalla de inicio personalizada con animaciones
  • Responsive Design: Adaptable a diferentes tamaños de pantalla

Navegación y Lifecycle

  • Navigation Compose: Navegación entre pantallas
  • Lifecycle Runtime Compose: Manejo del ciclo de vida
  • Coroutines: Programación asíncrona

📋 Requisitos del Sistema

  • Android SDK: Mínimo API 26 (Android 8.0)
  • Compile SDK: API 36 (Android 15)
  • Target SDK: API 36 (Android 15)
  • Kotlin: 2.2.21
  • Java: 11
  • Gradle: 8.13.1
  • KSP: 2.2.21-2.0.4

🚀 Instalación y Configuración

1. Clonar el repositorio

git clone https://github.com/tu-usuario/WeatherScope.git
cd WeatherScope

2. Configurar la aplicación

La aplicación está preconfigurada y lista para usar. No se requiere configuración adicional de APIs externas.

3. Compilar y ejecutar

./gradlew assembleDebug

O abrir el proyecto en Android Studio y ejecutar directamente.

🏗️ Estructura del Proyecto

El proyecto sigue una arquitectura Clean Architecture con módulos separados para una mejor organización y mantenibilidad:

WeatherScope/
├── app/                            # Módulo principal de la aplicación
│   ├── src/main/java/com/bold/weatherscope/
│   │   ├── presentation/           # UI y ViewModels
│   │   │   ├── splash/            # Pantalla de splash
│   │   │   ├── main/              # Pantalla principal con búsqueda
│   │   │   ├── detail/            # Pantalla de detalle del clima
│   │   │   └── components/        # Componentes reutilizables
│   │   ├── di/                    # Módulos de inyección de dependencias
│   │   │   ├── NetworkModule.kt   # Configuración de red
│   │   │   └── RepositoryModule.kt # Binding de repositorios
│   │   ├── navigation/            # Navegación entre pantallas
│   │   └── ui/theme/              # Tema y colores de la app
│   ├── src/main/res/              # Recursos Android (layouts, strings, etc.)
│   ├── src/test/                  # Tests unitarios
│   ├── src/androidTest/           # Tests de instrumentación
│   └── build.gradle.kts           # Configuración del módulo app
│
├── domain/                        # Módulo de dominio (lógica de negocio)
│   ├── src/main/java/com/bold/domain/
│   │   ├── model/                 # Modelos de dominio
│   │   │   ├── SearchLocation.kt  # Modelo de ubicación de búsqueda
│   │   │   └── WeatherForecast.kt # Modelo de pronóstico del clima
│   │   ├── repository/            # Interfaces de repositorios
│   │   │   └── WeatherRepository.kt
│   │   ├── usecase/               # Casos de uso
│   │   │   ├── SearchLocationsUseCase.kt
│   │   │   └── GetForecastUseCase.kt
│   │   └── util/                  # Utilidades del dominio
│   │       └── Resource.kt        # Wrapper para estados de datos
│   └── build.gradle.kts           # Configuración del módulo domain
│
├── data/                          # Módulo de datos (acceso a datos)
│   ├── src/main/java/com/bold/data/
│   │   ├── remote/                # Fuentes de datos remotas
│   │   │   ├── api/               # Interfaces de API
│   │   │   │   └── WeatherApi.kt  # API del clima
│   │   │   └── dto/               # Data Transfer Objects
│   │   │       ├── SearchLocationDto.kt
│   │   │       └── ForecastDto.kt
│   │   ├── repository/            # Implementaciones de repositorios
│   │   │   └── WeatherRepositoryImpl.kt
│   │   └── mapper/                # Mappers DTO → Domain
│   │       └── WeatherMapper.kt
│   └── build.gradle.kts           # Configuración del módulo data
│
├── gradle/
│   ├── libs.versions.toml         # Catálogo centralizado de versiones
│   └── wrapper/                   # Gradle Wrapper
├── build.gradle.kts               # Configuración raíz del proyecto
├── settings.gradle.kts            # Configuración de módulos
└── README.md

📦 Descripción de Módulos

🎨 App Module (app/)

  • Responsabilidad: Capa de presentación y configuración de la aplicación
  • Contiene: Activities, Composables, ViewModels, Navigation, DI, Themes
  • Dependencias: Depende de domain y data modules

🧠 Domain Module (domain/)

  • Responsabilidad: Lógica de negocio pura, independiente de frameworks
  • Contiene: Modelos de dominio, Use Cases, Repository interfaces, Utilities
  • Dependencias: Solo Kotlin estándar, sin dependencias de Android

💾 Data Module (data/)

  • Responsabilidad: Acceso a datos externos (APIs, bases de datos)
  • Contiene: Repository implementations, API clients, DTOs, Mappers
  • Dependencias: Retrofit, OkHttp, Gson, implementa interfaces de domain

🔄 Flujo de Datos

UI (Compose) → ViewModel → UseCase → Repository Interface (Domain)
                                           ↓
                              Repository Implementation (Data) → API

Esta arquitectura modular proporciona:

  • Separación de responsabilidades
  • Facilidad para testing
  • Reutilización de código
  • Mantenibilidad mejorada
  • Escalabilidad del proyecto

🔧 Configuración de Desarrollo

Permisos Requeridos

La aplicación requiere los siguientes permisos:

  • INTERNET: Acceso a internet para funcionalidad de red
  • ACCESS_NETWORK_STATE: Estado de la red para verificar conectividad

Variables de Entorno

Asegúrate de configurar las siguientes variables:

  • Configuraciones de debug/release según el entorno de desarrollo

🧪 Testing

WeatherScope cuenta con una suite completa de tests unitarios que cubren toda la lógica de negocio y validaciones críticas del proyecto.

🚀 Comandos Rápidos

Ejecutar todos los tests

# Ejecutar tests de todos los módulos
./gradlew :domain:test :app:testDebugUnitTest

# O usar el script automatizado
./scripts/check_coverage.sh

Generar reporte de cobertura

# Generar reporte HTML y XML de cobertura
./gradlew jacocoTestReport

# Ver reporte HTML en:
# app/build/reports/jacoco/jacocoTestReport/html/index.html

Pipeline completo de CI/CD

# Ejecutar pipeline completo (limpieza, tests, cobertura)
./scripts/run_tests.sh

🎯 Comandos Específicos por Módulo

Tests del módulo Domain

./gradlew :domain:test

Tests del módulo App

./gradlew :app:testDebugUnitTest

Tests con limpieza previa

./gradlew clean :domain:test :app:testDebugUnitTest

📊 Reportes de Cobertura

Los reportes se generan automáticamente en:

app/build/reports/
├── jacoco/jacocoTestReport/
│   ├── html/index.html          # Reporte HTML interactivo
│   └── jacocoTestReport.xml     # Reporte XML para CI/CD
└── tests/testDebugUnitTest/
    └── index.html               # Resultados de tests unitarios

🔧 Configuración de Testing

Herramientas utilizadas:

  • JUnit 4: Framework principal de testing
  • Mockito: Mocking de dependencias
  • Turbine: Testing de Kotlin Flows
  • Jacoco: Reportes de cobertura de código

🚀 Pipeline de CI/CD

El proyecto incluye un pipeline completo de GitHub Actions:

# .github/workflows/ci.yml
- Ejecuta tests automáticamente en cada push/PR
- Genera reportes de cobertura
- Verifica calidad de código con lint
- Construye APK de debug
- Publica reportes en Codecov

Ejecutar pipeline localmente:

# Simular pipeline completo
./scripts/run_tests.sh

🔍 Debugging de Tests

Ejecutar tests con logs detallados:

./gradlew :domain:test --info

Ejecutar un test específico:

./gradlew :domain:test --tests "SearchLocationsUseCaseTest"

Verificar tests que fallan:

./gradlew :domain:test --continue

📦 Build y Release

Debug Build

./gradlew assembleDebug

Release Build

./gradlew assembleRelease

🤝 Contribución

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/nueva-caracteristica)
  3. Commit tus cambios (git commit -am 'Agrega nueva característica')
  4. Push a la rama (git push origin feature/nueva-caracteristica)
  5. Abre un Pull Request

📄 Licencia

Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.

👨‍💻 Autor

Desarrollado con ❤️ por Jimmy alejandro reyes vega

About

WeatherScope es una aplicación meteorológica moderna centrada en visualización geográfica. En lugar de mostrar solo texto o números, convierte condiciones climáticas en información visual sobre un mapa interactivo, ayudando al usuario a entender rápidamente lo que sucede a su alrededor.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors