package com.caspos.controller; import com.caspos.dto.CreateReservationRequest; import com.caspos.dto.ReservationDto; import com.caspos.service.ReservationService; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.time.LocalDate; import java.util.List; import java.util.Map; import java.util.UUID; @RestController @RequestMapping("/api/v1/reservations") @CrossOrigin(origins = {"http://localhost:5173", "http://localhost:3000"}) public class ReservationController { private final ReservationService reservationService; public ReservationController(ReservationService reservationService) { this.reservationService = reservationService; } /** * GET /api/v1/reservations?date=YYYY-MM-DD */ @GetMapping public ResponseEntity> getByDate( @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date ) { LocalDate target = date != null ? date : LocalDate.now(); return ResponseEntity.ok(reservationService.getByDate(target)); } /** * POST /api/v1/reservations */ @PostMapping public ResponseEntity create(@RequestBody CreateReservationRequest request) { return ResponseEntity.status(HttpStatus.CREATED).body(reservationService.create(request)); } /** * PATCH /api/v1/reservations/{id}/status * Body: { "status": "CONFIRMED" } */ @PatchMapping("/{id}/status") public ResponseEntity updateStatus( @PathVariable UUID id, @RequestBody Map body ) { String status = body.get("status"); if (status == null || status.isBlank()) { return ResponseEntity.badRequest().build(); } return ResponseEntity.ok(reservationService.updateStatus(id, status)); } }