Skip to content
JeanCaicedoPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SGPR — Sistema de Gestión y Pedidos de Restaurante

Aplicación fullstack para administrar un restaurante: menú, pedidos, mesas, reservas, inventario con recetas, proveedores, empleados y reportes de ventas. Maneja tres roles con vistas propias: cliente, mesero y administrador.

Stack

Capa Tecnología
Backend Node.js 18+, Express, Zod, JWT, bcrypt, Helmet, rate-limit
Base de datos PostgreSQL (Supabase)
Frontend React 18, Vite 5, React Router 6, Axios

Estructura

SGPR/
├── backend/    # API REST (Express + Supabase)
├── frontend/   # SPA (React + Vite)
└── database/   # schema.sql (tablas, índices y vistas)

Puesta en marcha

1. Base de datos (Supabase)

  1. Crea un proyecto en supabase.com.
  2. Abre el SQL Editor y ejecuta el contenido completo de database/schema.sql.
  3. Copia la URL del proyecto y la service role key (Settings → API).

2. Backend

cd backend
cp .env.example .env   # completa SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY y JWT_SECRET
npm install
npm run seed           # crea admin, categorías, mesas, platos, insumos y recetas
npm run dev            # http://localhost:4000

El seed crea el usuario administrador admin@sgpr.com / admin123. Cámbiale la contraseña apenas entres.

3. Frontend

cd frontend
cp .env.example .env   # VITE_API_URL=http://localhost:4000/api
npm install
npm run dev            # http://localhost:5173

Roles y funcionalidades

Rol Puede
Cliente Ver menú público, registrarse, pedir con carrito, ver sus pedidos, reservar mesa
Mesero Panel de mesas en vivo, tomar comandas por mesa, cambiar estado de pedidos, facturar
Administrador Todo lo anterior + CRUD de menú/categorías, inventario, proveedores, empleados, dashboard y reportes

API (resumen)

Base: /api — autenticación con Authorization: Bearer <token>.

Módulo Endpoints
Auth POST /auth/register, POST /auth/login, GET /auth/me
Menú GET /menu/categorias, GET /menu/platos, POST/PUT/DELETE /menu/platos (admin), POST /menu/categorias (admin)
Pedidos GET /pedidos, GET /pedidos/:id, POST /pedidos, PATCH /pedidos/:id/estado, POST /pedidos/:id/facturar
Reservas GET /reservas/disponibilidad, GET/POST /reservas, PATCH /reservas/:id/cancelar
Mesas GET /mesas, POST /mesas (admin), PATCH /mesas/:id/estado (mesero/admin)
Inventario GET /inventario, GET /inventario/alertas, POST/PUT/DELETE (admin)
Proveedores CRUD completo (admin)
Usuarios CRUD + desactivación (admin)
Reportes GET /reportes/resumen, /reportes/ventas-diarias, /reportes/platos-mas-vendidos (admin)

Detalles de negocio

  • Al crear un pedido se descuenta el inventario según la receta de cada plato (plato_insumos); si no hay stock suficiente responde 409.
  • El total se calcula en el backend: subtotal + IVA (IVA_PORCENTAJE) + propina.
  • Facturar un pedido genera un registro en facturas y pasa la mesa a en_limpieza.
  • Las acciones sensibles quedan registradas en la tabla auditoria.
  • Los reportes usan las vistas v_ventas_diarias, v_platos_mas_vendidos y v_alertas_stock.

Variables de entorno

Backend (backend/.env):

SUPABASE_URL=https://xxxx.supabase.co
SUPABASE_SERVICE_ROLE_KEY=sb_secret_xxxx
JWT_SECRET=una-cadena-larga-y-aleatoria   # obligatorio, la API no arranca sin él
JWT_EXPIRES_IN=8h
PORT=4000
CORS_ORIGIN=http://localhost:5173
IVA_PORCENTAJE=0.08
PROPINA_SUGERIDA=0.10

Frontend (frontend/.env):

VITE_API_URL=http://localhost:4000/api

Pendientes / ideas futuras

  • Tests automatizados (Vitest / Supertest)
  • Paginación en listados grandes
  • Subida de imágenes de platos a Supabase Storage
  • Notificaciones en tiempo real (hoy el frontend hace polling cada 8s)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages