Skip to content

Dmong04/ExpressFood

Repository files navigation

🍔 ExpressFood

Aplicación móvil Android para pedidos de comida, con doble interfaz para Clientes y Administradores, arquitectura offline-first y autenticación con Google mediante Firebase.

Android Kotlin Firebase Google Auth Supabase


📖 Descripción general

ExpressFood es una app Android orientada a la gestión de pedidos de comida. Soporta dos roles de usuario:

  • Clientes: navegan el menú, realizan pedidos y consultan reportes de gasto.
  • Administradores: gestionan el cumplimiento de pedidos y el inventario.

La aplicación sigue una filosofía offline-first: el usuario puede ver el menú y su historial incluso sin conexión activa a internet, gracias a la persistencia local con Room y sincronización en segundo plano.

✨ Características principales

  • 🔐 Autenticación con Google: inicio de sesión seguro usando Firebase Auth y Credential Manager.
  • 📡 Arquitectura offline-first: persistencia local con Room y sincronización en background.
  • Actualizaciones en tiempo real: seguimiento de pedidos en vivo mediante snapshots de Firestore.
  • 🧭 Acceso basado en roles: enrutamiento automático al dashboard de Cliente o Admin según el perfil del usuario.
  • 📊 Analítica de gasto: reportes mensuales y diarios para que los clientes controlen sus gastos en comida.

📱 Capturas de pantalla

Login con Google
Inicio de sesión
Pantalla de bienvenida con inicio de sesión mediante Google.
Menú principal
Menú principal
Listado del menú con platillos, precios y calificaciones.
Búsqueda de platillos
Búsqueda
Búsqueda de platillos por nombre o ingrediente.
Carrito de compras
Carrito y checkout
Resumen de la orden con subtotal, impuestos (13% IVA) y total.
Historial de pedidos
Historial de pedidos
Historial de pedidos con fecha, estado y monto.

🛠️ Stack tecnológico

Capa Tecnologías
Lenguaje Kotlin (Coroutines, Flow)
Framework de UI ViewBinding (Fragments/XML) y Jetpack Compose (Theming)
Base de datos local Room (SQLite)
Base de datos remota Firebase Firestore
Almacenamiento Supabase Storage (imágenes de productos)
Autenticación Firebase Auth + Google Sign-In (Credential Manager)
Inyección de dependencias Manual, mediante AppContainer
Tareas en segundo plano WorkManager (sincronización periódica)

🏗️ Arquitectura del sistema

El proyecto sigue el patrón MVVM (Model-View-ViewModel) combinado con una capa de Repository que abstrae las fuentes de datos. La clase AppContainer actúa como el contenedor central de inyección de dependencias, proveyendo instancias singleton de repositorios y servicios a los ViewModels.

Decisiones arquitectónicas clave

1. Inyección de dependencias manual En lugar de usar frameworks como Hilt o Koin, el proyecto implementa un patrón de DI manual a través de AppContainer, inicializado en la clase ExpressFoodApp y que mantiene el ciclo de vida de la lógica principal de la app.

2. Sincronización en segundo plano La app usa WorkManager para mantener la consistencia de los datos. Un SyncOrdersWorker se ejecuta periódicamente (cada hora) para enviar a Firestore los pedidos realizados sin conexión.

3. Estrategia de almacenamiento híbrida ExpressFood distribuye sus datos entre tres proveedores:

  • Room: caché local para productos, pedidos y el carrito de compras activo.
  • Firestore: fuente de verdad principal para perfiles de usuario y estado de los pedidos.
  • Supabase: almacenamiento de imágenes de productos del menú, optimizado para alto rendimiento.

📚 Documentación ampliada

Para más detalle sobre cada módulo del proyecto, consulta la wiki generada (DeepWiki):


📋 Prerrequisitos

  • Android Studio instalado
  • JDK disponible en el sistema (incluye keytool)
  • Proyecto creado en Firebase Console
  • PowerShell (Windows)

🔧 Paso 1 — Generar el keystore de debug

Ejecuta el siguiente comando en PowerShell para crear el keystore de debug de Android:

keytool -genkey -v `
  -keystore "$env:USERPROFILE\.android\debug.keystore" `
  -storepass android `
  -alias androiddebugkey `
  -keypass android `
  -keyalg RSA `
  -keysize 2048 `
  -validity 10000 `
  -dname "CN=Android Debug, O=Android, C=US"

Nota: Este comando genera un par de claves RSA de 2048 bits con una validez de 10 000 días. Si el archivo debug.keystore ya existe, puedes omitir este paso.


🔑 Paso 2 — Obtener la huella digital SHA-1

Ejecuta este comando para extraer el SHA-1 de tu keystore:

keytool -list -v `
  -alias androiddebugkey `
  -keystore "$env:USERPROFILE\.android\debug.keystore"
  • Contraseña del keystore: android
  • Copia el valor que aparece en la línea SHA1: del output.

⚠️ Importante: El SHA-1 del keystore de debug es solo para desarrollo local. Para publicar en Google Play Store necesitarás el SHA-1 de tu keystore de release.


☁️ Paso 3 — Registrar el SHA-1 en Firebase Console

  1. Ve a Firebase Console y abre tu proyecto ExpressFood.
  2. Haz clic en el ícono de engranaje ⚙️ → Configuración del proyecto.
  3. En la sección Tus apps, selecciona tu app Android.
  4. Desplázate hasta Huellas digitales del certificado SHA.
  5. Haz clic en Agregar huella digital y pega el SHA-1 obtenido.
  6. Guarda los cambios.

📥 Paso 4 — Actualizar google-services.json

Después de registrar la huella digital:

  1. En la misma pantalla de configuración, descarga el archivo google-services.json actualizado.
  2. Reemplaza el archivo existente en tu proyecto:
app/
└── google-services.json   ← reemplazar aquí
  1. Sincroniza el proyecto en Android Studio: File → Sync Project with Gradle Files.

📁 Estructura relevante del proyecto

ExpressFood/
├── app/
│   ├── google-services.json     ← configuración de Firebase
│   └── src/
│       └── main/
│           └── java/
│               └── com/project/expressfood/
│                   ├── data/            ← repositorios, Room, Firestore, Supabase, WorkManager
│                   ├── ui/               ← pantallas de Cliente y Admin, theming
│                   └── ExpressFoodApp.kt ← punto de entrada y AppContainer (DI)
├── build.gradle.kts
└── settings.gradle.kts

🔗 Referencias

About

Repositorio dedicado al proyecto del curso de programación y diseño en plataformas móviles

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors