Sistema de reservas full stack desarrollado con Spring Boot 4 y Angular 21. Permite crear, listar y cancelar reservas con validación de disponibilidad en tiempo real.
Backend
- Java + Spring Boot 4
- Spring Data JPA + Hibernate
- MySQL
- Swagger / OpenAPI
Frontend
- Angular 21
- TypeScript
- Reactive Forms
- Listado de reservas con estado (activa, cancelada, completada)
- Creación de reserva con validación de solapamiento de horarios
- Cancelación de reserva con feedback visual
- Manejo global de excepciones con respuestas de error estructuradas
- Notificaciones toast para éxitos y errores
- Página 404
Sigue una arquitectura en capas:
- Controller — recibe y responde peticiones HTTP
- Service — lógica de negocio (interface + implementación)
- Repository — acceso a datos con Spring Data JPA
- DTOs — separación entre entidades internas y respuestas de la API
- Java 21+
- Node.js 20+
- MySQL 8+
cd reservation-backend
# Configurar credenciales de MySQL en application.properties
./mvnw spring-boot:runSwagger disponible en http://localhost:8081/swagger-ui/index.html
cd reservation-frontend
npm install
ng serveApp disponible en http://localhost:4200
- Autenticación con Spring Security + JWT
- Filtros y paginación en el listado
- Tests unitarios e integración
- Servicios dinámicos desde la API
classDiagram
class Base {
+Long id
}
class Usuario {
+String nombre
+String apellido
+String email
+String contrasenia
}
class Reserva {
+ReservationStatus estado
}
class Turno {
+LocalDate fecha
+LocalTime horaInicio
+LocalTime horaFin
}
class Servicio {
+String nombre
+String descripcion
+Integer duracion
}
class Horario {
+DayOfWeek diaSemana
+LocalTime horaInicio
+LocalTime horaFin
}
class Categoria {
+String nombre
+String descripcion
}
Base <|-- Usuario
Base <|-- Reserva
Base <|-- Turno
Base <|-- Servicio
Base <|-- Horario
Base <|-- Categoria
Usuario "1" --> "0..*" Reserva
Reserva "1" --> "1" Turno
Reserva "0..*" --> "1" Servicio
Turno "0..*" --> "1" Horario
Servicio "1" --> "0..*" Horario
Categoria "1" --> "0..*" Servicio