MovieLists es una aplicación móvil que permite a los usuarios explorar, organizar y gestionar sus películas mediante listas personalizadas. La app se integra con TMDB para autenticación y gestión de películas, facilitando el control de tus películas vistas y no vistas.
La aplicacion totalmente responsiva, adaptándose al modo claro, oscuro y al color de sistema elegido por el usuario en su dispositivo.
A continuación se muestran capturas de la app en funcionamiento, destacando la pantalla de exploración de películas, la vista de gestión de listas y otras, diseñadas con Jetpack Compose para una experiencia visual fluida y moderna.
- Explorar películas: Descubre películas populares, estrenos y más, consultando detalles como título, descripción y calificación mediante la API de TMDB.
- Gestión de listas: Crea, edita y elimina listas para organizar tus películas, sincronizadas con TMDB.
- Control de películas vistas: Marca películas como vistas y organiza tus listas.
- Autenticación TMDB: Inicia sesión mediante TMDB para personalizar tu experiencia y guardar tus listas. < li>Modo claro y oscuro: Disfruta de una interfaz adaptable a diferentes condiciones de luz.
La aplicación utiliza los siguientes endpoints de la API de TMDB para ofrecer funcionalidades avanzadas de gestión de películas:
- Autenticación:
- Obtener token temporal:
/authentication/token/new - Validar login:
/authentication/token/validate_with_login - Crear sesión:
/authentication/session/new - Eliminar sesión:
/authentication/session
- Obtener token temporal:
- Gestión de Favoritos:
- Obtener películas favoritas (usadas como películas vistas):
/account/${accountID}/favorite/movies - Agregar o remover películas de favoritos (vistas/no vistas):
/account/${accountID}/favorite
- Obtener películas favoritas (usadas como películas vistas):
- Listas:
- Crear lista:
/list - Obtener una lista:
/list/${listId} - Obtener todas las listas de una cuenta:
/account/${accountId}/lists - Agregar película a la lista:
/list/${listId}/add_item - Eliminar película de la lista:
/list/${listId}/remove_item - Eliminar lista:
/list/${listId}
- Crear lista:
- Películas:
- Obtener detalles de una película:
/movie/$movieId - Explorar listas de películas populares, estrenos, etc.:
/movie/${movieListType.endpoint} - Buscar películas:
/search/movie
- Obtener detalles de una película:
- Ktor: Cliente HTTP para interactuar con la API de TMDB.
- Coroutines y Flows: Para manejar la concurrencia y los flujos de datos de manera eficiente.
- Koin: Framework para la inyección de dependencias.
- Jetpack Compose: Framework de UI declarativa para Android.
- Material 3: Diseño de UI utilizando los componentes y directrices de Material Design 3.
- DataStore: Almacenamiento de preferencias del usuario en lugar de SharedPreferences.
- Coil: Librería de carga de imágenes optimizada para Compose.
- Firebase: Se utiliza para Analytics y Crashlytics para análisis de uso y reporte de errores en la app.
- Jetpack Libraries: Core KTX, Lifecycle, Navigation, Room, DataStore, y Material.
- Koin: Inyección de dependencias.
- Ktor: Cliente HTTP para solicitudes de API.
- Coil: Librería de carga de imágenes para Compose.
Para más detalles sobre las versiones y librerías específicas, consulta el archivo build.gradle.
La arquitectura de MovieLists App está diseñada siguiendo los principios de Clean Architecture, con una estructura de tres capas principales: Data, Domain y Presentation. Esta estructura modular permite mantener una separación clara de responsabilidades y facilita el mantenimiento, escalabilidad y pruebas del código. A continuación, se describe la estructura de carpetas detallada y el propósito de cada una.
La arquitectura se organiza en las siguientes carpetas principales:
- /data: Capa de datos responsable de gestionar las fuentes de datos de la aplicación, ya sea a través de APIs externas o de almacenamiento local.
- /datasource: Incluye las fuentes de datos, como los servicios de red o las consultas a la base de datos local.
- /interfaces: Define las interfaces de los repositorios, permitiendo que la capa de dominio interactúe con la capa de datos a través de abstracciones.
- /models: Contiene los modelos de datos utilizados exclusivamente dentro de esta capa, junto con un mapeador (mapper) para transformar estos modelos a otros modelos de la app.
- /network: Contiene la lógica de red, gestionada a través de Ktor, incluyendo las configuraciones y llamadas HTTP.
- /repository: Implementación de los repositorios que se comunican con las fuentes de datos (remotas y locales) y proporcionan datos procesados a la capa de dominio.
- /domain: Capa de dominio donde se encuentran las reglas de negocio y lógica principal de la aplicación, independiente de frameworks o detalles de implementación.
- /interfaces: Define las interfaces necesarias para la comunicación entre la capa de dominio y la capa de datos.
- /models: Contiene modelos específicos para esta capa, representando la lógica de negocio.
- /usecase: Contiene los casos de uso que encapsulan las acciones o funcionalidades principales de la aplicación, usando Flows y Coroutines para el manejo de flujos de datos.
- /presentation: Capa de presentación responsable de la interfaz de usuario, utilizando Jetpack Compose y otras herramientas de diseño modernas.
- /components: Contiene los elementos reutilizables de la UI, divididos en subcarpetas como
drawer,scaffold,searchBar, entre otros. - /component: Subcarpeta dentro de algunos componentes clave que contiene los elementos reutilizables de cada uno, como en
searchBar/component. - /shared: Almacena los componentes de UI que son compartidos en varias partes de la app.
- /models: Incluye modelos de UI específicos para esta capa, junto con mappers para transformar modelos de dominio a modelos de presentación.
- /mappers: Mapea modelos entre las capas de dominio y presentación, permitiendo la independencia entre ellas.
- /navigation: Gestiona la navegación de la aplicación, estructurada con Navigation Compose.
- /screens: Contiene las pantallas principales de la app (como
explorer,list,lists,login,movie,watched), cada una estructurada para facilitar la modularidad. - /component: Subcarpeta dentro de algunas pantallas que organiza los componentes específicos de cada pantalla, como en
lists/component. - /ui.theme: Configura los temas de la app, incluyendo el soporte para Material 3 y modos claro/oscuro.
- /utils: Incluye clases y funciones auxiliares que se utilizan en varias capas de la aplicación.
- /di: Configuración de Koin para la inyección de dependencias, permitiendo la instancia única de servicios y ViewModels.
La arquitectura de MovieLists App sigue los principios de Clean Architecture, donde cada capa tiene su responsabilidad claramente definida:
- Capa de Datos (Data): Gestiona las fuentes de datos y maneja la lógica de transformación de datos con mappers. Utiliza Ktor para llamadas de red, DataStore para el almacenamiento de preferencias, y Coil para carga de imágenes.
- Capa de Dominio (Domain): Implementa la lógica de negocio de la aplicación. Los casos de uso permiten que la capa de presentación interactúe con los datos de manera estructurada, empleando Flows y Coroutines para la manipulación de datos asíncrona.
- Capa de Presentación (Presentation): Controla la lógica de UI y los eventos del usuario. Organiza la UI en componentes y pantallas modulares, con Jetpack Compose y Material 3 para una experiencia moderna y responsive.
Con esta estructura, MovieLists App garantiza que cada capa sea fácilmente testeable y reutilizable, optimizando la app para su mantenimiento y escalabilidad.
Utiliza una clase sealed class UIState para representar diferentes estados de la interfaz (cargando, éxito, error), lo que simplifica la gestión de estados en los ViewModels.
La navegación se gestiona mediante Navigation Compose, con un stack principal que permite moverse entre pantallas de detalles de películas, listas y la pantalla principal.
- Android Studio Giraffe | 2022.3.1 o superior
- JDK 11 o superior
- Cuenta de TMDB para autenticación y acceso a la API.
- Clona el repositorio:
git clone https://github.com/tu-usuario/MovieListsApp.git - Configura la API de TMDB:
- Regístrate en TMDB y genera una API Key.
- Agrega la API Key en el archivo de configuración apropiado en el proyecto.
- Sincroniza y compila el proyecto en Android Studio.
La aplicación se puede instalar directamente desde el archivo .apk incluido en el repositorio, o puedes compilarla manualmente desde Android Studio siguiendo los pasos de la sección de configuración.
Las contribuciones son bienvenidas. Si deseas colaborar, por favor abre un "issue" o envía un "pull request" con tus propuestas.







