- Caso elegido y alcance
Caso: Gustoso – Red social culinaria
Descripción: Gustoso es una aplicación social centrada en la gastronomía que permite a los usuarios descubrir, compartir y guardar recetas de cocina de forma visual e intuitiva. El enfoque está en conectar personas a través de sus gustos culinarios, fomentando la interacción y el intercambio de conocimientos gastronómicos.
Alcance EP3:
Diseño de interfaz de usuario (UI) con Jetpack Compose.
Validaciones en formularios de registro e inicio de sesión.
Navegación entre pantallas principales y secundarias.
Gestión de estado local con ViewModel y mutableStateOf.
Persistencia local de recetas mediante Room (CRUD).
Almacenamiento de imagen de perfil con acceso a cámara o galería.
Animaciones contextuales y transiciones visuales.
Consumo de API externa para autenticación y datos del usuario (/me).
- Requisitos y ejecución
Stack:
Lenguaje: Kotlin
Framework: Ionic
Gestión de estado: ViewModel + State Hosting
Persistencia: Room Database
Consumo de API: thecocktaildb, paypal
Dependencias adicionales: Coil (carga de imágenes), Material3, Navigation Compose, Coroutines
Ejecución (Android Studio):
Abrir el proyecto en Android Studio.
Configurar el Gradle JDK a la versión 17.
Sincronizar dependencias (Sync Project with Gradle Files).
Ejecutar con el perfil de depuración (Run
- Arquitectura y flujo
Estructura general:
com.gustoso/ ├── ui/ # Pantallas y componentes UI ├── data/ # Modelos, entidades y DAOs ├── network/ # Servicios API y modelos de respuesta ├── navigation/ # Graph de navegación ├── state/ # ViewModels y lógica de estado └── utils/ # Helpers y validaciones
Gestión de estado:
Estado local manejado con rememberSaveable y mutableStateOf.
Estado global (sesión del usuario) gestionado desde un ViewModel persistente.
Flujo de datos unidireccional: UI → ViewModel → Repository → API/DB.
Navegación:
Implementada con Navigation Compose.
Flujo tipo stack, con navegación entre pantallas principales:
LoginScreen → RegisterScreen → HomeScreen → RecipeDetail → ProfileScreen
Se contempla Deep Link para abrir recetas compartidas desde links externos.
- Funcionalidades
Formulario validado:
Registro de usuario con validación de correo, contraseña y nombre.
Inicio de sesión con verificación de credenciales mediante API externa.
Navegación y backstack:
Implementación de NavController para moverse entre pantallas principales y secundarias.
Gestión de estado:
Estados de carga, éxito y error manejados con sealed classes y mutableStateOf.
Persistencia local (CRUD):
Base de datos Room con entidad RecipeEntity para guardar, editar y eliminar recetas locales.
Almacenamiento de imagen de perfil:
Permite tomar una foto con la cámara o seleccionar desde la galería (con permisos gestionados).
Recursos nativos:
Acceso a cámara y almacenamiento interno con ActivityResultLauncher.
Fallback a imagen predeterminada en caso de error o denegación de permisos.
Animaciones:
Transiciones de entrada/salida entre pantallas.
Animación de carga al obtener recetas.
Consumo de API:
Autenticación de usuarios (/auth/signup, /auth/login).
Obtención de información del usuario autenticado (/auth/me).
- Endpoints
Base URL: https://x8ki-letl-twmt.n7.xano.io/api:Rfm_61dW
Método Ruta Body Respuesta POST /auth/signup { email, password, name } 201 { authToken, user: { id, email, name } } POST /auth/login { email, password } 200 { authToken, user: { id, email, name } } GET /auth/me - (requiere header Authorization: Bearer token) 200 { id, email, name, avatarUrl } 6. User flows
Flujo principal – Registro y navegación:
El usuario abre la app y ve la pantalla de bienvenida.
Selecciona “Registrarse” y completa los campos validados.
La app envía los datos al endpoint /auth/signup.
Al recibir la respuesta, guarda el token y redirige a la pantalla principal (HomeScreen).
El usuario puede navegar entre recetas, crear nuevas o ver su perfil.
Flujo secundario – Gestión de recetas:
Desde HomeScreen, el usuario selecciona “Agregar receta”.
Completa el formulario (nombre, ingredientes, pasos, imagen).
La receta se guarda localmente en Room.
Desde el perfil, puede editar o eliminar recetas previas.