Implementación de Endpoints REST en Spring Boot para Usuarios y Reservas
Actualización de Usuarios
PUT /api/usuarios/{username}
- REPO:
UsuarioRepository extends JpaRepository<Usuario, String> - SERVICE:
Usuario modificarUsuario(String username, UsuarioDto dto); - IMPL:
Usuario u = usuarioRepository.findById(username).orElse(null);|if(u == null) return null;|u.setEmail(dto.getEmail());|u.setNombre(dto.getNombre());|u.setApellidos(dto.getApellidos());|u.setDireccion(dto.getDireccion());|return usuarioRepository.save(u); - CONTROLLER:
@PutMapping("/{username}")|public ResponseEntity<?> modificar(@PathVariable String username, @RequestBody UsuarioDto dto) {|Usuario u = usuarioService.modificarUsuario(username, dto);|if(u == null) return ResponseEntity.status(404).body("No existe");|return ResponseEntity.ok(UsuarioDto.convertirADto(u));|} - DTO:
String username,String email,String nombre,String apellidos,String direccion - JSON:
{"email": "[email protected]", "nombre": "Ana", "apellidos": "Lopez", "direccion": "Calle Mayor"} - HTTP:
200 OK,404 NOT FOUND
Creación de Reservas
POST /api/clientes/reservas
- REPO:
ReservaRepository extends JpaRepository<Reserva, Long>|EventoRepository extends JpaRepository<Evento, Long>|UsuarioRepository extends JpaRepository<Usuario, String> - SERVICE:
Reserva crearReserva(String username, Long idEvento, Integer cantidad); - IMPL:
Evento ev = eventoRepository.findById(idEvento).orElse(null);|if(ev == null) return null;|if(!"ACTIVO".equals(ev.getEstadoEvento())) return null;|if(cantidad > 10) return null;|if(ev.getAforoMaximo() < cantidad) return null;|Usuario u = usuarioRepository.findById(username).orElse(null);|if(u == null) return null;|Reserva r = new Reserva();|r.setEvento(ev);|r.setUsuario(u);|r.setCantidad(cantidad);|r.setPrecioVenta(ev.getPrecio() * cantidad);|return reservaRepository.save(r); - CONTROLLER:
@PostMapping|public ResponseEntity<?> crear(@RequestBody ReservaDto dto, Authentication auth) {|String username = auth.getName();|Reserva r = reservaService.crearReserva(username, dto.getIdEvento(), dto.getCantidad());|if(r == null) return ResponseEntity.status(409).body("No se pudo crear");|return ResponseEntity.status(201).body(ReservaDto.convertirADto(r));|} - DTO:
Long idReserva,Integer cantidad,Double precioVenta,String observaciones,String username,Long idEvento,String nombreEvento - JSON:
{"cantidad": 3, "observaciones": "VIP", "evento": {"idEvento": 5}} - HTTP:
201 CREATED,400 BAD REQUEST,404 NOT FOUND,409 CONFLICT
Consulta de Eventos por Estado
GET /api/eventos/estado/{estado}
- REPO:
EventoRepository extends JpaRepository<Evento, Long>|List<Evento> findByEstadoEvento(String estado); - SERVICE:
List<Evento> findByEstado(String estado); - IMPL:
return eventoRepository.findByEstadoEvento(estado); - CONTROLLER:
@GetMapping("/estado/{estado}")|public ResponseEntity<List<EventoDto>> porEstado(@PathVariable String estado) {|List<Evento> lista = eventoService.findByEstado(estado);|return ResponseEntity.ok(lista.stream().map(EventoDto::convertirADto).toList());|} - DTO:
Long idEvento,String nombre,LocalDate fechaInicio,Double precio,String estadoEvento,String nombreTipo - JSON:
[{"idEvento": 1, "nombre": "Concierto", "fechaInicio": "2026-06-15", "precio": 25.0, "estadoEvento": "ACTIVO", "nombreTipo": "Música"}] - HTTP:
200 OK