Sistema completo de gestión de reservas desarrollado con tecnologías modernas para entornos empresariales.
Este sistema está especialmente diseñado para empresas de servicios que requieren gestión eficiente de citas y reservas, tales como clínicas médicas, centros de belleza, spa, estudios de tatuajes, consultorios profesionales, talleres especializados y centros de capacitación. La arquitectura modular permite adaptarse fácilmente a diferentes tipos de negocios que manejan servicios por citas, ofreciendo control granular de usuarios con roles diferenciados (administradores, supervisores y empleados), gestión de servicios con precios en moneda local, y un sistema de notificaciones automatizado que mejora la comunicación con los clientes y optimiza la operación diaria del negocio.
- Spring Boot 3.2.0 - Framework principal para desarrollo de aplicaciones Java
- Spring Web - Desarrollo de APIs REST para comunicación con el frontend
- Spring Data JPA - Mapeo objeto-relacional y persistencia de datos automática
- Spring Security - Autenticación, autorización y gestión de sesiones seguras
- Hibernate - ORM (Object-Relational Mapping) para manejo automático de base de datos
- Maven - Gestión de dependencias y construcción del proyecto
- Java 17+ - Lenguaje de programación backend
- React 18 - Biblioteca principal para interfaces de usuario interactivas
- React Router - Navegación y enrutamiento de páginas
- React Hook Form - Gestión eficiente de formularios y validaciones
- Axios - Cliente HTTP para consumir APIs REST del backend
- TailwindCSS - Framework de estilos para diseño moderno y responsive
- React Hot Toast - Notificaciones elegantes para feedback del usuario
- Heroicons - Iconografía profesional y consistente
- PostgreSQL - Base de datos relacional robusta y escalable
- Migraciones automáticas - Hibernate gestiona la estructura de BD automáticamente
- API REST - Comunicación estandarizada entre frontend y backend
- DTO (Data Transfer Objects) - Objetos optimizados para transferencia de datos
- Repository Pattern - Abstracción del acceso a datos
- Service Layer - Lógica de negocio separada de la presentación
- CORS habilitado - Comunicación segura entre diferentes puertos
Backend (Puerto 8080)
- Servidor embebido Tomcat integrado en Spring Boot
- APIs REST para todas las operaciones (CRUD completo)
- Autenticación JWT para sesiones seguras
- Validación automática de datos con Bean Validation
- Manejo centralizado de errores y excepciones
Frontend (Puerto 3000)
- Aplicación React de una sola página (SPA)
- Componentes reutilizables y modulares
- Estado global con Context API
- Rutas protegidas según roles de usuario
- Diseño responsive para cualquier dispositivo
Base de Datos
- Esquema relacional normalizado
- Relaciones automáticas entre entidades
- Índices optimizados para consultas rápidas
- Creación de reservas con validación completa
- Listado y filtrado por estado (Pendiente, Confirmada, Rechazada)
- Confirmación y rechazo por parte del administrador
- CRUD completo de servicios (Crear, Leer, Actualizar, Eliminar)
- Gestión de precios en guaraníes sin decimales
- Control de duración y disponibilidad de servicios
- Activación/desactivación de servicios
- Sistema de roles (Administrador, Supervisor, Empleado, Cliente)
- Gestión de permisos granular por módulos
- Dashboard personalizado según permisos
- Gestión de usuarios y departamentos
- Dashboard con estadísticas en tiempo real
- Gestión de clientes y historial de reservas
- Reportes visuales con métricas de rendimiento
- Configuración del sistema personalizable
- Login seguro con Spring Security
- Rutas protegidas según roles de usuario
- Validación de tokens JWT automática
- Sistema de permisos granular por módulos
- Java 17+ - JDK instalado y configurado
- Node.js 16+ - Runtime para el frontend
- PostgreSQL 12+ - Base de datos
- Maven - Gestor de dependencias (incluido en el proyecto)
git clone https://github.com/xOkimurax/Reservas.git
cd Reservas# Crear base de datos en PostgreSQL
psql -U postgres
CREATE DATABASE reservas_db;
\q
# Ejecutar el script de creación de tablas
psql -U postgres -d reservas_db -f database/schema.sql# Navegar al directorio backend
cd backend
# Configurar base de datos en src/main/resources/application.properties
# Ajustar credenciales de PostgreSQL:
# spring.datasource.username=tu_usuario
# spring.datasource.password=tu_password
# Ejecutar la aplicación
./mvnw spring-boot:run
# o si tienes Maven instalado globalmente:
mvn spring-boot:runEl backend estará disponible en: http://localhost:8080
# Backend - Copiar archivo de ejemplo y configurar
cd backend
cp .env.example .env
# Editar .env con tus credenciales de base de datos
# Frontend - Copiar archivo de ejemplo y configurar
cd ../frontend
cp .env.example .env
# Ajustar REACT_APP_API_URL si es necesario# Navegar al directorio frontend (si no estás ya ahí)
cd frontend
# Instalar dependencias
npm install
# Iniciar la aplicación
npm startEl frontend estará disponible en: http://localhost:3000
- Visitar
http://localhost:3000 - Hacer clic en "Hacer una Reserva"
- Completar el formulario con información personal y detalles de la cita
- Confirmar la reserva
- Visitar
http://localhost:3000/admin - Usar credenciales de administrador:
- Email: admin@reservas.com
- Password: password
- Gestionar reservas desde el panel de administración
- Confirmar/Rechazar reservas
- Gestionar usuarios y servicios
El sistema incluye un usuario administrador por defecto:
- Email: admin@reservas.com
- Password: password
POST /api/auth/login- Inicio de sesiónPOST /api/auth/validate- Validación de token
GET /api/reservas- Listar reservasPOST /api/reservas- Crear nueva reservaPUT /api/reservas/{id}/confirmar- Confirmar reservaPUT /api/reservas/{id}/rechazar- Rechazar reserva
GET /api/servicios- Listar serviciosPOST /api/servicios- Crear servicioPUT /api/servicios/{id}- Actualizar servicioDELETE /api/servicios/{id}- Eliminar servicio
GET /api/usuarios- Listar usuariosPOST /api/usuarios- Crear usuarioPUT /api/usuarios/{id}- Actualizar usuarioDELETE /api/usuarios/{id}- Desactivar usuario
Reservas/
├── backend/ # Spring Boot API
│ ├── src/main/java/
│ │ └── com/reservas/
│ │ ├── entity/ # Entidades JPA
│ │ ├── repository/ # Repositorios Spring Data
│ │ ├── service/ # Lógica de negocio
│ │ ├── controller/ # Controladores REST
│ │ ├── dto/ # Data Transfer Objects
│ │ └── config/ # Configuraciones
│ └── pom.xml # Dependencias Maven
├── frontend/ # React App
│ ├── src/
│ │ ├── components/ # Componentes reutilizables
│ │ ├── pages/ # Páginas principales
│ │ ├── services/ # API calls con Axios
│ │ └── context/ # Context providers
│ └── package.json # Dependencias NPM
├── database/
│ └── schema.sql # Script de creación de BD
├── .gitignore # Archivos ignorados por Git
├── LICENSE # Licencia del proyecto
└── README.md # Documentación
- Pendiente: Reserva creada, esperando confirmación
- Confirmada: Reserva aprobada por el administrador
- Rechazada: Reserva rechazada
- Finalizada: Servicio completado
Los colores principales se pueden modificar en frontend/tailwind.config.js:
colors: {
primary: {
50: '#eff6ff',
500: '#3b82f6',
600: '#2563eb',
700: '#1d4ed8',
}
}Los servicios se pueden gestionar desde el panel administrativo o modificando directamente en la base de datos.
- Verificar que PostgreSQL esté corriendo
- Comprobar credenciales en
application.properties - Asegurar que Java 17+ esté instalado:
java -version
- Verificar que el backend esté corriendo en puerto 8080
- Comprobar que no hay conflictos de CORS
- Verificar que la base de datos
reservas_dbexiste - Ejecutar el script
database/schema.sql - Comprobar conexión con:
psql -U postgres -d reservas_db
# Compilar JAR ejecutable
./mvnw clean package
# Ejecutar en producción
java -jar target/sistema-reservas-0.0.1-SNAPSHOT.jar# Compilar para producción
npm run build
# Los archivos estáticos estarán en build/- Backend: Railway, Heroku, AWS EC2
- Frontend: Netlify, Vercel, AWS S3
- Base de Datos: Railway PostgreSQL, Render, Supabase
El proyecto incluye archivos .env.example en ambos directorios (frontend y backend) que debes copiar y configurar:
# Backend
cp backend/.env.example backend/.env
# Frontend
cp frontend/.env.example frontend/.env# Base de datos
DB_HOST=localhost
DB_PORT=5432
DB_NAME=reservas_db
DB_USERNAME=tu_usuario
DB_PASSWORD=tu_password
# JWT
JWT_SECRET=tu_clave_secreta_jwt
JWT_EXPIRATION=86400000
# Servidor
SERVER_PORT=8080
CORS_ALLOWED_ORIGINS=http://localhost:3000# API del backend
REACT_APP_API_URL=http://localhost:8080/api
# Entorno
NODE_ENV=developmentDATABASE_URL=postgresql://usuario:password@host:puerto/basededatos
JWT_SECRET=clave_secreta_muy_segura
SERVER_PORT=8080REACT_APP_API_URL=https://tu-backend-produccion.com/api
NODE_ENV=productionLas contribuciones son bienvenidas. Para contribuir:
- Fork el proyecto
- Crear branch de feature (
git checkout -b feature/nueva-funcionalidad) - Commit cambios (
git commit -m 'Agregar nueva funcionalidad') - Push al branch (
git push origin feature/nueva-funcionalidad) - Abrir Pull Request
Este proyecto está bajo la Licencia Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).
Esto significa que:
- ✅ Puedes ver y estudiar el código fuente
- ✅ Puedes descargar el proyecto para aprendizaje personal
- ✅ Puedes compartir el proyecto original con la debida atribución
- ❌ NO puedes usar el proyecto para fines comerciales
- ❌ NO puedes modificar o crear obras derivadas
- ❌ NO puedes redistribuir versiones modificadas
Copyright © 2024 Oscar Matias Vera González. Todos los derechos reservados.
Ver el archivo LICENSE para los términos completos de la licencia.