Skip to content

Latest commit

Β 

History

100 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ” Restaurant Order System β€” Proyecto Final PP4

Sistema completo de gestiΓ³n de pedidos para restaurantes con escaneo de QR por mesa, panel de administraciΓ³n, integraciΓ³n de pagos con MercadoPago y monitoreo con Prometheus + Grafana.


πŸ“‹ Tabla de Contenidos


πŸ“– DescripciΓ³n General

Este sistema permite a los clientes de un restaurante escanear un cΓ³digo QR en su mesa para acceder al menΓΊ digital, armar su pedido y pagar directamente desde su celular mediante MercadoPago. El personal del restaurante cuenta con un Panel de AdministraciΓ³n protegido donde puede gestionar mesas, productos, pedidos y usuarios.

Flujo principal del cliente

Escanear QR de la mesa β†’ Ver menΓΊ β†’ Agregar al carrito β†’ Pagar con MercadoPago β†’ Pedido registrado automΓ‘ticamente

Flujo del administrador

Login β†’ Panel Admin β†’ Gestionar Mesas / Productos / Pedidos / Usuarios / Ver mΓ©tricas diarias

πŸ—οΈ Arquitectura

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        Clientes                             β”‚
β”‚              (Navegador web / celular con QR)               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚ HTTPS
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Frontend (React + Vite)                        β”‚
β”‚         Vercel β€” https://proyecto-final-pp-4.vercel.app     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚ REST API
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Backend (Express.js + Prisma)                  β”‚
β”‚           Render β€” https://server-ocdr.onrender.com         β”‚
β”‚                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚   /users    β”‚ β”‚  /products   β”‚ β”‚       /mesas        β”‚  β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  β”‚
β”‚  β”‚  /payments  β”‚ β”‚   /orders    β”‚ β”‚       /metrics      β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
└────────┬───────────────────────────────────────────────────-β”˜
         β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   PostgreSQL 15   β”‚     β”‚   MercadoPago API                β”‚
β”‚  (Docker / Render)β”‚     β”‚   (Procesamiento de pagos)       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Monitoreo                                      β”‚
β”‚  Prometheus (:9090) + Grafana (:3000)                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ› οΈ TecnologΓ­as

Capa TecnologΓ­a
Frontend React 19, Vite 7, React Router DOM, TailwindCSS 3, Lucide React
Backend Node.js 18, Express 5, Prisma 6, Zod
Base de datos PostgreSQL 15
AutenticaciΓ³n JWT (jsonwebtoken) + bcryptjs
Pagos MercadoPago SDK v2
Monitoreo Prometheus (prom-client) + Grafana
Contenedores Docker, Docker Compose
CI/CD GitHub Actions
Deploy Frontend Vercel
Deploy Backend Render
IaC Terraform (Vercel Provider)
QR html5-qrcode, react-qr-code
PWA vite-plugin-pwa

πŸ“ Estructura del Proyecto

Proyecto-Final-PP4/
β”œβ”€β”€ .github/
β”‚   └── workflows/
β”‚       β”œβ”€β”€ ci-cd.yml               # Pipeline: build β†’ test β†’ Docker Hub β†’ Render + Vercel
β”‚       └── terraform-vercel.yml    # Deploy de infraestructura con Terraform
β”‚
β”œβ”€β”€ client/                         # AplicaciΓ³n React (Frontend)
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/             # Componentes de la UI
β”‚   β”‚   β”‚   β”œβ”€β”€ AdminDashboard.jsx  # Panel principal del admin
β”‚   β”‚   β”‚   β”œβ”€β”€ Cart.jsx            # Carrito de compras
β”‚   β”‚   β”‚   β”œβ”€β”€ Login.jsx           # Pantalla de login
β”‚   β”‚   β”‚   β”œβ”€β”€ MenuManagement.jsx  # GestiΓ³n del menΓΊ (admin)
β”‚   β”‚   β”‚   β”œβ”€β”€ MenuSection.jsx     # Vista del menΓΊ para clientes
β”‚   β”‚   β”‚   β”œβ”€β”€ OrderManagement.jsx # GestiΓ³n de pedidos (admin)
β”‚   β”‚   β”‚   β”œβ”€β”€ QRScanner.jsx       # EscΓ‘ner de QR de mesa
β”‚   β”‚   β”‚   β”œβ”€β”€ RestaurantApp.jsx   # App principal del cliente
β”‚   β”‚   β”‚   β”œβ”€β”€ TableManagement.jsx # GestiΓ³n de mesas (admin)
β”‚   β”‚   β”‚   └── UserManagement.jsx  # GestiΓ³n de usuarios (admin)
β”‚   β”‚   β”œβ”€β”€ config/
β”‚   β”‚   β”‚   └── api.js              # URL base de la API (dev/prod)
β”‚   β”‚   β”œβ”€β”€ App.jsx                 # Router principal + pΓ‘ginas de pago
β”‚   β”‚   └── main.jsx                # Entry point
β”‚   β”œβ”€β”€ Dockerfile                  # Multi-stage: build β†’ nginx
β”‚   β”œβ”€β”€ vercel.json                 # Config de routing para Vercel
β”‚   └── package.json
β”‚
β”œβ”€β”€ server/                         # API REST (Backend)
β”‚   β”œβ”€β”€ controllers/                # LΓ³gica de los endpoints
β”‚   β”œβ”€β”€ middlewares/                # Auth, CORS, errores, Prometheus
β”‚   β”œβ”€β”€ routes/                     # DefiniciΓ³n de rutas Express
β”‚   β”œβ”€β”€ services/                   # LΓ³gica de negocio y acceso a DB
β”‚   β”œβ”€β”€ utils/                      # JWT, hash, manejo de errores
β”‚   β”œβ”€β”€ prisma/
β”‚   β”‚   β”œβ”€β”€ schema.prisma           # Modelos de la base de datos
β”‚   β”‚   └── seed.js                 # Datos iniciales (productos, mesas, admin)
β”‚   β”œβ”€β”€ Dockerfile                  # Imagen Node.js + Prisma
β”‚   └── package.json
β”‚
β”œβ”€β”€ infra/                          # Infraestructura como cΓ³digo
β”‚   β”œβ”€β”€ main.tf                     # Recursos Vercel (proyecto + deploy)
β”‚   └── variables.tf                # Variables de Terraform
β”‚
β”œβ”€β”€ monitoring/                     # Observabilidad
β”‚   β”œβ”€β”€ prometheus.yml              # ConfiguraciΓ³n de scraping
β”‚   └── grafana-provisioning/       # Dashboards y datasources de Grafana
β”‚
β”œβ”€β”€ test/                           # Tests de integraciΓ³n (Jest)
β”œβ”€β”€ docker-compose.yaml             # OrquestaciΓ³n local completa
β”œβ”€β”€ jest.config.mjs                 # ConfiguraciΓ³n de Jest
└── package.json                    # Scripts de test raΓ­z

