package roomescape.reservation.web import jakarta.validation.Valid import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.* import roomescape.common.dto.response.CommonApiResponse import roomescape.reservation.business.ReservationTimeService import roomescape.reservation.docs.ReservationTimeAPI import java.net.URI import java.time.LocalDate @RestController class ReservationTimeController( private val reservationTimeService: ReservationTimeService ) : ReservationTimeAPI { @GetMapping("/times") override fun getAllTimes(): ResponseEntity> { val response: ReservationTimesResponse = reservationTimeService.findAllTimes() return ResponseEntity.ok(CommonApiResponse(response)) } @PostMapping("/times") override fun saveTime( @Valid @RequestBody reservationTimeRequest: ReservationTimeRequest, ): ResponseEntity> { val response: ReservationTimeResponse = reservationTimeService.addTime(reservationTimeRequest) return ResponseEntity .created(URI.create("/times/${response.id}")) .body(CommonApiResponse(response)) } @DeleteMapping("/times/{id}") override fun removeTime(@PathVariable id: Long): ResponseEntity> { reservationTimeService.removeTimeById(id) return ResponseEntity.noContent().build() } @GetMapping("/times/filter") override fun findAllAvailableReservationTimes( @RequestParam date: LocalDate, @RequestParam themeId: Long ): ResponseEntity> { val response: ReservationTimeInfosResponse = reservationTimeService.findAllAvailableTimesByDateAndTheme(date, themeId) return ResponseEntity.ok(CommonApiResponse(response)) } }