74 lines
2.6 KiB
Kotlin

package roomescape.reservation.web
import jakarta.validation.Valid
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*
import roomescape.auth.web.support.CurrentUser
import roomescape.common.dto.CurrentUserContext
import roomescape.common.dto.response.CommonApiResponse
import roomescape.reservation.business.ReservationService
import roomescape.reservation.docs.ReservationAPI
@RestController
class ReservationController(
private val reservationService: ReservationService
) : ReservationAPI {
@GetMapping("/reservations/popular-themes")
override fun findMostReservedThemeIds(
@RequestParam count: Int
): ResponseEntity<CommonApiResponse<MostReservedThemeIdListResponse>> {
val response = reservationService.findMostReservedThemeIds(count)
return ResponseEntity.ok(CommonApiResponse(response))
}
@PostMapping("/reservations/pending")
override fun createPendingReservation(
@CurrentUser user: CurrentUserContext,
@Valid @RequestBody request: PendingReservationCreateRequest
): ResponseEntity<CommonApiResponse<PendingReservationCreateResponse>> {
val response = reservationService.createPendingReservation(user, request)
return ResponseEntity.ok(CommonApiResponse(response))
}
@PostMapping("/reservations/{id}/confirm")
override fun confirmReservation(
@PathVariable("id") id: Long
): ResponseEntity<CommonApiResponse<Unit>> {
reservationService.confirmReservation(id)
return ResponseEntity.ok().body(CommonApiResponse())
}
@PostMapping("/reservations/{reservationId}/cancel")
override fun cancelReservation(
@CurrentUser user: CurrentUserContext,
@PathVariable reservationId: Long,
@Valid @RequestBody request: ReservationCancelRequest
): ResponseEntity<CommonApiResponse<Unit>> {
reservationService.cancelReservation(user, reservationId, request)
return ResponseEntity.ok().body(CommonApiResponse())
}
@GetMapping("/reservations/summary")
override fun findSummaryByMemberId(
@CurrentUser user: CurrentUserContext,
): ResponseEntity<CommonApiResponse<ReservationSummaryListResponse>> {
val response = reservationService.findUserSummaryReservation(user)
return ResponseEntity.ok(CommonApiResponse(response))
}
@GetMapping("/reservations/{id}/detail")
override fun findDetailById(
@PathVariable("id") id: Long
): ResponseEntity<CommonApiResponse<ReservationDetailResponse>> {
val response = reservationService.findDetailById(id)
return ResponseEntity.ok(CommonApiResponse(response))
}
}