βœ… Requisitos Previos


πŸš€ Inicio RΓ‘pido con Docker

La forma mΓ‘s fΓ‘cil de levantar el proyecto completo (frontend + backend + base de datos + monitoreo):

# 1. Clonar el repositorio
git clone https://github.com/GustavoBaranda/Proyecto-Final-PP4.git
cd Proyecto-Final-PP4

# 2. Crear el archivo de variables de entorno del servidor
cp server/.env.example server/.env
# Editar server/.env con tus credenciales

# 3. Levantar todos los servicios
docker compose up --build

Servicios disponibles despuΓ©s del docker compose up

Servicio URL
Frontend http://localhost:5173
Backend API http://localhost:8000
API Status http://localhost:8000/api/status
MΓ©tricas Prometheus http://localhost:8000/metrics
Prometheus UI http://localhost:9090
Grafana Dashboard http://localhost:3000 (user: admin / pass: admin)
PostgreSQL localhost:5432 (user: user, pass: password, db: mydb)

El servicio seed corre automΓ‘ticamente al iniciar, cargando productos, mesas y el usuario admin inicial.


πŸ” Variables de Entorno

Backend (server/.env)

# Base de datos
DATABASE_URL=postgres://user:password@localhost:5432/mydb?sslmode=disable

# Servidor
PORT=8000
NODE_ENV=development

# JWT
JWT_SECRET=tu_secreto_jwt_aqui

# MercadoPago
MERCADOPAGO_ACCESS_TOKEN=tu_access_token_de_mercadopago
MERCADOPAGO_BASE_URL=https://tu-backend.onrender.com
MERCADOPAGO_NOTIFY_URL=https://tu-backend.onrender.com/api/payments/webhook

# CORS / Redirecciones
FRONTEND_URL=http://localhost:5173

Frontend (client/.env)

REACT_APP_API_URL=http://localhost:8000

Nota: En producciΓ³n, el frontend detecta automΓ‘ticamente el entorno y apunta a https://server-ocdr.onrender.com.


πŸ”„ CI/CD y Despliegue

El pipeline de GitHub Actions (.github/workflows/ci-cd.yml) se activa en cada push a master:

push a master
      β”‚
      β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Job 1: build-test-push         β”‚
β”‚  1. Instalar dependencias       β”‚
β”‚  2. Correr tests (Jest)         β”‚
β”‚  3. Build Docker (front + back) β”‚
β”‚  4. Push a Docker Hub           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚ (on success)
               β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Job 2: deploy                  β”‚
β”‚  1. Trigger Render deploy hook  β”‚
β”‚  2. Trigger Vercel deploy hook  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚
               β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Job 3: notify                  β”‚
β”‚  Muestra resumen del pipeline   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Secrets de GitHub Actions requeridos

Secret DescripciΓ³n
DOCKERHUB_USERNAME Usuario de Docker Hub
DOCKERHUB_TOKEN Token de acceso a Docker Hub
RENDER_DEPLOY_HOOK URL webhook de redeploy en Render
VERCEL_DEPLOY_HOOK URL webhook de redeploy en Vercel

πŸ“Š Monitoreo

El backend expone mΓ©tricas en formato Prometheus en el endpoint GET /metrics.

MΓ©tricas disponibles

MΓ©trica Tipo DescripciΓ³n
http_request_duration_seconds Histogram Latencia de requests HTTP
http_requests_total Counter Total de requests por mΓ©todo/ruta/status
http_request_errors_total Counter Errores 4xx y 5xx
http_response_size_bytes Histogram TamaΓ±o de respuestas
http_requests_in_progress Gauge Requests activas en tiempo real
MΓ©tricas del proceso Node.js Default CPU, memoria, GC, etc.

Grafana estΓ‘ pre-configurado con provisioning automΓ‘tico y se conecta a Prometheus como datasource.


πŸ—οΈ Infraestructura como CΓ³digo

El directorio infra/ contiene la configuraciΓ³n de Terraform para gestionar el proyecto de Vercel:

cd infra

# Inicializar Terraform
terraform init

# Ver el plan de cambios
terraform plan -var="vercel_api_token=TU_TOKEN"

# Aplicar cambios
terraform apply -var="vercel_api_token=TU_TOKEN"

πŸ“š DocumentaciΓ³n por MΓ³dulo


πŸ‘₯ Autores

Breaking Code β€” Proyecto Final PP4


πŸ“„ Licencia

ISC

About

🍽️ Sistema de gestión de pedidos para restaurantes con QR por mesa, panel admin, pagos con MercadoPago y monitoreo con Prometheus + Grafana.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages