@GetMapping("/user")
public ResponseEntity<ApiResponse<List<ReservationDto.ReservationInfoResponse>>> getUserReservations(
@RequestParam(required = false) List<String> status
) {
Long userId = authenticationUtil.getCurrentUserId();
List<ReservationDto.ReservationInfoResponse> reservations =
reservationService.getUserReservations(userId, status);
return ResponseEntity.ok(ApiResponse.success("예약 목록을 성공적으로 조회했습니다.", reservations));
}
@GetMapping("/partner/{partnerId}")
@PreAuthorize("hasRole('ROLE_PARTNER')")
public ResponseEntity<ApiResponse<List<ReservationDto.ReservationInfoResponse>>> getPartnerReservations(
@PathVariable Long partnerId,
@RequestParam(required = false) Long storeId,
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date,
@RequestParam(required = false) List<String> status
) {
authenticationUtil.validatePartnerOwnership(partnerId);
List<ReservationDto.ReservationInfoResponse> reservations =
reservationService.getPartnerReservations(partnerId, storeId, date, status);
return ResponseEntity.ok(ApiResponse.success("매장 예약 목록을 성공적으로 조회했습니다.", reservations));
}
private List<ReservationStatus> getReservationStatuses(List<String> statusList) {
if (statusList == null || statusList.isEmpty()) {
return new ArrayList<>();
}
return statusList.stream()
.map(status -> {
try {
return ReservationStatus.valueOf(status.toUpperCase());
} catch (IllegalArgumentException e) {
throw new CustomException(ErrorCode.INVALID_REQUEST,
"유효하지 않은 예약 상태: " + status);
}
})
.collect(Collectors.toList());
}

