8.3 KiB
Taller: Desarrollo con Angular e Ionic
Capítulo 3: Estructura de la Aplicación de Reservas para Gimnasio
En este capítulo, detallaremos la estructura y planificación de nuestra aplicación de reservas para gimnasio. Esto nos servirá como guía para el desarrollo que realizaremos en los siguientes capítulos.
1. Definición de Requisitos
Nuestra aplicación de reservas para gimnasio debe cumplir con los siguientes requisitos:
Funcionalidades Principales
- Ver clases disponibles: Listado de clases con información sobre horarios, instructores y plazas
- Reservar clases: Posibilidad de reservar una clase si hay plazas disponibles
- Gestionar reservas: Ver, modificar y cancelar reservas existentes
- Perfil de usuario: Información básica del usuario y preferencias
- Notificaciones: Recordatorios de clases reservadas
Tipos de Usuario
- Clientes: Pueden ver clases, hacer reservas y gestionar su perfil
- Administradores: Pueden gestionar clases, instructores y ver estadísticas (para una versión futura)
2. Planificación de la Estructura
Entidades Principales
-
Clases (GymClass)
- ID
- Nombre
- Descripción
- Instructor
- Horario (Inicio/Fin)
- Capacidad máxima
- Reservas actuales
-
Reservas (Booking)
- ID
- ID de Usuario
- ID de Clase
- Fecha
- Estado (Confirmada, Cancelada, Pendiente)
-
Usuario (User)
- ID
- Nombre
- Foto de perfil
- Preferencias
Páginas Principales
-
Inicio/Login
- Autenticación de usuarios
- Pantalla de bienvenida
-
Lista de Clases
- Mostrar todas las clases disponibles
- Filtros por día, tipo, instructor
-
Detalle de Clase
- Información completa de la clase
- Botón para reservar
- Lista de participantes (opcional)
-
Mis Reservas
- Lista de reservas del usuario
- Opciones para cancelar/modificar
-
Perfil
- Datos del usuario
- Preferencias
- Estadísticas (opcional)
3. Diseño de la Arquitectura
Estructura de Carpetas
gym-reservation-app/
├── src/
│ ├── app/
│ │ ├── core/ # Servicios core, guards, interceptores
│ │ │ ├── services/
│ │ │ ├── guards/
│ │ │ └── interceptors/
│ │ ├── shared/ # Componentes compartidos
│ │ │ ├── components/
│ │ │ ├── directives/
│ │ │ └── pipes/
│ │ ├── models/ # Interfaces y modelos
│ │ ├── pages/ # Páginas principales
│ │ │ ├── auth/
│ │ │ ├── classes/
│ │ │ ├── class-detail/
│ │ │ ├── bookings/
│ │ │ └── profile/
│ │ ├── app.component.ts
│ │ ├── app.module.ts
│ │ └── app-routing.module.ts
│ ├── assets/
│ │ ├── icon/
│ │ └── images/
│ ├── environments/
│ └── theme/
└── capacitor.config.ts
Arquitectura y Patrones
Utilizaremos una arquitectura basada en:
- Componentes: Encapsulan partes de la UI y su lógica asociada
- Servicios: Manejan la lógica de negocio y el acceso a datos
- Modelos: Definen las estructuras de datos
- Enrutamiento: Gestiona la navegación entre páginas
- Patrón Observable: Para gestionar flujos de datos asincrónicos
4. Diseño de la Base de Datos
Para esta versión inicial, utilizaremos almacenamiento local mediante Capacitor/Storage. En una versión futura, podríamos migrar a Firebase o una API REST.
Estructura del almacenamiento local:
{
"classes": [
{
"id": "1",
"name": "Yoga",
"description": "Clase de yoga para todos los niveles",
"instructor": "María López",
"startTime": "2025-04-22T08:00:00",
"endTime": "2025-04-22T09:00:00",
"maxCapacity": 15,
"currentBookings": 8
},
// Más clases...
],
"bookings": [
{
"id": "1",
"userId": "user123",
"classId": "1",
"className": "Yoga",
"date": "2025-04-22T08:00:00",
"status": "confirmed"
},
// Más reservas...
],
"users": [
{
"id": "user123",
"name": "Usuario Demo",
"email": "usuario@ejemplo.com",
"profilePic": "avatar.jpg",
"preferences": {
"notifications": true,
"favoriteClasses": ["1", "3"]
}
},
// Más usuarios...
]
}
5. Flujos de Navegación
Flujo Principal
- Inicio: El usuario abre la aplicación
- Autenticación: El usuario inicia sesión (simulado en esta versión)
- Tabs: Navegación principal con tabs
- Tab 1: Clases disponibles
- Tab 2: Mis reservas
- Tab 3: Perfil
Flujo de Reserva
- Usuario navega a "Clases disponibles"
- Usuario selecciona una clase específica
- En la pantalla de detalle, pulsa "Reservar Clase"
- Se muestra confirmación y se redirige a "Mis Reservas"
Flujo de Cancelación
- Usuario navega a "Mis Reservas"
- Usuario desliza una reserva hacia la izquierda
- Pulsa en "Cancelar"
- Se muestra confirmación y se actualiza la lista
6. Integración con Capacitor
Para mejorar la experiencia de usuario y aprovechar las capacidades nativas, integraremos los siguientes plugins de Capacitor:
-
@capacitor/local-notifications
- Enviar recordatorios de clases
- Notificaciones de confirmación de reservas
-
@capacitor/camera
- Permitir a los usuarios actualizar su foto de perfil
- Opción de tomar foto o seleccionar de la galería
-
@capacitor/preferences (antes Storage)
- Almacenar datos de usuario
- Guardar preferencias
- Persistir información de clases y reservas
-
@capacitor/device (opcional)
- Obtener información del dispositivo para personalizar la experiencia
7. Plan de Implementación
Para desarrollar la aplicación seguiremos estos pasos:
-
Configuración del proyecto
- Crear proyecto Ionic con Angular
- Instalar dependencias necesarias
-
Implementación de los modelos de datos
- Definir interfaces TypeScript para las entidades
-
Servicios Core
- Implementar servicios para gestionar clases
- Implementar servicios para gestionar reservas
- Implementar servicio de autenticación (mock)
-
Componentes Shared
- Crear componentes reutilizables (tarjetas, listas, etc.)
-
Páginas principales
- Implementar página de listado de clases
- Implementar página de detalle de clase
- Implementar página de mis reservas
- Implementar página de perfil
-
Navegación y enrutamiento
- Configurar las rutas
- Implementar navegación entre páginas
-
Capacitor y funcionalidades nativas
- Integrar notificaciones
- Integrar cámara
- Implementar almacenamiento persistente
-
Pruebas y ajustes
- Probar funcionalidades
- Ajustar estilos y mejorar UX
8. Consideraciones para Versiones Futuras
En futuras versiones se podrían incluir:
-
Autenticación real
- Integración con Firebase Auth o similares
- Roles de usuario (cliente/admin)
-
Backend real
- API REST o Firebase para datos en tiempo real
- Sincronización entre dispositivos
-
Funcionalidades avanzadas
- Pagos para clases premium
- Calendarios personalizados
- Estadísticas de asistencia
- Chat con instructores
-
Mejoras UX/UI
- Temas personalizables
- Animaciones
- Modo oscuro/claro
Conclusión
En este capítulo hemos definido la estructura de nuestra aplicación de reservas para gimnasio, estableciendo una base sólida para el desarrollo. Con esta planificación, podemos proceder a la implementación paso a paso, siguiendo las mejores prácticas de Angular e Ionic.
En el siguiente capítulo, comenzaremos con la implementación práctica, creando el proyecto base y desarrollando los modelos y servicios esenciales.