@RestController
@RequestMapping("/api/reservations")
@RequiredArgsConstructor
public class ReservationController {
private final ReservationService reservationService;
@PostMapping("/available-times")
public ResponseEntity<ApiResponse<ReservationDto.AvailableTimesResponse>> getAvailableTimes(
@Valid @RequestBody ReservationDto.AvailableTimesRequest request
) {
ReservationDto.AvailableTimesResponse response =
reservationService.getAvailableTimes(request);
return ResponseEntity.ok(ApiResponse.success(
"예약 가능 시간 목록을 성공적으로 조회했습니다.", response));
}
}
@Entity
@Table(name = "reservations")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Reservation {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "store_id", nullable = false)
private Store store;
@Column(nullable = false)
private LocalDate reservationDate;
@Column(nullable = false)
private LocalTime reservationTime;
@Column(nullable = false)
private Integer partySize;
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private ReservationStatus status;
// ... 기타 필드
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class AvailableTimesResponse {
private Long storeId;
private String storeName;
private LocalDate date;
private List<LocalTime> availableTimes;
}

