Skip to content

Dootez/AnimeApp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎌 Anime App - Examen PMDM

Aplicación Android desarrollada con Kotlin y Jetpack Compose que consume la API de Jikan para mostrar información sobre animes y permite a los usuarios registrarse, iniciar sesión y guardar sus puntuaciones personales.

📋 Características

  • Autenticación con Firebase (Email y Contraseña)
  • Consumo de API REST (Jikan API)
  • Base de datos local con Room
  • Carga de imágenes con Coil
  • Arquitectura MVVM
  • Material Design 3
  • Navegación con Jetpack Compose

🏗️ Arquitectura

El proyecto sigue la arquitectura MVVM (Model-View-ViewModel):

app/
├── data/
│   ├── local/          # Room Database
│   │   ├── dao/        # Data Access Objects
│   │   ├── database/   # Configuración de Room
│   │   └── entity/     # Entidades de la BD
│   ├── remote/         # API
│   │   ├── api/        # Interfaces de Retrofit
│   │   └── dto/        # Data Transfer Objects
│   └── repository/     # Repositorios
├── domain/
│   └── model/          # Modelos de dominio
├── ui/
│   ├── login/          # Pantalla de Login
│   ├── home/           # Pantalla Home
│   ├── navigation/     # Navegación
│   └── theme/          # Tema de la app
└── MainActivity.kt

🚀 Configuración del Proyecto

1. Firebase Setup

  1. Ve a Firebase Console
  2. Crea un nuevo proyecto o usa uno existente
  3. Añade una app Android con el package name: com.tuusuario.animeapp
  4. Descarga el archivo google-services.json
  5. Colócalo en app/google-services.json
  6. Habilita AuthenticationEmail/Password en Firebase Console

2. Build.gradle (Project)

Añade en build.gradle (nivel proyecto):

buildscript {
    dependencies {
        classpath("com.google.gms:google-services:4.4.0")
    }
}

3. Dependencias

Todas las dependencias están incluidas en el archivo build.gradle (Module: app):

  • Jetpack Compose
  • Firebase Auth
  • Retrofit (API REST)
  • Room (Base de datos local)
  • Coil (Carga de imágenes)
  • Navigation Compose
  • Coroutines

4. Permisos

Los permisos necesarios ya están en AndroidManifest.xml:

  • INTERNET
  • ACCESS_NETWORK_STATE

📱 Pantallas

Login Screen

  • Registro de nuevos usuarios
  • Inicio de sesión
  • Validación de email (formato correcto)
  • Validación de contraseña (mínimo 4 caracteres)
  • Mensajes Toast para feedback

Home Screen

  • Lista de animes desde Jikan API
  • Información: imagen, título, episodios, rating, score
  • Campo para añadir puntuación personal
  • Filtro: ver todos / ver solo puntuados
  • Barra superior con nombre de usuario
  • Barra inferior con iconos de filtro

🔧 API Endpoints

Base URL: https://api.jikan.moe

Endpoint: /v4/anime

Campos usados:

  • mal_id
  • images.jpg.image_url
  • title
  • episodes
  • rating
  • score

💾 Base de Datos Room

Tabla: anime_score

Columnas:

  • malId (INT, Primary Key)
  • personalScore (DOUBLE)

Estrategia de inserción: OnConflictStrategy.REPLACE

🎨 Diseño

  • Espaciado entre componentes: 8-12 dp
  • Padding horizontal: 16-24 dp
  • Material Design 3
  • Scaffold con TopBar y BottomBar
  • Cards con elevación para cada anime

📝 Notas de Implementación

ViewModel

  • LoginViewModel: Gestiona autenticación y validación
  • HomeViewModel: Gestiona lista de animes y puntuaciones

Repository Pattern

  • AuthRepository: Encapsula Firebase Auth
  • AnimeRepository: Combina datos de API y Room

States con Flow

  • Se usa StateFlow para estados reactivos
  • collectAsState() en Composables

Manejo de Errores

  • Try-catch en operaciones de red y BD
  • Mensajes Toast para feedback al usuario
  • Estados de carga con CircularProgressIndicator

🔍 Validaciones

Email

  • Regex: [a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+
  • Los botones solo se activan con email válido

Contraseña

  • Longitud mínima: 4 caracteres
  • Campo con opción de mostrar/ocultar

Puntuación Personal

  • Debe ser un número entre 0 y 10
  • Se valida antes de guardar en Room

🚦 Flujo de la Aplicación

  1. Usuario abre la app → LoginScreen
  2. Usuario se registra o inicia sesión → Firebase Auth
  3. Login exitoso → Navegación a HomeScreen
  4. App carga animes → Jikan API + Room
  5. Usuario ve lista de animes con sus puntuaciones
  6. Usuario añade/actualiza puntuación → Guarda en Room
  7. Usuario puede filtrar por todos o solo puntuados

📚 Librerías Principales

Librería Versión Uso
Compose BOM 2023.08.00 UI con Jetpack Compose
Firebase BOM 32.7.0 Autenticación
Retrofit 2.9.0 Consumo de API
Room 2.6.1 Base de datos local
Coil 2.5.0 Carga de imágenes
Navigation 2.7.6 Navegación entre pantallas

🐛 Troubleshooting

Error: "google-services.json not found"

  • Asegúrate de añadir tu archivo de Firebase en app/google-services.json

Error: "Unable to resolve dependency"

  • Verifica que tienes conexión a internet
  • Haz Sync Project with Gradle Files

Error: "No se cargan las imágenes"

  • Verifica los permisos de INTERNET en el Manifest
  • Comprueba que Coil está correctamente importado

Error: "Firebase Auth no funciona"

  • Verifica que habilitaste Email/Password en Firebase Console
  • Comprueba el package name en Firebase

📖 Recursos de Aprendizaje

👨‍💻 Autor

Proyecto desarrollado por Eneko para el examen de Programación Multimedia y Dispositivos Móviles - 2º DAM

About

Anime score rating app using API REST, Retrofit, ROOM, Firebase and Jetpack Compose.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages