Files
SmartSeat/src/main/java/com/caspos/controller/ReservationController.java

63 lines
2.0 KiB
Java

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<List<ReservationDto>> 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<ReservationDto> 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<ReservationDto> updateStatus(
@PathVariable UUID id,
@RequestBody Map<String, String> body
) {
String status = body.get("status");
if (status == null || status.isBlank()) {
return ResponseEntity.badRequest().build();
}
return ResponseEntity.ok(reservationService.updateStatus(id, status));
}
}