generated from pricelees/issue-pr-template
[#18] 코드 정리 및 일부 컨벤션 통일 #19
@ -16,7 +16,7 @@ import roomescape.member.web.toRetrieveResponse
|
|||||||
class MemberService(
|
class MemberService(
|
||||||
private val memberRepository: MemberRepository
|
private val memberRepository: MemberRepository
|
||||||
) {
|
) {
|
||||||
fun findAll(): MemberRetrieveListResponse = MemberRetrieveListResponse(
|
fun findMembers(): MemberRetrieveListResponse = MemberRetrieveListResponse(
|
||||||
memberRepository.findAll()
|
memberRepository.findAll()
|
||||||
.map { it.toRetrieveResponse() }
|
.map { it.toRetrieveResponse() }
|
||||||
.toList()
|
.toList()
|
||||||
|
|||||||
@ -20,5 +20,5 @@ interface MemberAPI {
|
|||||||
useReturnTypeSchema = true
|
useReturnTypeSchema = true
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
fun findAll(): ResponseEntity<CommonApiResponse<MemberRetrieveListResponse>>
|
fun findMembers(): ResponseEntity<CommonApiResponse<MemberRetrieveListResponse>>
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,8 +13,8 @@ class MemberController(
|
|||||||
) : MemberAPI {
|
) : MemberAPI {
|
||||||
|
|
||||||
@GetMapping("/members")
|
@GetMapping("/members")
|
||||||
override fun findAll(): ResponseEntity<CommonApiResponse<MemberRetrieveListResponse>> {
|
override fun findMembers(): ResponseEntity<CommonApiResponse<MemberRetrieveListResponse>> {
|
||||||
val response: MemberRetrieveListResponse = memberService.findAll()
|
val response: MemberRetrieveListResponse = memberService.findMembers()
|
||||||
|
|
||||||
return ResponseEntity.ok(CommonApiResponse(response))
|
return ResponseEntity.ok(CommonApiResponse(response))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,7 +30,7 @@ class TossPaymentClient(
|
|||||||
|
|
||||||
private val tossPaymentClient: RestClient = tossPaymentClientBuilder.build()
|
private val tossPaymentClient: RestClient = tossPaymentClientBuilder.build()
|
||||||
|
|
||||||
fun confirmPayment(paymentRequest: PaymentApproveRequest): PaymentApproveResponse {
|
fun confirm(paymentRequest: PaymentApproveRequest): PaymentApproveResponse {
|
||||||
logPaymentInfo(paymentRequest)
|
logPaymentInfo(paymentRequest)
|
||||||
|
|
||||||
return tossPaymentClient.post()
|
return tossPaymentClient.post()
|
||||||
@ -46,7 +46,7 @@ class TossPaymentClient(
|
|||||||
?: throw RoomescapeException(ErrorType.PAYMENT_SERVER_ERROR, HttpStatus.INTERNAL_SERVER_ERROR)
|
?: throw RoomescapeException(ErrorType.PAYMENT_SERVER_ERROR, HttpStatus.INTERNAL_SERVER_ERROR)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun cancelPayment(cancelRequest: PaymentCancelRequest): PaymentCancelResponse {
|
fun cancel(cancelRequest: PaymentCancelRequest): PaymentCancelResponse {
|
||||||
logPaymentCancelInfo(cancelRequest)
|
logPaymentCancelInfo(cancelRequest)
|
||||||
val param = Map.of<String, String>("cancelReason", cancelRequest.cancelReason)
|
val param = Map.of<String, String>("cancelReason", cancelRequest.cancelReason)
|
||||||
|
|
||||||
|
|||||||
@ -24,7 +24,7 @@ class ReservationService(
|
|||||||
) {
|
) {
|
||||||
|
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
fun findAllReservations(): ReservationRetrieveListResponse {
|
fun findReservations(): ReservationRetrieveListResponse {
|
||||||
val spec: Specification<ReservationEntity> = ReservationSearchSpecification()
|
val spec: Specification<ReservationEntity> = ReservationSearchSpecification()
|
||||||
.confirmed()
|
.confirmed()
|
||||||
.build()
|
.build()
|
||||||
@ -46,7 +46,7 @@ class ReservationService(
|
|||||||
return reservationRepository.findAll(spec).map { it.toRetrieveResponse() }
|
return reservationRepository.findAll(spec).map { it.toRetrieveResponse() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun removeReservationById(reservationId: Long, memberId: Long) {
|
fun deleteReservation(reservationId: Long, memberId: Long) {
|
||||||
validateIsMemberAdmin(memberId)
|
validateIsMemberAdmin(memberId)
|
||||||
reservationRepository.deleteById(reservationId)
|
reservationRepository.deleteById(reservationId)
|
||||||
}
|
}
|
||||||
@ -64,7 +64,7 @@ class ReservationService(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addReservationByAdmin(request: AdminReservationCreateRequest): ReservationRetrieveResponse {
|
fun createReservationByAdmin(request: AdminReservationCreateRequest): ReservationRetrieveResponse {
|
||||||
validateIsReservationExist(request.themeId, request.timeId, request.date)
|
validateIsReservationExist(request.themeId, request.timeId, request.date)
|
||||||
|
|
||||||
return addReservationWithoutPayment(
|
return addReservationWithoutPayment(
|
||||||
@ -76,7 +76,7 @@ class ReservationService(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addWaiting(request: WaitingCreateRequest, memberId: Long): ReservationRetrieveResponse {
|
fun createWaiting(request: WaitingCreateRequest, memberId: Long): ReservationRetrieveResponse {
|
||||||
validateMemberAlreadyReserve(request.themeId, request.timeId, request.date, memberId)
|
validateMemberAlreadyReserve(request.themeId, request.timeId, request.date, memberId)
|
||||||
return addReservationWithoutPayment(
|
return addReservationWithoutPayment(
|
||||||
request.themeId,
|
request.themeId,
|
||||||
@ -163,7 +163,7 @@ class ReservationService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
fun findFilteredReservations(
|
fun searchReservations(
|
||||||
themeId: Long?,
|
themeId: Long?,
|
||||||
memberId: Long?,
|
memberId: Long?,
|
||||||
dateFrom: LocalDate?,
|
dateFrom: LocalDate?,
|
||||||
@ -194,11 +194,11 @@ class ReservationService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
fun findMemberReservations(memberId: Long): MyReservationRetrieveListResponse {
|
fun findReservationsByMemberId(memberId: Long): MyReservationRetrieveListResponse {
|
||||||
return MyReservationRetrieveListResponse(reservationRepository.findMyReservations(memberId))
|
return MyReservationRetrieveListResponse(reservationRepository.findAllById(memberId))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun approveWaiting(reservationId: Long, memberId: Long) {
|
fun confirmWaiting(reservationId: Long, memberId: Long) {
|
||||||
validateIsMemberAdmin(memberId)
|
validateIsMemberAdmin(memberId)
|
||||||
if (reservationRepository.isExistConfirmedReservation(reservationId)) {
|
if (reservationRepository.isExistConfirmedReservation(reservationId)) {
|
||||||
throw RoomescapeException(ErrorType.RESERVATION_DUPLICATED, HttpStatus.CONFLICT)
|
throw RoomescapeException(ErrorType.RESERVATION_DUPLICATED, HttpStatus.CONFLICT)
|
||||||
@ -206,7 +206,7 @@ class ReservationService(
|
|||||||
reservationRepository.updateStatusByReservationId(reservationId, ReservationStatus.CONFIRMED_PAYMENT_REQUIRED)
|
reservationRepository.updateStatusByReservationId(reservationId, ReservationStatus.CONFIRMED_PAYMENT_REQUIRED)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun cancelWaiting(reservationId: Long, memberId: Long) {
|
fun deleteWaiting(reservationId: Long, memberId: Long) {
|
||||||
reservationRepository.findByIdOrNull(reservationId)?.takeIf {
|
reservationRepository.findByIdOrNull(reservationId)?.takeIf {
|
||||||
it.isWaiting() && it.isSameMember(memberId)
|
it.isWaiting() && it.isSameMember(memberId)
|
||||||
}?.let {
|
}?.let {
|
||||||
@ -214,7 +214,7 @@ class ReservationService(
|
|||||||
} ?: throw throwReservationNotFound(reservationId)
|
} ?: throw throwReservationNotFound(reservationId)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun denyWaiting(reservationId: Long, memberId: Long) {
|
fun rejectWaiting(reservationId: Long, memberId: Long) {
|
||||||
validateIsMemberAdmin(memberId)
|
validateIsMemberAdmin(memberId)
|
||||||
reservationRepository.findByIdOrNull(reservationId)?.takeIf {
|
reservationRepository.findByIdOrNull(reservationId)?.takeIf {
|
||||||
it.isWaiting()
|
it.isWaiting()
|
||||||
|
|||||||
@ -17,7 +17,7 @@ class ReservationWithPaymentService(
|
|||||||
private val reservationService: ReservationService,
|
private val reservationService: ReservationService,
|
||||||
private val paymentService: PaymentService
|
private val paymentService: PaymentService
|
||||||
) {
|
) {
|
||||||
fun addReservationWithPayment(
|
fun createReservationAndPayment(
|
||||||
request: ReservationCreateWithPaymentRequest,
|
request: ReservationCreateWithPaymentRequest,
|
||||||
paymentInfo: PaymentApproveResponse,
|
paymentInfo: PaymentApproveResponse,
|
||||||
memberId: Long
|
memberId: Long
|
||||||
@ -28,7 +28,7 @@ class ReservationWithPaymentService(
|
|||||||
.reservation
|
.reservation
|
||||||
}
|
}
|
||||||
|
|
||||||
fun saveCanceledPayment(
|
fun createCanceledPayment(
|
||||||
cancelInfo: PaymentCancelResponse,
|
cancelInfo: PaymentCancelResponse,
|
||||||
approvedAt: OffsetDateTime,
|
approvedAt: OffsetDateTime,
|
||||||
paymentKey: String
|
paymentKey: String
|
||||||
@ -36,12 +36,12 @@ class ReservationWithPaymentService(
|
|||||||
paymentService.createCanceledPayment(cancelInfo, approvedAt, paymentKey)
|
paymentService.createCanceledPayment(cancelInfo, approvedAt, paymentKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun removeReservationWithPayment(
|
fun deleteReservationAndPayment(
|
||||||
reservationId: Long,
|
reservationId: Long,
|
||||||
memberId: Long
|
memberId: Long
|
||||||
): PaymentCancelRequest {
|
): PaymentCancelRequest {
|
||||||
val paymentCancelRequest = paymentService.createCanceledPaymentByReservationId(reservationId)
|
val paymentCancelRequest = paymentService.createCanceledPaymentByReservationId(reservationId)
|
||||||
reservationService.removeReservationById(reservationId, memberId)
|
reservationService.deleteReservation(reservationId, memberId)
|
||||||
|
|
||||||
return paymentCancelRequest
|
return paymentCancelRequest
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,10 +28,10 @@ class TimeService(
|
|||||||
)
|
)
|
||||||
|
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
fun findAll(): TimeRetrieveListResponse = timeRepository.findAll().toRetrieveListResponse()
|
fun findTimes(): TimeRetrieveListResponse = timeRepository.findAll().toRetrieveListResponse()
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
fun create(timeCreateRequest: TimeCreateRequest): TimeCreateResponse {
|
fun createTime(timeCreateRequest: TimeCreateRequest): TimeCreateResponse {
|
||||||
val startAt: LocalTime = timeCreateRequest.startAt
|
val startAt: LocalTime = timeCreateRequest.startAt
|
||||||
|
|
||||||
if (timeRepository.existsByStartAt(startAt)) {
|
if (timeRepository.existsByStartAt(startAt)) {
|
||||||
@ -46,7 +46,7 @@ class TimeService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
fun deleteById(id: Long) {
|
fun deleteTime(id: Long) {
|
||||||
val time: TimeEntity = findById(id)
|
val time: TimeEntity = findById(id)
|
||||||
reservationRepository.findByTime(time)
|
reservationRepository.findByTime(time)
|
||||||
.also {
|
.also {
|
||||||
@ -60,7 +60,7 @@ class TimeService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
fun findAllWithAvailability(date: LocalDate, themeId: Long): TimeWithAvailabilityListResponse {
|
fun findTimesWithAvailability(date: LocalDate, themeId: Long): TimeWithAvailabilityListResponse {
|
||||||
val allTimes = timeRepository.findAll()
|
val allTimes = timeRepository.findAll()
|
||||||
val reservations: List<ReservationEntity> = reservationRepository.findByDateAndThemeId(date, themeId)
|
val reservations: List<ReservationEntity> = reservationRepository.findByDateAndThemeId(date, themeId)
|
||||||
|
|
||||||
|
|||||||
@ -26,12 +26,12 @@ interface ReservationAPI {
|
|||||||
@Admin
|
@Admin
|
||||||
@Operation(summary = "모든 예약 정보 조회", tags = ["관리자 로그인이 필요한 API"])
|
@Operation(summary = "모든 예약 정보 조회", tags = ["관리자 로그인이 필요한 API"])
|
||||||
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
||||||
fun getAllReservations(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>>
|
fun findReservations(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>>
|
||||||
|
|
||||||
@LoginRequired
|
@LoginRequired
|
||||||
@Operation(summary = "자신의 예약 및 대기 조회", tags = ["로그인이 필요한 API"])
|
@Operation(summary = "자신의 예약 및 대기 조회", tags = ["로그인이 필요한 API"])
|
||||||
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
||||||
fun getMemberReservations(
|
fun findReservationsByMemberId(
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long
|
@MemberId @Parameter(hidden = true) memberId: Long
|
||||||
): ResponseEntity<CommonApiResponse<MyReservationRetrieveListResponse>>
|
): ResponseEntity<CommonApiResponse<MyReservationRetrieveListResponse>>
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ interface ReservationAPI {
|
|||||||
@ApiResponses(
|
@ApiResponses(
|
||||||
ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)
|
ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)
|
||||||
)
|
)
|
||||||
fun getReservationBySearching(
|
fun searchReservations(
|
||||||
@RequestParam(required = false) themeId: Long?,
|
@RequestParam(required = false) themeId: Long?,
|
||||||
@RequestParam(required = false) memberId: Long?,
|
@RequestParam(required = false) memberId: Long?,
|
||||||
@RequestParam(required = false) dateFrom: LocalDate?,
|
@RequestParam(required = false) dateFrom: LocalDate?,
|
||||||
@ -52,7 +52,7 @@ interface ReservationAPI {
|
|||||||
@ApiResponses(
|
@ApiResponses(
|
||||||
ApiResponse(responseCode = "204", description = "성공"),
|
ApiResponse(responseCode = "204", description = "성공"),
|
||||||
)
|
)
|
||||||
fun removeReservation(
|
fun cancelReservationByAdmin(
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long,
|
@MemberId @Parameter(hidden = true) memberId: Long,
|
||||||
@PathVariable("id") reservationId: Long
|
@PathVariable("id") reservationId: Long
|
||||||
): ResponseEntity<CommonApiResponse<Unit>>
|
): ResponseEntity<CommonApiResponse<Unit>>
|
||||||
@ -67,7 +67,7 @@ interface ReservationAPI {
|
|||||||
headers = [Header(name = HttpHeaders.LOCATION, description = "생성된 예약 정보 URL", schema = Schema(example = "/reservations/1"))]
|
headers = [Header(name = HttpHeaders.LOCATION, description = "생성된 예약 정보 URL", schema = Schema(example = "/reservations/1"))]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
fun saveReservation(
|
fun createReservationWithPayment(
|
||||||
@Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest,
|
@Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest,
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long
|
@MemberId @Parameter(hidden = true) memberId: Long
|
||||||
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>>
|
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>>
|
||||||
@ -82,14 +82,14 @@ interface ReservationAPI {
|
|||||||
headers = [Header(name = HttpHeaders.LOCATION, description = "생성된 예약 정보 URL", schema = Schema(example = "/reservations/1"))],
|
headers = [Header(name = HttpHeaders.LOCATION, description = "생성된 예약 정보 URL", schema = Schema(example = "/reservations/1"))],
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
fun saveReservationByAdmin(
|
fun createReservationByAdmin(
|
||||||
@Valid @RequestBody adminReservationRequest: AdminReservationCreateRequest,
|
@Valid @RequestBody adminReservationRequest: AdminReservationCreateRequest,
|
||||||
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>>
|
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>>
|
||||||
|
|
||||||
@Admin
|
@Admin
|
||||||
@Operation(summary = "모든 예약 대기 조회", tags = ["관리자 로그인이 필요한 API"])
|
@Operation(summary = "모든 예약 대기 조회", tags = ["관리자 로그인이 필요한 API"])
|
||||||
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
||||||
fun getAllWaiting(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>>
|
fun findAllWaiting(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>>
|
||||||
|
|
||||||
@LoginRequired
|
@LoginRequired
|
||||||
@Operation(summary = "예약 대기 신청", tags = ["로그인이 필요한 API"])
|
@Operation(summary = "예약 대기 신청", tags = ["로그인이 필요한 API"])
|
||||||
@ -101,7 +101,7 @@ interface ReservationAPI {
|
|||||||
headers = [Header(name = HttpHeaders.LOCATION, description = "생성된 예약 정보 URL", schema = Schema(example = "/reservations/1"))]
|
headers = [Header(name = HttpHeaders.LOCATION, description = "생성된 예약 정보 URL", schema = Schema(example = "/reservations/1"))]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
fun saveWaiting(
|
fun createWaiting(
|
||||||
@Valid @RequestBody waitingCreateRequest: WaitingCreateRequest,
|
@Valid @RequestBody waitingCreateRequest: WaitingCreateRequest,
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long,
|
@MemberId @Parameter(hidden = true) memberId: Long,
|
||||||
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>>
|
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>>
|
||||||
@ -111,7 +111,7 @@ interface ReservationAPI {
|
|||||||
@ApiResponses(
|
@ApiResponses(
|
||||||
ApiResponse(responseCode = "204", description = "성공"),
|
ApiResponse(responseCode = "204", description = "성공"),
|
||||||
)
|
)
|
||||||
fun deleteWaiting(
|
fun cancelWaitingByMember(
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long,
|
@MemberId @Parameter(hidden = true) memberId: Long,
|
||||||
@PathVariable("id") @Parameter(description = "예약 ID") reservationId: Long
|
@PathVariable("id") @Parameter(description = "예약 ID") reservationId: Long
|
||||||
): ResponseEntity<CommonApiResponse<Unit>>
|
): ResponseEntity<CommonApiResponse<Unit>>
|
||||||
@ -121,7 +121,7 @@ interface ReservationAPI {
|
|||||||
@ApiResponses(
|
@ApiResponses(
|
||||||
ApiResponse(responseCode = "200", description = "성공"),
|
ApiResponse(responseCode = "200", description = "성공"),
|
||||||
)
|
)
|
||||||
fun approveWaiting(
|
fun confirmWaiting(
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long,
|
@MemberId @Parameter(hidden = true) memberId: Long,
|
||||||
@PathVariable("id") @Parameter(description = "예약 ID") reservationId: Long
|
@PathVariable("id") @Parameter(description = "예약 ID") reservationId: Long
|
||||||
): ResponseEntity<CommonApiResponse<Unit>>
|
): ResponseEntity<CommonApiResponse<Unit>>
|
||||||
@ -131,7 +131,7 @@ interface ReservationAPI {
|
|||||||
@ApiResponses(
|
@ApiResponses(
|
||||||
ApiResponse(responseCode = "204", description = "대기 중인 예약 거절 성공"),
|
ApiResponse(responseCode = "204", description = "대기 중인 예약 거절 성공"),
|
||||||
)
|
)
|
||||||
fun denyWaiting(
|
fun rejectWaiting(
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long,
|
@MemberId @Parameter(hidden = true) memberId: Long,
|
||||||
@PathVariable("id") @Parameter(description = "예약 ID") reservationId: Long
|
@PathVariable("id") @Parameter(description = "예약 ID") reservationId: Long
|
||||||
): ResponseEntity<CommonApiResponse<Unit>>
|
): ResponseEntity<CommonApiResponse<Unit>>
|
||||||
|
|||||||
@ -24,26 +24,26 @@ interface TimeAPI {
|
|||||||
@Admin
|
@Admin
|
||||||
@Operation(summary = "모든 시간 조회", tags = ["관리자 로그인이 필요한 API"])
|
@Operation(summary = "모든 시간 조회", tags = ["관리자 로그인이 필요한 API"])
|
||||||
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
||||||
fun findAll(): ResponseEntity<CommonApiResponse<TimeRetrieveListResponse>>
|
fun findTimes(): ResponseEntity<CommonApiResponse<TimeRetrieveListResponse>>
|
||||||
|
|
||||||
@Admin
|
@Admin
|
||||||
@Operation(summary = "시간 추가", tags = ["관리자 로그인이 필요한 API"])
|
@Operation(summary = "시간 추가", tags = ["관리자 로그인이 필요한 API"])
|
||||||
@ApiResponses(ApiResponse(responseCode = "201", description = "성공", useReturnTypeSchema = true))
|
@ApiResponses(ApiResponse(responseCode = "201", description = "성공", useReturnTypeSchema = true))
|
||||||
fun create(
|
fun createTime(
|
||||||
@Valid @RequestBody timeCreateRequest: TimeCreateRequest,
|
@Valid @RequestBody timeCreateRequest: TimeCreateRequest,
|
||||||
): ResponseEntity<CommonApiResponse<TimeCreateResponse>>
|
): ResponseEntity<CommonApiResponse<TimeCreateResponse>>
|
||||||
|
|
||||||
@Admin
|
@Admin
|
||||||
@Operation(summary = "시간 삭제", tags = ["관리자 로그인이 필요한 API"])
|
@Operation(summary = "시간 삭제", tags = ["관리자 로그인이 필요한 API"])
|
||||||
@ApiResponses(ApiResponse(responseCode = "204", description = "성공", useReturnTypeSchema = true))
|
@ApiResponses(ApiResponse(responseCode = "204", description = "성공", useReturnTypeSchema = true))
|
||||||
fun deleteById(
|
fun deleteTime(
|
||||||
@PathVariable id: Long
|
@PathVariable id: Long
|
||||||
): ResponseEntity<CommonApiResponse<Unit>>
|
): ResponseEntity<CommonApiResponse<Unit>>
|
||||||
|
|
||||||
@LoginRequired
|
@LoginRequired
|
||||||
@Operation(summary = "예약 가능 여부를 포함한 모든 시간 조회", tags = ["로그인이 필요한 API"])
|
@Operation(summary = "예약 가능 여부를 포함한 모든 시간 조회", tags = ["로그인이 필요한 API"])
|
||||||
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
||||||
fun findAllWithAvailability(
|
fun findTimesWithAvailability(
|
||||||
@RequestParam date: LocalDate,
|
@RequestParam date: LocalDate,
|
||||||
@RequestParam themeId: Long
|
@RequestParam themeId: Long
|
||||||
): ResponseEntity<CommonApiResponse<TimeWithAvailabilityListResponse>>
|
): ResponseEntity<CommonApiResponse<TimeWithAvailabilityListResponse>>
|
||||||
|
|||||||
@ -58,5 +58,5 @@ interface ReservationRepository
|
|||||||
ON p.reservation = r
|
ON p.reservation = r
|
||||||
WHERE r.member.id = :memberId
|
WHERE r.member.id = :memberId
|
||||||
""")
|
""")
|
||||||
fun findMyReservations(memberId: Long): List<MyReservationRetrieveResponse>
|
fun findAllById(memberId: Long): List<MyReservationRetrieveResponse>
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,46 +24,50 @@ class ReservationController(
|
|||||||
private val paymentClient: TossPaymentClient
|
private val paymentClient: TossPaymentClient
|
||||||
) : ReservationAPI {
|
) : ReservationAPI {
|
||||||
@GetMapping("/reservations")
|
@GetMapping("/reservations")
|
||||||
override fun getAllReservations(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>> {
|
override fun findReservations(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>> {
|
||||||
val response: ReservationRetrieveListResponse = reservationService.findAllReservations()
|
val response: ReservationRetrieveListResponse = reservationService.findReservations()
|
||||||
|
|
||||||
return ResponseEntity.ok(CommonApiResponse(response))
|
return ResponseEntity.ok(CommonApiResponse(response))
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/reservations-mine")
|
@GetMapping("/reservations-mine")
|
||||||
override fun getMemberReservations(
|
override fun findReservationsByMemberId(
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long
|
@MemberId @Parameter(hidden = true) memberId: Long
|
||||||
): ResponseEntity<CommonApiResponse<MyReservationRetrieveListResponse>> {
|
): ResponseEntity<CommonApiResponse<MyReservationRetrieveListResponse>> {
|
||||||
val response: MyReservationRetrieveListResponse = reservationService.findMemberReservations(memberId)
|
val response: MyReservationRetrieveListResponse = reservationService.findReservationsByMemberId(memberId)
|
||||||
|
|
||||||
return ResponseEntity.ok(CommonApiResponse(response))
|
return ResponseEntity.ok(CommonApiResponse(response))
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/reservations/search")
|
@GetMapping("/reservations/search")
|
||||||
override fun getReservationBySearching(
|
override fun searchReservations(
|
||||||
@RequestParam(required = false) themeId: Long?,
|
@RequestParam(required = false) themeId: Long?,
|
||||||
@RequestParam(required = false) memberId: Long?,
|
@RequestParam(required = false) memberId: Long?,
|
||||||
@RequestParam(required = false) dateFrom: LocalDate?,
|
@RequestParam(required = false) dateFrom: LocalDate?,
|
||||||
@RequestParam(required = false) dateTo: LocalDate?
|
@RequestParam(required = false) dateTo: LocalDate?
|
||||||
): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>> {
|
): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>> {
|
||||||
val response: ReservationRetrieveListResponse = reservationService.findFilteredReservations(themeId, memberId, dateFrom, dateTo)
|
val response: ReservationRetrieveListResponse = reservationService.searchReservations(
|
||||||
|
themeId,
|
||||||
|
memberId,
|
||||||
|
dateFrom,
|
||||||
|
dateTo
|
||||||
|
)
|
||||||
|
|
||||||
return ResponseEntity.ok(CommonApiResponse(response))
|
return ResponseEntity.ok(CommonApiResponse(response))
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/reservations/{id}")
|
@DeleteMapping("/reservations/{id}")
|
||||||
override fun removeReservation(
|
override fun cancelReservationByAdmin(
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long,
|
@MemberId @Parameter(hidden = true) memberId: Long,
|
||||||
@PathVariable("id") reservationId: Long
|
@PathVariable("id") reservationId: Long
|
||||||
): ResponseEntity<CommonApiResponse<Unit>> {
|
): ResponseEntity<CommonApiResponse<Unit>> {
|
||||||
if (reservationWithPaymentService.isNotPaidReservation(reservationId)) {
|
if (reservationWithPaymentService.isNotPaidReservation(reservationId)) {
|
||||||
reservationService.removeReservationById(reservationId, memberId)
|
reservationService.deleteReservation(reservationId, memberId)
|
||||||
return ResponseEntity.noContent().build()
|
return ResponseEntity.noContent().build()
|
||||||
}
|
}
|
||||||
|
|
||||||
val paymentCancelRequest = reservationWithPaymentService.removeReservationWithPayment(
|
val paymentCancelRequest = reservationWithPaymentService.deleteReservationAndPayment(reservationId, memberId)
|
||||||
reservationId, memberId)
|
val paymentCancelResponse = paymentClient.cancel(paymentCancelRequest)
|
||||||
val paymentCancelResponse = paymentClient.cancelPayment(paymentCancelRequest)
|
|
||||||
reservationWithPaymentService.updateCanceledTime(paymentCancelRequest.paymentKey,
|
reservationWithPaymentService.updateCanceledTime(paymentCancelRequest.paymentKey,
|
||||||
paymentCancelResponse.canceledAt)
|
paymentCancelResponse.canceledAt)
|
||||||
|
|
||||||
@ -71,15 +75,15 @@ class ReservationController(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/reservations")
|
@PostMapping("/reservations")
|
||||||
override fun saveReservation(
|
override fun createReservationWithPayment(
|
||||||
@Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest,
|
@Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest,
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long
|
@MemberId @Parameter(hidden = true) memberId: Long
|
||||||
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>> {
|
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>> {
|
||||||
val paymentRequest: PaymentApproveRequest = reservationCreateWithPaymentRequest.toPaymentApproveRequest()
|
val paymentRequest: PaymentApproveRequest = reservationCreateWithPaymentRequest.toPaymentApproveRequest()
|
||||||
val paymentResponse: PaymentApproveResponse = paymentClient.confirmPayment(paymentRequest)
|
val paymentResponse: PaymentApproveResponse = paymentClient.confirm(paymentRequest)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val reservationRetrieveResponse: ReservationRetrieveResponse = reservationWithPaymentService.addReservationWithPayment(
|
val reservationRetrieveResponse: ReservationRetrieveResponse = reservationWithPaymentService.createReservationAndPayment(
|
||||||
reservationCreateWithPaymentRequest,
|
reservationCreateWithPaymentRequest,
|
||||||
paymentResponse,
|
paymentResponse,
|
||||||
memberId
|
memberId
|
||||||
@ -89,37 +93,37 @@ class ReservationController(
|
|||||||
} catch (e: RoomescapeException) {
|
} catch (e: RoomescapeException) {
|
||||||
val cancelRequest = PaymentCancelRequest(paymentRequest.paymentKey,
|
val cancelRequest = PaymentCancelRequest(paymentRequest.paymentKey,
|
||||||
paymentRequest.amount, e.message!!)
|
paymentRequest.amount, e.message!!)
|
||||||
val paymentCancelResponse = paymentClient.cancelPayment(cancelRequest)
|
val paymentCancelResponse = paymentClient.cancel(cancelRequest)
|
||||||
reservationWithPaymentService.saveCanceledPayment(paymentCancelResponse, paymentResponse.approvedAt,
|
reservationWithPaymentService.createCanceledPayment(paymentCancelResponse, paymentResponse.approvedAt,
|
||||||
paymentRequest.paymentKey)
|
paymentRequest.paymentKey)
|
||||||
throw e
|
throw e
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/reservations/admin")
|
@PostMapping("/reservations/admin")
|
||||||
override fun saveReservationByAdmin(
|
override fun createReservationByAdmin(
|
||||||
@Valid @RequestBody adminReservationRequest: AdminReservationCreateRequest
|
@Valid @RequestBody adminReservationRequest: AdminReservationCreateRequest
|
||||||
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>> {
|
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>> {
|
||||||
val response: ReservationRetrieveResponse =
|
val response: ReservationRetrieveResponse =
|
||||||
reservationService.addReservationByAdmin(adminReservationRequest)
|
reservationService.createReservationByAdmin(adminReservationRequest)
|
||||||
|
|
||||||
return ResponseEntity.created(URI.create("/reservations/${response.id}"))
|
return ResponseEntity.created(URI.create("/reservations/${response.id}"))
|
||||||
.body(CommonApiResponse(response))
|
.body(CommonApiResponse(response))
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/reservations/waiting")
|
@GetMapping("/reservations/waiting")
|
||||||
override fun getAllWaiting(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>> {
|
override fun findAllWaiting(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>> {
|
||||||
val response: ReservationRetrieveListResponse = reservationService.findAllWaiting()
|
val response: ReservationRetrieveListResponse = reservationService.findAllWaiting()
|
||||||
|
|
||||||
return ResponseEntity.ok(CommonApiResponse(response))
|
return ResponseEntity.ok(CommonApiResponse(response))
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/reservations/waiting")
|
@PostMapping("/reservations/waiting")
|
||||||
override fun saveWaiting(
|
override fun createWaiting(
|
||||||
@Valid @RequestBody waitingCreateRequest: WaitingCreateRequest,
|
@Valid @RequestBody waitingCreateRequest: WaitingCreateRequest,
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long,
|
@MemberId @Parameter(hidden = true) memberId: Long,
|
||||||
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>> {
|
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>> {
|
||||||
val response: ReservationRetrieveResponse = reservationService.addWaiting(
|
val response: ReservationRetrieveResponse = reservationService.createWaiting(
|
||||||
waitingCreateRequest,
|
waitingCreateRequest,
|
||||||
memberId
|
memberId
|
||||||
)
|
)
|
||||||
@ -129,31 +133,31 @@ class ReservationController(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/reservations/waiting/{id}")
|
@DeleteMapping("/reservations/waiting/{id}")
|
||||||
override fun deleteWaiting(
|
override fun cancelWaitingByMember(
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long,
|
@MemberId @Parameter(hidden = true) memberId: Long,
|
||||||
@PathVariable("id") reservationId: Long
|
@PathVariable("id") reservationId: Long
|
||||||
): ResponseEntity<CommonApiResponse<Unit>> {
|
): ResponseEntity<CommonApiResponse<Unit>> {
|
||||||
reservationService.cancelWaiting(reservationId, memberId)
|
reservationService.deleteWaiting(reservationId, memberId)
|
||||||
|
|
||||||
return ResponseEntity.noContent().build()
|
return ResponseEntity.noContent().build()
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/reservations/waiting/{id}/approve")
|
@PostMapping("/reservations/waiting/{id}/confirm")
|
||||||
override fun approveWaiting(
|
override fun confirmWaiting(
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long,
|
@MemberId @Parameter(hidden = true) memberId: Long,
|
||||||
@PathVariable("id") reservationId: Long
|
@PathVariable("id") reservationId: Long
|
||||||
): ResponseEntity<CommonApiResponse<Unit>> {
|
): ResponseEntity<CommonApiResponse<Unit>> {
|
||||||
reservationService.approveWaiting(reservationId, memberId)
|
reservationService.confirmWaiting(reservationId, memberId)
|
||||||
|
|
||||||
return ResponseEntity.ok().build()
|
return ResponseEntity.ok().build()
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/reservations/waiting/{id}/deny")
|
@PostMapping("/reservations/waiting/{id}/reject")
|
||||||
override fun denyWaiting(
|
override fun rejectWaiting(
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long,
|
@MemberId @Parameter(hidden = true) memberId: Long,
|
||||||
@PathVariable("id") reservationId: Long
|
@PathVariable("id") reservationId: Long
|
||||||
): ResponseEntity<CommonApiResponse<Unit>> {
|
): ResponseEntity<CommonApiResponse<Unit>> {
|
||||||
reservationService.denyWaiting(reservationId, memberId)
|
reservationService.rejectWaiting(reservationId, memberId)
|
||||||
|
|
||||||
return ResponseEntity.noContent().build()
|
return ResponseEntity.noContent().build()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,17 +15,17 @@ class TimeController(
|
|||||||
) : TimeAPI {
|
) : TimeAPI {
|
||||||
|
|
||||||
@GetMapping("/times")
|
@GetMapping("/times")
|
||||||
override fun findAll(): ResponseEntity<CommonApiResponse<TimeRetrieveListResponse>> {
|
override fun findTimes(): ResponseEntity<CommonApiResponse<TimeRetrieveListResponse>> {
|
||||||
val response: TimeRetrieveListResponse = timeService.findAll()
|
val response: TimeRetrieveListResponse = timeService.findTimes()
|
||||||
|
|
||||||
return ResponseEntity.ok(CommonApiResponse(response))
|
return ResponseEntity.ok(CommonApiResponse(response))
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/times")
|
@PostMapping("/times")
|
||||||
override fun create(
|
override fun createTime(
|
||||||
@Valid @RequestBody timeCreateRequest: TimeCreateRequest,
|
@Valid @RequestBody timeCreateRequest: TimeCreateRequest,
|
||||||
): ResponseEntity<CommonApiResponse<TimeCreateResponse>> {
|
): ResponseEntity<CommonApiResponse<TimeCreateResponse>> {
|
||||||
val response: TimeCreateResponse = timeService.create(timeCreateRequest)
|
val response: TimeCreateResponse = timeService.createTime(timeCreateRequest)
|
||||||
|
|
||||||
return ResponseEntity
|
return ResponseEntity
|
||||||
.created(URI.create("/times/${response.id}"))
|
.created(URI.create("/times/${response.id}"))
|
||||||
@ -33,18 +33,18 @@ class TimeController(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/times/{id}")
|
@DeleteMapping("/times/{id}")
|
||||||
override fun deleteById(@PathVariable id: Long): ResponseEntity<CommonApiResponse<Unit>> {
|
override fun deleteTime(@PathVariable id: Long): ResponseEntity<CommonApiResponse<Unit>> {
|
||||||
timeService.deleteById(id)
|
timeService.deleteTime(id)
|
||||||
|
|
||||||
return ResponseEntity.noContent().build()
|
return ResponseEntity.noContent().build()
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/times/filter")
|
@GetMapping("/times/search")
|
||||||
override fun findAllWithAvailability(
|
override fun findTimesWithAvailability(
|
||||||
@RequestParam date: LocalDate,
|
@RequestParam date: LocalDate,
|
||||||
@RequestParam themeId: Long
|
@RequestParam themeId: Long
|
||||||
): ResponseEntity<CommonApiResponse<TimeWithAvailabilityListResponse>> {
|
): ResponseEntity<CommonApiResponse<TimeWithAvailabilityListResponse>> {
|
||||||
val response: TimeWithAvailabilityListResponse = timeService.findAllWithAvailability(date, themeId)
|
val response: TimeWithAvailabilityListResponse = timeService.findTimesWithAvailability(date, themeId)
|
||||||
|
|
||||||
return ResponseEntity.ok(CommonApiResponse(response))
|
return ResponseEntity.ok(CommonApiResponse(response))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,7 +27,7 @@ class ThemeService(
|
|||||||
)
|
)
|
||||||
|
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
fun findAll(): ThemesResponse = themeRepository.findAll()
|
fun findThemes(): ThemesResponse = themeRepository.findAll()
|
||||||
.toResponse()
|
.toResponse()
|
||||||
|
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
@ -41,7 +41,7 @@ class ThemeService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
fun create(request: ThemeRequest): ThemeResponse {
|
fun createTheme(request: ThemeRequest): ThemeResponse {
|
||||||
if (themeRepository.existsByName(request.name)) {
|
if (themeRepository.existsByName(request.name)) {
|
||||||
throw RoomescapeException(
|
throw RoomescapeException(
|
||||||
ErrorType.THEME_DUPLICATED,
|
ErrorType.THEME_DUPLICATED,
|
||||||
@ -60,7 +60,7 @@ class ThemeService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
fun deleteById(id: Long) {
|
fun deleteTheme(id: Long) {
|
||||||
if (themeRepository.isReservedTheme(id)) {
|
if (themeRepository.isReservedTheme(id)) {
|
||||||
throw RoomescapeException(
|
throw RoomescapeException(
|
||||||
ErrorType.THEME_IS_USED_CONFLICT,
|
ErrorType.THEME_IS_USED_CONFLICT,
|
||||||
|
|||||||
@ -23,7 +23,7 @@ interface ThemeAPI {
|
|||||||
@LoginRequired
|
@LoginRequired
|
||||||
@Operation(summary = "모든 테마 조회", description = "모든 테마를 조회합니다.", tags = ["로그인이 필요한 API"])
|
@Operation(summary = "모든 테마 조회", description = "모든 테마를 조회합니다.", tags = ["로그인이 필요한 API"])
|
||||||
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
||||||
fun findAll(): ResponseEntity<CommonApiResponse<ThemesResponse>>
|
fun findThemes(): ResponseEntity<CommonApiResponse<ThemesResponse>>
|
||||||
|
|
||||||
@Operation(summary = "가장 많이 예약된 테마 조회")
|
@Operation(summary = "가장 많이 예약된 테마 조회")
|
||||||
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
|
||||||
@ -36,7 +36,7 @@ interface ThemeAPI {
|
|||||||
@ApiResponses(
|
@ApiResponses(
|
||||||
ApiResponse(responseCode = "201", description = "성공", useReturnTypeSchema = true),
|
ApiResponse(responseCode = "201", description = "성공", useReturnTypeSchema = true),
|
||||||
)
|
)
|
||||||
fun create(
|
fun createTheme(
|
||||||
@Valid @RequestBody request: ThemeRequest,
|
@Valid @RequestBody request: ThemeRequest,
|
||||||
): ResponseEntity<CommonApiResponse<ThemeResponse>>
|
): ResponseEntity<CommonApiResponse<ThemeResponse>>
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ interface ThemeAPI {
|
|||||||
@ApiResponses(
|
@ApiResponses(
|
||||||
ApiResponse(responseCode = "204", description = "성공", useReturnTypeSchema = true),
|
ApiResponse(responseCode = "204", description = "성공", useReturnTypeSchema = true),
|
||||||
)
|
)
|
||||||
fun deleteById(
|
fun deleteTheme(
|
||||||
@PathVariable id: Long
|
@PathVariable id: Long
|
||||||
): ResponseEntity<CommonApiResponse<Unit>>
|
): ResponseEntity<CommonApiResponse<Unit>>
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,8 +15,8 @@ class ThemeController(
|
|||||||
) : ThemeAPI {
|
) : ThemeAPI {
|
||||||
|
|
||||||
@GetMapping("/themes")
|
@GetMapping("/themes")
|
||||||
override fun findAll(): ResponseEntity<CommonApiResponse<ThemesResponse>> {
|
override fun findThemes(): ResponseEntity<CommonApiResponse<ThemesResponse>> {
|
||||||
val response: ThemesResponse = themeService.findAll()
|
val response: ThemesResponse = themeService.findThemes()
|
||||||
|
|
||||||
return ResponseEntity.ok(CommonApiResponse(response))
|
return ResponseEntity.ok(CommonApiResponse(response))
|
||||||
}
|
}
|
||||||
@ -31,20 +31,20 @@ class ThemeController(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/themes")
|
@PostMapping("/themes")
|
||||||
override fun create(
|
override fun createTheme(
|
||||||
@RequestBody @Valid request: ThemeRequest
|
@RequestBody @Valid request: ThemeRequest
|
||||||
): ResponseEntity<CommonApiResponse<ThemeResponse>> {
|
): ResponseEntity<CommonApiResponse<ThemeResponse>> {
|
||||||
val themeResponse: ThemeResponse = themeService.create(request)
|
val themeResponse: ThemeResponse = themeService.createTheme(request)
|
||||||
|
|
||||||
return ResponseEntity.created(URI.create("/themes/${themeResponse.id}"))
|
return ResponseEntity.created(URI.create("/themes/${themeResponse.id}"))
|
||||||
.body(CommonApiResponse(themeResponse))
|
.body(CommonApiResponse(themeResponse))
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/themes/{id}")
|
@DeleteMapping("/themes/{id}")
|
||||||
override fun deleteById(
|
override fun deleteTheme(
|
||||||
@PathVariable id: Long
|
@PathVariable id: Long
|
||||||
): ResponseEntity<CommonApiResponse<Unit>> {
|
): ResponseEntity<CommonApiResponse<Unit>> {
|
||||||
themeService.deleteById(id)
|
themeService.deleteTheme(id)
|
||||||
|
|
||||||
return ResponseEntity.noContent().build()
|
return ResponseEntity.noContent().build()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -97,7 +97,7 @@ function checkDateAndTheme() {
|
|||||||
|
|
||||||
function fetchAvailableTimes(date, themeId) {
|
function fetchAvailableTimes(date, themeId) {
|
||||||
|
|
||||||
fetch(`/times/filter?date=${date}&themeId=${themeId}`, { // 예약 가능 시간 조회 API endpoint
|
fetch(`/times/search?date=${date}&themeId=${themeId}`, { // 예약 가능 시간 조회 API endpoint
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
|
|||||||
@ -38,7 +38,7 @@ function approve(event) {
|
|||||||
const row = event.target.closest('tr');
|
const row = event.target.closest('tr');
|
||||||
const id = row.cells[0].textContent;
|
const id = row.cells[0].textContent;
|
||||||
|
|
||||||
const endpoint = `/reservations/waiting/${id}/approve`
|
const endpoint = `/reservations/waiting/${id}/confirm`
|
||||||
return fetch(endpoint, {
|
return fetch(endpoint, {
|
||||||
method: 'POST'
|
method: 'POST'
|
||||||
}).then(response => {
|
}).then(response => {
|
||||||
@ -51,7 +51,7 @@ function deny(event) {
|
|||||||
const row = event.target.closest('tr');
|
const row = event.target.closest('tr');
|
||||||
const id = row.cells[0].textContent;
|
const id = row.cells[0].textContent;
|
||||||
|
|
||||||
const endpoint = `/reservations/waiting/${id}/deny`
|
const endpoint = `/reservations/waiting/${id}/reject`
|
||||||
return fetch(endpoint, {
|
return fetch(endpoint, {
|
||||||
method: 'POST'
|
method: 'POST'
|
||||||
}).then(response => {
|
}).then(response => {
|
||||||
|
|||||||
@ -47,7 +47,7 @@ class TossPaymentClientTest(
|
|||||||
|
|
||||||
// when
|
// when
|
||||||
val paymentRequest = SampleTossPaymentConst.paymentRequest
|
val paymentRequest = SampleTossPaymentConst.paymentRequest
|
||||||
val paymentResponse: PaymentApproveResponse = client.confirmPayment(paymentRequest)
|
val paymentResponse: PaymentApproveResponse = client.confirm(paymentRequest)
|
||||||
|
|
||||||
assertSoftly(paymentResponse) {
|
assertSoftly(paymentResponse) {
|
||||||
this.paymentKey shouldBe paymentRequest.paymentKey
|
this.paymentKey shouldBe paymentRequest.paymentKey
|
||||||
@ -69,7 +69,7 @@ class TossPaymentClientTest(
|
|||||||
|
|
||||||
// then
|
// then
|
||||||
val exception = shouldThrow<RoomescapeException> {
|
val exception = shouldThrow<RoomescapeException> {
|
||||||
client.confirmPayment(paymentRequest)
|
client.confirm(paymentRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
assertSoftly(exception) {
|
assertSoftly(exception) {
|
||||||
@ -102,7 +102,7 @@ class TossPaymentClientTest(
|
|||||||
|
|
||||||
// when
|
// when
|
||||||
val cancelRequest: PaymentCancelRequest = SampleTossPaymentConst.cancelRequest
|
val cancelRequest: PaymentCancelRequest = SampleTossPaymentConst.cancelRequest
|
||||||
val cancelResponse: PaymentCancelResponse = client.cancelPayment(cancelRequest)
|
val cancelResponse: PaymentCancelResponse = client.cancel(cancelRequest)
|
||||||
|
|
||||||
assertSoftly(cancelResponse) {
|
assertSoftly(cancelResponse) {
|
||||||
this.cancelStatus shouldBe "DONE"
|
this.cancelStatus shouldBe "DONE"
|
||||||
@ -124,7 +124,7 @@ class TossPaymentClientTest(
|
|||||||
|
|
||||||
// then
|
// then
|
||||||
val exception = shouldThrow<RoomescapeException> {
|
val exception = shouldThrow<RoomescapeException> {
|
||||||
client.cancelPayment(cancelRequest)
|
client.cancel(cancelRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
assertSoftly(exception) {
|
assertSoftly(exception) {
|
||||||
|
|||||||
@ -113,7 +113,7 @@ class ReservationServiceTest : FunSpec({
|
|||||||
themeId = reservationRequest.themeId,
|
themeId = reservationRequest.themeId,
|
||||||
timeId = reservationRequest.timeId
|
timeId = reservationRequest.timeId
|
||||||
)
|
)
|
||||||
reservationService.addWaiting(waitingRequest, 1L)
|
reservationService.createWaiting(waitingRequest, 1L)
|
||||||
}.also {
|
}.also {
|
||||||
it.errorType shouldBe ErrorType.HAS_RESERVATION_OR_WAITING
|
it.errorType shouldBe ErrorType.HAS_RESERVATION_OR_WAITING
|
||||||
}
|
}
|
||||||
@ -126,7 +126,7 @@ class ReservationServiceTest : FunSpec({
|
|||||||
val endAt = startFrom.minusDays(1)
|
val endAt = startFrom.minusDays(1)
|
||||||
|
|
||||||
shouldThrow<RoomescapeException> {
|
shouldThrow<RoomescapeException> {
|
||||||
reservationService.findFilteredReservations(
|
reservationService.searchReservations(
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
startFrom,
|
startFrom,
|
||||||
@ -147,7 +147,7 @@ class ReservationServiceTest : FunSpec({
|
|||||||
} returns member
|
} returns member
|
||||||
|
|
||||||
shouldThrow<RoomescapeException> {
|
shouldThrow<RoomescapeException> {
|
||||||
reservationService.approveWaiting(1L, member.id!!)
|
reservationService.confirmWaiting(1L, member.id!!)
|
||||||
}.also {
|
}.also {
|
||||||
it.errorType shouldBe ErrorType.PERMISSION_DOES_NOT_EXIST
|
it.errorType shouldBe ErrorType.PERMISSION_DOES_NOT_EXIST
|
||||||
}
|
}
|
||||||
@ -166,7 +166,7 @@ class ReservationServiceTest : FunSpec({
|
|||||||
} returns true
|
} returns true
|
||||||
|
|
||||||
shouldThrow<RoomescapeException> {
|
shouldThrow<RoomescapeException> {
|
||||||
reservationService.approveWaiting(reservationId, member.id!!)
|
reservationService.confirmWaiting(reservationId, member.id!!)
|
||||||
}.also {
|
}.also {
|
||||||
it.errorType shouldBe ErrorType.RESERVATION_DUPLICATED
|
it.errorType shouldBe ErrorType.RESERVATION_DUPLICATED
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,7 +55,7 @@ class ReservationWithPaymentServiceTest : FunSpec({
|
|||||||
paymentService.createPayment(paymentApproveResponse, reservationEntity)
|
paymentService.createPayment(paymentApproveResponse, reservationEntity)
|
||||||
} returns paymentEntity.toCreateResponse()
|
} returns paymentEntity.toCreateResponse()
|
||||||
|
|
||||||
val result: ReservationRetrieveResponse = reservationWithPaymentService.addReservationWithPayment(
|
val result: ReservationRetrieveResponse = reservationWithPaymentService.createReservationAndPayment(
|
||||||
request = reservationCreateWithPaymentRequest,
|
request = reservationCreateWithPaymentRequest,
|
||||||
paymentInfo = paymentApproveResponse,
|
paymentInfo = paymentApproveResponse,
|
||||||
memberId = memberId
|
memberId = memberId
|
||||||
@ -85,10 +85,10 @@ class ReservationWithPaymentServiceTest : FunSpec({
|
|||||||
} returns paymentCancelRequest
|
} returns paymentCancelRequest
|
||||||
|
|
||||||
every {
|
every {
|
||||||
reservationService.removeReservationById(reservationEntity.id!!, reservationEntity.member.id!!)
|
reservationService.deleteReservation(reservationEntity.id!!, reservationEntity.member.id!!)
|
||||||
} just Runs
|
} just Runs
|
||||||
|
|
||||||
val result: PaymentCancelRequest = reservationWithPaymentService.removeReservationWithPayment(
|
val result: PaymentCancelRequest = reservationWithPaymentService.deleteReservationAndPayment(
|
||||||
reservationId = reservationEntity.id!!,
|
reservationId = reservationEntity.id!!,
|
||||||
memberId = reservationEntity.member.id!!
|
memberId = reservationEntity.member.id!!
|
||||||
)
|
)
|
||||||
|
|||||||
@ -46,7 +46,7 @@ class TimeServiceTest : FunSpec({
|
|||||||
every { timeRepository.existsByStartAt(request.startAt) } returns true
|
every { timeRepository.existsByStartAt(request.startAt) } returns true
|
||||||
|
|
||||||
shouldThrow<RoomescapeException> {
|
shouldThrow<RoomescapeException> {
|
||||||
timeService.create(request)
|
timeService.createTime(request)
|
||||||
}.apply {
|
}.apply {
|
||||||
errorType shouldBe ErrorType.TIME_DUPLICATED
|
errorType shouldBe ErrorType.TIME_DUPLICATED
|
||||||
httpStatus shouldBe HttpStatus.CONFLICT
|
httpStatus shouldBe HttpStatus.CONFLICT
|
||||||
@ -61,7 +61,7 @@ class TimeServiceTest : FunSpec({
|
|||||||
every { timeRepository.findByIdOrNull(id) } returns null
|
every { timeRepository.findByIdOrNull(id) } returns null
|
||||||
|
|
||||||
shouldThrow<RoomescapeException> {
|
shouldThrow<RoomescapeException> {
|
||||||
timeService.deleteById(id)
|
timeService.deleteTime(id)
|
||||||
}.apply {
|
}.apply {
|
||||||
errorType shouldBe ErrorType.TIME_NOT_FOUND
|
errorType shouldBe ErrorType.TIME_NOT_FOUND
|
||||||
httpStatus shouldBe HttpStatus.BAD_REQUEST
|
httpStatus shouldBe HttpStatus.BAD_REQUEST
|
||||||
@ -77,7 +77,7 @@ class TimeServiceTest : FunSpec({
|
|||||||
every { reservationRepository.findByTime(time) } returns listOf(mockk())
|
every { reservationRepository.findByTime(time) } returns listOf(mockk())
|
||||||
|
|
||||||
shouldThrow<RoomescapeException> {
|
shouldThrow<RoomescapeException> {
|
||||||
timeService.deleteById(id)
|
timeService.deleteTime(id)
|
||||||
}.apply {
|
}.apply {
|
||||||
errorType shouldBe ErrorType.TIME_IS_USED_CONFLICT
|
errorType shouldBe ErrorType.TIME_IS_USED_CONFLICT
|
||||||
httpStatus shouldBe HttpStatus.CONFLICT
|
httpStatus shouldBe HttpStatus.CONFLICT
|
||||||
|
|||||||
@ -168,7 +168,7 @@ class ReservationRepositoryTest(
|
|||||||
entityManager.clear()
|
entityManager.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
val result: List<MyReservationRetrieveResponse> = reservationRepository.findMyReservations(reservation.member.id!!)
|
val result: List<MyReservationRetrieveResponse> = reservationRepository.findAllById(reservation.member.id!!)
|
||||||
|
|
||||||
result shouldHaveSize 1
|
result shouldHaveSize 1
|
||||||
assertSoftly(result.first()) {
|
assertSoftly(result.first()) {
|
||||||
@ -179,7 +179,7 @@ class ReservationRepositoryTest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
test("결제 정보가 없다면 paymentKey와 amount는 null로 반환한다.") {
|
test("결제 정보가 없다면 paymentKey와 amount는 null로 반환한다.") {
|
||||||
val result: List<MyReservationRetrieveResponse> = reservationRepository.findMyReservations(reservation.member.id!!)
|
val result: List<MyReservationRetrieveResponse> = reservationRepository.findAllById(reservation.member.id!!)
|
||||||
|
|
||||||
result shouldHaveSize 1
|
result shouldHaveSize 1
|
||||||
assertSoftly(result.first()) {
|
assertSoftly(result.first()) {
|
||||||
|
|||||||
@ -70,7 +70,7 @@ class ReservationControllerTest(
|
|||||||
)
|
)
|
||||||
|
|
||||||
every {
|
every {
|
||||||
paymentClient.confirmPayment(any())
|
paymentClient.confirm(any())
|
||||||
} returns paymentApproveResponse
|
} returns paymentApproveResponse
|
||||||
|
|
||||||
Given {
|
Given {
|
||||||
@ -94,7 +94,7 @@ class ReservationControllerTest(
|
|||||||
)
|
)
|
||||||
|
|
||||||
every {
|
every {
|
||||||
paymentClient.confirmPayment(any())
|
paymentClient.confirm(any())
|
||||||
} throws paymentException
|
} throws paymentException
|
||||||
|
|
||||||
Given {
|
Given {
|
||||||
@ -118,7 +118,7 @@ class ReservationControllerTest(
|
|||||||
)
|
)
|
||||||
|
|
||||||
every {
|
every {
|
||||||
paymentClient.confirmPayment(any())
|
paymentClient.confirm(any())
|
||||||
} returns paymentApproveResponse
|
} returns paymentApproveResponse
|
||||||
|
|
||||||
// 예약 저장 과정에서 테마가 없는 예외
|
// 예약 저장 과정에서 테마가 없는 예외
|
||||||
@ -126,7 +126,7 @@ class ReservationControllerTest(
|
|||||||
val expectedException = RoomescapeException(ErrorType.THEME_NOT_FOUND, HttpStatus.BAD_REQUEST)
|
val expectedException = RoomescapeException(ErrorType.THEME_NOT_FOUND, HttpStatus.BAD_REQUEST)
|
||||||
|
|
||||||
every {
|
every {
|
||||||
paymentClient.cancelPayment(any())
|
paymentClient.cancel(any())
|
||||||
} returns PaymentFixture.createCancelResponse()
|
} returns PaymentFixture.createCancelResponse()
|
||||||
|
|
||||||
val canceledPaymentSizeBeforeApiCall: Long = entityManager.createQuery(
|
val canceledPaymentSizeBeforeApiCall: Long = entityManager.createQuery(
|
||||||
@ -367,7 +367,7 @@ class ReservationControllerTest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
every {
|
every {
|
||||||
paymentClient.cancelPayment(any())
|
paymentClient.cancel(any())
|
||||||
} returns PaymentFixture.createCancelResponse()
|
} returns PaymentFixture.createCancelResponse()
|
||||||
|
|
||||||
val canceledPaymentSizeBeforeApiCall: Long = entityManager.createQuery(
|
val canceledPaymentSizeBeforeApiCall: Long = entityManager.createQuery(
|
||||||
@ -561,14 +561,14 @@ class ReservationControllerTest(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
context("POST /reservations/waiting/{id}/approve") {
|
context("POST /reservations/waiting/{id}/confirm") {
|
||||||
test("관리자만 승인할 수 있다.") {
|
test("관리자만 승인할 수 있다.") {
|
||||||
login(MemberFixture.create(role = Role.MEMBER))
|
login(MemberFixture.create(role = Role.MEMBER))
|
||||||
|
|
||||||
Given {
|
Given {
|
||||||
port(port)
|
port(port)
|
||||||
}.When {
|
}.When {
|
||||||
post("/reservations/waiting/1/approve")
|
post("/reservations/waiting/1/confirm")
|
||||||
}.Then {
|
}.Then {
|
||||||
statusCode(302)
|
statusCode(302)
|
||||||
header(HttpHeaders.LOCATION, containsString("/login"))
|
header(HttpHeaders.LOCATION, containsString("/login"))
|
||||||
@ -585,7 +585,7 @@ class ReservationControllerTest(
|
|||||||
Given {
|
Given {
|
||||||
port(port)
|
port(port)
|
||||||
}.When {
|
}.When {
|
||||||
post("/reservations/waiting/${reservation.id!!}/approve")
|
post("/reservations/waiting/${reservation.id!!}/confirm")
|
||||||
}.Then {
|
}.Then {
|
||||||
statusCode(200)
|
statusCode(200)
|
||||||
}
|
}
|
||||||
@ -601,14 +601,14 @@ class ReservationControllerTest(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
context("POST /reservations/waiting/{id}/deny") {
|
context("POST /reservations/waiting/{id}/reject") {
|
||||||
test("관리자만 거절할 수 있다.") {
|
test("관리자만 거절할 수 있다.") {
|
||||||
login(MemberFixture.create(role = Role.MEMBER))
|
login(MemberFixture.create(role = Role.MEMBER))
|
||||||
|
|
||||||
Given {
|
Given {
|
||||||
port(port)
|
port(port)
|
||||||
}.When {
|
}.When {
|
||||||
post("/reservations/waiting/1/deny")
|
post("/reservations/waiting/1/reject")
|
||||||
}.Then {
|
}.Then {
|
||||||
statusCode(302)
|
statusCode(302)
|
||||||
header(HttpHeaders.LOCATION, containsString("/login"))
|
header(HttpHeaders.LOCATION, containsString("/login"))
|
||||||
@ -625,7 +625,7 @@ class ReservationControllerTest(
|
|||||||
Given {
|
Given {
|
||||||
port(port)
|
port(port)
|
||||||
}.When {
|
}.When {
|
||||||
post("/reservations/waiting/${reservation.id!!}/deny")
|
post("/reservations/waiting/${reservation.id!!}/reject")
|
||||||
}.Then {
|
}.Then {
|
||||||
statusCode(204)
|
statusCode(204)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -112,7 +112,7 @@ class TimeControllerTest(
|
|||||||
|
|
||||||
Then("정상 응답") {
|
Then("정상 응답") {
|
||||||
every {
|
every {
|
||||||
timeService.create(request)
|
timeService.createTime(request)
|
||||||
} returns TimeCreateResponse(id = 1, startAt = time)
|
} returns TimeCreateResponse(id = 1, startAt = time)
|
||||||
|
|
||||||
runPostTest(
|
runPostTest(
|
||||||
@ -174,7 +174,7 @@ class TimeControllerTest(
|
|||||||
|
|
||||||
Then("정상 응답") {
|
Then("정상 응답") {
|
||||||
every {
|
every {
|
||||||
timeService.deleteById(1L)
|
timeService.deleteTime(1L)
|
||||||
} returns Unit
|
} returns Unit
|
||||||
|
|
||||||
runDeleteTest(
|
runDeleteTest(
|
||||||
@ -272,7 +272,7 @@ class TimeControllerTest(
|
|||||||
|
|
||||||
val response = runGetTest(
|
val response = runGetTest(
|
||||||
mockMvc = mockMvc,
|
mockMvc = mockMvc,
|
||||||
endpoint = "/times/filter?date=$date&themeId=$themeId",
|
endpoint = "/times/search?date=$date&themeId=$themeId",
|
||||||
) {
|
) {
|
||||||
status { isOk() }
|
status { isOk() }
|
||||||
content {
|
content {
|
||||||
|
|||||||
@ -51,7 +51,7 @@ class ThemeServiceTest : FunSpec({
|
|||||||
themeRepository.findAll()
|
themeRepository.findAll()
|
||||||
} returns themes
|
} returns themes
|
||||||
|
|
||||||
assertSoftly(themeService.findAll()) {
|
assertSoftly(themeService.findThemes()) {
|
||||||
this.themes.size shouldBe themes.size
|
this.themes.size shouldBe themes.size
|
||||||
this.themes[0].name shouldBe "t1"
|
this.themes[0].name shouldBe "t1"
|
||||||
this.themes[1].name shouldBe "t2"
|
this.themes[1].name shouldBe "t2"
|
||||||
@ -68,7 +68,7 @@ class ThemeServiceTest : FunSpec({
|
|||||||
} returns true
|
} returns true
|
||||||
|
|
||||||
val exception = shouldThrow<RoomescapeException> {
|
val exception = shouldThrow<RoomescapeException> {
|
||||||
themeService.create(ThemeRequest(
|
themeService.createTheme(ThemeRequest(
|
||||||
name = name,
|
name = name,
|
||||||
description = "Description",
|
description = "Description",
|
||||||
thumbnail = "http://example.com/thumbnail.jpg"
|
thumbnail = "http://example.com/thumbnail.jpg"
|
||||||
@ -91,7 +91,7 @@ class ThemeServiceTest : FunSpec({
|
|||||||
} returns true
|
} returns true
|
||||||
|
|
||||||
val exception = shouldThrow<RoomescapeException> {
|
val exception = shouldThrow<RoomescapeException> {
|
||||||
themeService.deleteById(themeId)
|
themeService.deleteTheme(themeId)
|
||||||
}
|
}
|
||||||
|
|
||||||
assertSoftly(exception) {
|
assertSoftly(exception) {
|
||||||
|
|||||||
@ -195,7 +195,7 @@ class ThemeControllerTest(mockMvc: MockMvc) : RoomescapeApiTest() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
every {
|
every {
|
||||||
themeService.create(request)
|
themeService.createTheme(request)
|
||||||
} returns ThemeResponse(
|
} returns ThemeResponse(
|
||||||
id = theme.id!!,
|
id = theme.id!!,
|
||||||
name = theme.name,
|
name = theme.name,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user