Carta - FactoriaF5-Asturias/project-p5-digital-academy-team2-restaurant-frontend GitHub Wiki
Carta — Platos y bebidas del restaurante
Vista
La Carta (/carta) muestra todos los platos y bebidas del restaurante. Es pública: cualquier visitante puede consultarla sin iniciar sesión.
- Pestañas de categorías para filtrar: Todos, Especialidades, Entrantes, Carnes, Pescados, Postres y Bebidas.
- Tarjeta de cada producto con foto, etiqueta (si la tiene), nombre, precio, descripción, selector de cantidad y botón "Añadir".
- Al pulsar en la foto o el nombre, se abre el detalle del producto.
Responsables y tareas
Responsable: Gema Miguel · Maqueta inicial: Iker
| Tarea Jira | Descripción | Estado |
|---|---|---|
| GC-84 | [HU-06] Explorar la carta filtrando por categoría | Historia |
| GC-87 | Crear la tarjeta de producto con imagen, badge, nombre, precio y descripción corta | Listo |
| GC-88 | Conectar con el listado de productos (API del backend) | Listo |
Capturas
Entidades involucradas
| Archivo | Tipo | Función |
|---|---|---|
src/Views/Menu/CartaView.vue |
Vista | Página de la Carta: carga los productos, filtra por categoría y añade al carrito |
src/components/CategoryTabs.vue |
Componente | Pestañas de categorías (usa v-model) |
src/components/ProductCard.vue |
Componente | Tarjeta de producto con selector de cantidad y botón "Añadir" |
src/components/QuantityStepper.vue |
Componente | Selector de cantidad (− / +) |
src/composables/useProducts.js |
Composable | Pide los productos al back y los comparte con la Home |
src/composables/useCart.js |
Composable | Carrito compartido de toda la aplicación |
public/menu-img/ |
Imágenes | Fotos de los 38 productos |
Endpoints que consume
| Método | Ruta | Para qué |
|---|---|---|
GET |
/api/products |
Todos los productos de la carta |
La URL base se toma de la variable VITE_API_URL del archivo .env (ver .env.example).
Cómo probarlo
- Arranca el back (Docker Desktop +
GoxuApplication) y el front (npm run dev). - Abre
http://localhost:5173/carta. - Comprueba que:
- Aparecen los 38 productos con su foto.
- Al pulsar una pestaña solo se ven los productos de esa categoría.
- Al pulsar "Añadir", el botón cambia a "Añadido ✓" durante un momento y aparece el aviso en el icono del carrito de la cabecera.
- En el carrito aparecen los productos con la cantidad elegida.
Decisiones
- El filtro se hace en el front. Se piden todos los productos una sola vez y las pestañas los filtran con una propiedad
computed, sin volver a llamar al back en cada cambio de categoría. - Adaptador entre back y front.
useProductsconvierte el precio a número y agrupa la etiqueta en un objetobadge: { label, tone }, que es el formato que esperaProductCard. - Estado compartido. La lista de productos se declara fuera de la función del composable, así la Carta y la Home usan la misma.
- La tarjeta avisa, la vista decide.
ProductCardno añade al carrito: emite el eventoaddcon{ id, quantity }y esCartaViewquien llama auseCart. - Confirmación visual accesible. Al añadir, el botón cambia de color y de texto ("Añadido ✓"), con
aria-livepara que lo anuncien los lectores de pantalla. - Imágenes en el front. El back solo guarda la ruta (
/menu-img/...); los archivos están en la carpetapublic/del front.
Limitaciones
- Las categorías están escritas en
CartaView. Si el back añade una categoría nueva, hay que añadirla también a la lista del front. - El carrito no se guarda si se recarga la página: vive en memoria mientras la aplicación está abierta.