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.
- DescripciΓ³n General
- Arquitectura
- TecnologΓas
- Estructura del Proyecto
- Requisitos Previos
- Inicio RΓ‘pido con Docker
- Variables de Entorno
- CI/CD y Despliegue
- Monitoreo
- Infraestructura como CΓ³digo
- DocumentaciΓ³n por MΓ³dulo
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.
Escanear QR de la mesa β Ver menΓΊ β Agregar al carrito β Pagar con MercadoPago β Pedido registrado automΓ‘ticamente
Login β Panel Admin β Gestionar Mesas / Productos / Pedidos / Usuarios / Ver mΓ©tricas diarias
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| 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 |
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
- Node.js v18 o superior
- Docker y Docker Compose
- Cuenta en MercadoPago Developers (para credenciales)
- (Opcional) Cuenta en Vercel y Render para deploy en la nube
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| 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
seedcorre automΓ‘ticamente al iniciar, cargando productos, mesas y el usuario admin inicial.
# 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:5173REACT_APP_API_URL=http://localhost:8000Nota: En producciΓ³n, el frontend detecta automΓ‘ticamente el entorno y apunta a
https://server-ocdr.onrender.com.
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 β
βββββββββββββββββββββββββββββββββββ
| 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 |
El backend expone mΓ©tricas en formato Prometheus en el endpoint GET /metrics.
| 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.
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"- π README del Frontend (client) β Componentes, rutas, configuraciΓ³n de Vite y PWA
- π README del Backend (server) β API REST, endpoints, modelos, autenticaciΓ³n y middlewares
Breaking Code β Proyecto Final PP4
ISC