Pizzería Mamma Mia! es una aplicación web desarrollada con React, React Router y Bootstrap que permite a los usuarios visualizar y agregar pizzas a su carrito de compras, además de autenticarse con un sistema real basado en JWT.
- Interfaz moderna y responsive.
- Lista de pizzas con descripciones e ingredientes.
- Botones para ver más detalles y añadir al carrito.
- Navbar con opciones de navegación, inicio de sesión y visualización del total del carrito.
- Componente Register que contiene un formulario con los campos Email, Contraseña y Confirmar contraseña. Utiliza JWT para registrar al usuario en el backend.
- Componente Login que contiene un formulario con los campos Email y Contraseña. Utiliza JWT para autenticar al usuario en el backend.
- Autenticación real con backend utilizando JWT.
- Envío de carrito de compras al backend como simulación de compra.
- Navegación mediante React Router con rutas protegidas para usuarios autenticados.
- Componente NotFound para manejar rutas inexistentes con un enlace de redirección a la página principal.
- Componente Profile que muestra el email del usuario autenticado y un botón para cerrar sesión.
- Contextos para manejar el estado del carrito, los datos de las pizzas y la sesión del usuario.
- Update! Componente
Pizzaque muestra la información detallada de una pizza específica. - Update! Componente
Cartque muestra el contenido del carrito de compras, permite modificar las cantidades de pizzas y enviar el carrito al backend. - Update! Componente
Navbaractualizado para mostrar el total del carrito y opciones de autenticación dependiendo del estado del usuario.
- React: Para la construcción de la interfaz de usuario.
- React Router: Para la gestión de rutas y navegación.
- React Context: Para la gestión global del estado de la aplicación.
- Bootstrap: Para el diseño y la responsividad.
- Firebase Storage: Para alojar las imágenes de las pizzas.
- JWT: Para autenticar usuarios con el backend.
git clone https://github.com/a-cidm/pizzeria.git
cd pizzerianpm install- Terminal 1: Para ejecutar el backend
- Terminal 2: Para ejecutar el frontend
cd backend
npm install
npm run devEl backend estará disponible en http://localhost:5000.
Desde la raíz del proyecto:
npm run devEl frontend se ejecutará en http://localhost:5173.
- Ambos servidores deben estar corriendo simultáneamente.
- Si hay conflicto de puertos, modifica
.envo los archivos de configuración. - El token JWT se almacena temporalmente en memoria (no persiste al recargar la página).
📂pizzeria
┣ 📂public
┣ 📂src
┃ ┣ 📂assets
┃ ┣ 📂components
┃ ┣ 📂pages
┃ ┣ 📂data
┃ ┣ 📂context
┃ ┃ ┣ 📜CartContext.jsx
┃ ┃ ┣ 📜PizzaContext.jsx
┃ ┃ ┣ 📜UserContext.jsx
┃ ┣ 📜App.jsx
┃ ┣ 📜main.jsx
┣ 📂backend
┣ 📜README.md
┣ 📜package.json
/→ Página de inicio./register→ Registro de usuarios./login→ Inicio de sesión./cart→ Carrito de compras (requiere login)./pizza/:id→ Detalles de pizza./profile→ Perfil del usuario autenticado.*→ Página 404 (NotFound).
Componente principal que integra la barra de navegación y define las rutas de la aplicación. Ahora envuelve la app con CartProvider, PizzaProvider y UserProvider.
Barra superior con navegación. Ahora detecta el estado del usuario y muestra las opciones correspondientes (Login, Register, Profile, Logout). También muestra el total del carrito.
Ambos componentes ahora se comunican con el backend para autenticar o registrar usuarios. Muestran alertas de éxito o error según corresponda.
Obtiene el email del usuario desde /api/auth/me y muestra un botón para cerrar sesión.
Muestra el carrito visualmente, permite modificar cantidades y enviar el carrito al backend usando /api/checkouts. Muestra mensaje de éxito tras realizar la compra.
Muestra la información detallada de una pizza individual. Permite agregarla al carrito.
Página de error 404 con enlace para volver al home.
Maneja el estado del carrito y proporciona funciones para agregar, aumentar o disminuir productos.
Maneja los datos de las pizzas y facilita su acceso desde cualquier componente.
Maneja autenticación: login, registro, cierre de sesión y obtención del perfil del usuario. Utiliza JWT.
Este proyecto es parte de un estudio académico y, por lo tanto, actualmente no acepta contribuciones externas.
Alberto Cid Montero — GitHub
MIT
Este proyecto es presentado para el Hito 8.