From 85328021a7a46e94652fbc01d9f6bf2b29cabcc3 Mon Sep 17 00:00:00 2001 From: pricelees Date: Tue, 22 Jul 2025 17:40:06 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EC=A0=84=EC=B2=B4=20=EC=BB=A8?= =?UTF-8?q?=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=BB=A8=EB=B2=A4=EC=85=98=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/business/MemberService.kt | 2 +- .../roomescape/member/docs/MemberAPI.kt | 2 +- .../roomescape/member/web/MemberController.kt | 4 +- .../client/TossPaymentClient.kt | 4 +- .../business/ReservationService.kt | 20 +++--- .../business/ReservationWithPaymentService.kt | 8 +-- .../reservation/business/TimeService.kt | 8 +-- .../reservation/docs/ReservationAPI.kt | 22 +++---- .../roomescape/reservation/docs/TimeAPI.kt | 8 +-- .../persistence/ReservationRepository.kt | 2 +- .../reservation/web/ReservationController.kt | 62 ++++++++++--------- .../reservation/web/TimeController.kt | 18 +++--- .../roomescape/theme/business/ThemeService.kt | 6 +- .../kotlin/roomescape/theme/docs/ThemeAPI.kt | 6 +- .../roomescape/theme/web/ThemeController.kt | 12 ++-- .../resources/static/js/user-reservation.js | 2 +- src/main/resources/static/js/waiting.js | 4 +- .../client/TossPaymentClientTest.kt | 8 +-- .../business/ReservationServiceTest.kt | 8 +-- .../ReservationWithPaymentServiceTest.kt | 6 +- .../reservation/business/TimeServiceTest.kt | 6 +- .../persistence/ReservationRepositoryTest.kt | 4 +- .../web/ReservationControllerTest.kt | 22 +++---- .../reservation/web/TimeControllerTest.kt | 6 +- .../theme/business/ThemeServiceTest.kt | 6 +- .../theme/web/ThemeControllerTest.kt | 2 +- 26 files changed, 131 insertions(+), 127 deletions(-) diff --git a/src/main/kotlin/roomescape/member/business/MemberService.kt b/src/main/kotlin/roomescape/member/business/MemberService.kt index 54fad18d..3be407ed 100644 --- a/src/main/kotlin/roomescape/member/business/MemberService.kt +++ b/src/main/kotlin/roomescape/member/business/MemberService.kt @@ -16,7 +16,7 @@ import roomescape.member.web.toRetrieveResponse class MemberService( private val memberRepository: MemberRepository ) { - fun findAll(): MemberRetrieveListResponse = MemberRetrieveListResponse( + fun findMembers(): MemberRetrieveListResponse = MemberRetrieveListResponse( memberRepository.findAll() .map { it.toRetrieveResponse() } .toList() diff --git a/src/main/kotlin/roomescape/member/docs/MemberAPI.kt b/src/main/kotlin/roomescape/member/docs/MemberAPI.kt index 03dbb527..9428cde2 100644 --- a/src/main/kotlin/roomescape/member/docs/MemberAPI.kt +++ b/src/main/kotlin/roomescape/member/docs/MemberAPI.kt @@ -20,5 +20,5 @@ interface MemberAPI { useReturnTypeSchema = true ) ) - fun findAll(): ResponseEntity> + fun findMembers(): ResponseEntity> } diff --git a/src/main/kotlin/roomescape/member/web/MemberController.kt b/src/main/kotlin/roomescape/member/web/MemberController.kt index 4e481188..b86d341e 100644 --- a/src/main/kotlin/roomescape/member/web/MemberController.kt +++ b/src/main/kotlin/roomescape/member/web/MemberController.kt @@ -13,8 +13,8 @@ class MemberController( ) : MemberAPI { @GetMapping("/members") - override fun findAll(): ResponseEntity> { - val response: MemberRetrieveListResponse = memberService.findAll() + override fun findMembers(): ResponseEntity> { + val response: MemberRetrieveListResponse = memberService.findMembers() return ResponseEntity.ok(CommonApiResponse(response)) } diff --git a/src/main/kotlin/roomescape/payment/infrastructure/client/TossPaymentClient.kt b/src/main/kotlin/roomescape/payment/infrastructure/client/TossPaymentClient.kt index ca72ba2e..e8ff0abe 100644 --- a/src/main/kotlin/roomescape/payment/infrastructure/client/TossPaymentClient.kt +++ b/src/main/kotlin/roomescape/payment/infrastructure/client/TossPaymentClient.kt @@ -30,7 +30,7 @@ class TossPaymentClient( private val tossPaymentClient: RestClient = tossPaymentClientBuilder.build() - fun confirmPayment(paymentRequest: PaymentApproveRequest): PaymentApproveResponse { + fun confirm(paymentRequest: PaymentApproveRequest): PaymentApproveResponse { logPaymentInfo(paymentRequest) return tossPaymentClient.post() @@ -46,7 +46,7 @@ class TossPaymentClient( ?: throw RoomescapeException(ErrorType.PAYMENT_SERVER_ERROR, HttpStatus.INTERNAL_SERVER_ERROR) } - fun cancelPayment(cancelRequest: PaymentCancelRequest): PaymentCancelResponse { + fun cancel(cancelRequest: PaymentCancelRequest): PaymentCancelResponse { logPaymentCancelInfo(cancelRequest) val param = Map.of("cancelReason", cancelRequest.cancelReason) diff --git a/src/main/kotlin/roomescape/reservation/business/ReservationService.kt b/src/main/kotlin/roomescape/reservation/business/ReservationService.kt index c263ac45..95f6d8ca 100644 --- a/src/main/kotlin/roomescape/reservation/business/ReservationService.kt +++ b/src/main/kotlin/roomescape/reservation/business/ReservationService.kt @@ -24,7 +24,7 @@ class ReservationService( ) { @Transactional(readOnly = true) - fun findAllReservations(): ReservationRetrieveListResponse { + fun findReservations(): ReservationRetrieveListResponse { val spec: Specification = ReservationSearchSpecification() .confirmed() .build() @@ -46,7 +46,7 @@ class ReservationService( return reservationRepository.findAll(spec).map { it.toRetrieveResponse() } } - fun removeReservationById(reservationId: Long, memberId: Long) { + fun deleteReservation(reservationId: Long, memberId: Long) { validateIsMemberAdmin(memberId) 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) 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) return addReservationWithoutPayment( request.themeId, @@ -163,7 +163,7 @@ class ReservationService( } @Transactional(readOnly = true) - fun findFilteredReservations( + fun searchReservations( themeId: Long?, memberId: Long?, dateFrom: LocalDate?, @@ -194,11 +194,11 @@ class ReservationService( } @Transactional(readOnly = true) - fun findMemberReservations(memberId: Long): MyReservationRetrieveListResponse { - return MyReservationRetrieveListResponse(reservationRepository.findMyReservations(memberId)) + fun findReservationsByMemberId(memberId: Long): MyReservationRetrieveListResponse { + return MyReservationRetrieveListResponse(reservationRepository.findAllById(memberId)) } - fun approveWaiting(reservationId: Long, memberId: Long) { + fun confirmWaiting(reservationId: Long, memberId: Long) { validateIsMemberAdmin(memberId) if (reservationRepository.isExistConfirmedReservation(reservationId)) { throw RoomescapeException(ErrorType.RESERVATION_DUPLICATED, HttpStatus.CONFLICT) @@ -206,7 +206,7 @@ class ReservationService( reservationRepository.updateStatusByReservationId(reservationId, ReservationStatus.CONFIRMED_PAYMENT_REQUIRED) } - fun cancelWaiting(reservationId: Long, memberId: Long) { + fun deleteWaiting(reservationId: Long, memberId: Long) { reservationRepository.findByIdOrNull(reservationId)?.takeIf { it.isWaiting() && it.isSameMember(memberId) }?.let { @@ -214,7 +214,7 @@ class ReservationService( } ?: throw throwReservationNotFound(reservationId) } - fun denyWaiting(reservationId: Long, memberId: Long) { + fun rejectWaiting(reservationId: Long, memberId: Long) { validateIsMemberAdmin(memberId) reservationRepository.findByIdOrNull(reservationId)?.takeIf { it.isWaiting() diff --git a/src/main/kotlin/roomescape/reservation/business/ReservationWithPaymentService.kt b/src/main/kotlin/roomescape/reservation/business/ReservationWithPaymentService.kt index 2125db1e..3d48e276 100644 --- a/src/main/kotlin/roomescape/reservation/business/ReservationWithPaymentService.kt +++ b/src/main/kotlin/roomescape/reservation/business/ReservationWithPaymentService.kt @@ -17,7 +17,7 @@ class ReservationWithPaymentService( private val reservationService: ReservationService, private val paymentService: PaymentService ) { - fun addReservationWithPayment( + fun createReservationAndPayment( request: ReservationCreateWithPaymentRequest, paymentInfo: PaymentApproveResponse, memberId: Long @@ -28,7 +28,7 @@ class ReservationWithPaymentService( .reservation } - fun saveCanceledPayment( + fun createCanceledPayment( cancelInfo: PaymentCancelResponse, approvedAt: OffsetDateTime, paymentKey: String @@ -36,12 +36,12 @@ class ReservationWithPaymentService( paymentService.createCanceledPayment(cancelInfo, approvedAt, paymentKey) } - fun removeReservationWithPayment( + fun deleteReservationAndPayment( reservationId: Long, memberId: Long ): PaymentCancelRequest { val paymentCancelRequest = paymentService.createCanceledPaymentByReservationId(reservationId) - reservationService.removeReservationById(reservationId, memberId) + reservationService.deleteReservation(reservationId, memberId) return paymentCancelRequest } diff --git a/src/main/kotlin/roomescape/reservation/business/TimeService.kt b/src/main/kotlin/roomescape/reservation/business/TimeService.kt index 48486d02..edde1923 100644 --- a/src/main/kotlin/roomescape/reservation/business/TimeService.kt +++ b/src/main/kotlin/roomescape/reservation/business/TimeService.kt @@ -28,10 +28,10 @@ class TimeService( ) @Transactional(readOnly = true) - fun findAll(): TimeRetrieveListResponse = timeRepository.findAll().toRetrieveListResponse() + fun findTimes(): TimeRetrieveListResponse = timeRepository.findAll().toRetrieveListResponse() @Transactional - fun create(timeCreateRequest: TimeCreateRequest): TimeCreateResponse { + fun createTime(timeCreateRequest: TimeCreateRequest): TimeCreateResponse { val startAt: LocalTime = timeCreateRequest.startAt if (timeRepository.existsByStartAt(startAt)) { @@ -46,7 +46,7 @@ class TimeService( } @Transactional - fun deleteById(id: Long) { + fun deleteTime(id: Long) { val time: TimeEntity = findById(id) reservationRepository.findByTime(time) .also { @@ -60,7 +60,7 @@ class TimeService( } @Transactional(readOnly = true) - fun findAllWithAvailability(date: LocalDate, themeId: Long): TimeWithAvailabilityListResponse { + fun findTimesWithAvailability(date: LocalDate, themeId: Long): TimeWithAvailabilityListResponse { val allTimes = timeRepository.findAll() val reservations: List = reservationRepository.findByDateAndThemeId(date, themeId) diff --git a/src/main/kotlin/roomescape/reservation/docs/ReservationAPI.kt b/src/main/kotlin/roomescape/reservation/docs/ReservationAPI.kt index ba82ee7b..0e0fe839 100644 --- a/src/main/kotlin/roomescape/reservation/docs/ReservationAPI.kt +++ b/src/main/kotlin/roomescape/reservation/docs/ReservationAPI.kt @@ -26,12 +26,12 @@ interface ReservationAPI { @Admin @Operation(summary = "모든 예약 정보 조회", tags = ["관리자 로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) - fun getAllReservations(): ResponseEntity> + fun findReservations(): ResponseEntity> @LoginRequired @Operation(summary = "자신의 예약 및 대기 조회", tags = ["로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) - fun getMemberReservations( + fun findReservationsByMemberId( @MemberId @Parameter(hidden = true) memberId: Long ): ResponseEntity> @@ -40,7 +40,7 @@ interface ReservationAPI { @ApiResponses( ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true) ) - fun getReservationBySearching( + fun searchReservations( @RequestParam(required = false) themeId: Long?, @RequestParam(required = false) memberId: Long?, @RequestParam(required = false) dateFrom: LocalDate?, @@ -52,7 +52,7 @@ interface ReservationAPI { @ApiResponses( ApiResponse(responseCode = "204", description = "성공"), ) - fun removeReservation( + fun cancelReservationByAdmin( @MemberId @Parameter(hidden = true) memberId: Long, @PathVariable("id") reservationId: Long ): ResponseEntity> @@ -67,7 +67,7 @@ interface ReservationAPI { headers = [Header(name = HttpHeaders.LOCATION, description = "생성된 예약 정보 URL", schema = Schema(example = "/reservations/1"))] ) ) - fun saveReservation( + fun createReservationWithPayment( @Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest, @MemberId @Parameter(hidden = true) memberId: Long ): ResponseEntity> @@ -82,14 +82,14 @@ interface ReservationAPI { headers = [Header(name = HttpHeaders.LOCATION, description = "생성된 예약 정보 URL", schema = Schema(example = "/reservations/1"))], ) ) - fun saveReservationByAdmin( + fun createReservationByAdmin( @Valid @RequestBody adminReservationRequest: AdminReservationCreateRequest, ): ResponseEntity> @Admin @Operation(summary = "모든 예약 대기 조회", tags = ["관리자 로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) - fun getAllWaiting(): ResponseEntity> + fun findAllWaiting(): ResponseEntity> @LoginRequired @Operation(summary = "예약 대기 신청", tags = ["로그인이 필요한 API"]) @@ -101,7 +101,7 @@ interface ReservationAPI { headers = [Header(name = HttpHeaders.LOCATION, description = "생성된 예약 정보 URL", schema = Schema(example = "/reservations/1"))] ) ) - fun saveWaiting( + fun createWaiting( @Valid @RequestBody waitingCreateRequest: WaitingCreateRequest, @MemberId @Parameter(hidden = true) memberId: Long, ): ResponseEntity> @@ -111,7 +111,7 @@ interface ReservationAPI { @ApiResponses( ApiResponse(responseCode = "204", description = "성공"), ) - fun deleteWaiting( + fun cancelWaitingByMember( @MemberId @Parameter(hidden = true) memberId: Long, @PathVariable("id") @Parameter(description = "예약 ID") reservationId: Long ): ResponseEntity> @@ -121,7 +121,7 @@ interface ReservationAPI { @ApiResponses( ApiResponse(responseCode = "200", description = "성공"), ) - fun approveWaiting( + fun confirmWaiting( @MemberId @Parameter(hidden = true) memberId: Long, @PathVariable("id") @Parameter(description = "예약 ID") reservationId: Long ): ResponseEntity> @@ -131,7 +131,7 @@ interface ReservationAPI { @ApiResponses( ApiResponse(responseCode = "204", description = "대기 중인 예약 거절 성공"), ) - fun denyWaiting( + fun rejectWaiting( @MemberId @Parameter(hidden = true) memberId: Long, @PathVariable("id") @Parameter(description = "예약 ID") reservationId: Long ): ResponseEntity> diff --git a/src/main/kotlin/roomescape/reservation/docs/TimeAPI.kt b/src/main/kotlin/roomescape/reservation/docs/TimeAPI.kt index 939c1522..067137f3 100644 --- a/src/main/kotlin/roomescape/reservation/docs/TimeAPI.kt +++ b/src/main/kotlin/roomescape/reservation/docs/TimeAPI.kt @@ -24,26 +24,26 @@ interface TimeAPI { @Admin @Operation(summary = "모든 시간 조회", tags = ["관리자 로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) - fun findAll(): ResponseEntity> + fun findTimes(): ResponseEntity> @Admin @Operation(summary = "시간 추가", tags = ["관리자 로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "201", description = "성공", useReturnTypeSchema = true)) - fun create( + fun createTime( @Valid @RequestBody timeCreateRequest: TimeCreateRequest, ): ResponseEntity> @Admin @Operation(summary = "시간 삭제", tags = ["관리자 로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "204", description = "성공", useReturnTypeSchema = true)) - fun deleteById( + fun deleteTime( @PathVariable id: Long ): ResponseEntity> @LoginRequired @Operation(summary = "예약 가능 여부를 포함한 모든 시간 조회", tags = ["로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) - fun findAllWithAvailability( + fun findTimesWithAvailability( @RequestParam date: LocalDate, @RequestParam themeId: Long ): ResponseEntity> diff --git a/src/main/kotlin/roomescape/reservation/infrastructure/persistence/ReservationRepository.kt b/src/main/kotlin/roomescape/reservation/infrastructure/persistence/ReservationRepository.kt index 68036ec8..4c563eea 100644 --- a/src/main/kotlin/roomescape/reservation/infrastructure/persistence/ReservationRepository.kt +++ b/src/main/kotlin/roomescape/reservation/infrastructure/persistence/ReservationRepository.kt @@ -58,5 +58,5 @@ interface ReservationRepository ON p.reservation = r WHERE r.member.id = :memberId """) - fun findMyReservations(memberId: Long): List + fun findAllById(memberId: Long): List } diff --git a/src/main/kotlin/roomescape/reservation/web/ReservationController.kt b/src/main/kotlin/roomescape/reservation/web/ReservationController.kt index ccdb85c5..47b4a720 100644 --- a/src/main/kotlin/roomescape/reservation/web/ReservationController.kt +++ b/src/main/kotlin/roomescape/reservation/web/ReservationController.kt @@ -24,46 +24,50 @@ class ReservationController( private val paymentClient: TossPaymentClient ) : ReservationAPI { @GetMapping("/reservations") - override fun getAllReservations(): ResponseEntity> { - val response: ReservationRetrieveListResponse = reservationService.findAllReservations() + override fun findReservations(): ResponseEntity> { + val response: ReservationRetrieveListResponse = reservationService.findReservations() return ResponseEntity.ok(CommonApiResponse(response)) } @GetMapping("/reservations-mine") - override fun getMemberReservations( + override fun findReservationsByMemberId( @MemberId @Parameter(hidden = true) memberId: Long ): ResponseEntity> { - val response: MyReservationRetrieveListResponse = reservationService.findMemberReservations(memberId) + val response: MyReservationRetrieveListResponse = reservationService.findReservationsByMemberId(memberId) return ResponseEntity.ok(CommonApiResponse(response)) } @GetMapping("/reservations/search") - override fun getReservationBySearching( + override fun searchReservations( @RequestParam(required = false) themeId: Long?, @RequestParam(required = false) memberId: Long?, @RequestParam(required = false) dateFrom: LocalDate?, @RequestParam(required = false) dateTo: LocalDate? ): ResponseEntity> { - val response: ReservationRetrieveListResponse = reservationService.findFilteredReservations(themeId, memberId, dateFrom, dateTo) + val response: ReservationRetrieveListResponse = reservationService.searchReservations( + themeId, + memberId, + dateFrom, + dateTo + ) return ResponseEntity.ok(CommonApiResponse(response)) } @DeleteMapping("/reservations/{id}") - override fun removeReservation( + override fun cancelReservationByAdmin( @MemberId @Parameter(hidden = true) memberId: Long, @PathVariable("id") reservationId: Long ): ResponseEntity> { if (reservationWithPaymentService.isNotPaidReservation(reservationId)) { - reservationService.removeReservationById(reservationId, memberId) + reservationService.deleteReservation(reservationId, memberId) return ResponseEntity.noContent().build() } - val paymentCancelRequest = reservationWithPaymentService.removeReservationWithPayment( - reservationId, memberId) - val paymentCancelResponse = paymentClient.cancelPayment(paymentCancelRequest) + val paymentCancelRequest = reservationWithPaymentService.deleteReservationAndPayment(reservationId, memberId) + val paymentCancelResponse = paymentClient.cancel(paymentCancelRequest) reservationWithPaymentService.updateCanceledTime(paymentCancelRequest.paymentKey, paymentCancelResponse.canceledAt) @@ -71,15 +75,15 @@ class ReservationController( } @PostMapping("/reservations") - override fun saveReservation( + override fun createReservationWithPayment( @Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest, @MemberId @Parameter(hidden = true) memberId: Long ): ResponseEntity> { val paymentRequest: PaymentApproveRequest = reservationCreateWithPaymentRequest.toPaymentApproveRequest() - val paymentResponse: PaymentApproveResponse = paymentClient.confirmPayment(paymentRequest) + val paymentResponse: PaymentApproveResponse = paymentClient.confirm(paymentRequest) try { - val reservationRetrieveResponse: ReservationRetrieveResponse = reservationWithPaymentService.addReservationWithPayment( + val reservationRetrieveResponse: ReservationRetrieveResponse = reservationWithPaymentService.createReservationAndPayment( reservationCreateWithPaymentRequest, paymentResponse, memberId @@ -89,37 +93,37 @@ class ReservationController( } catch (e: RoomescapeException) { val cancelRequest = PaymentCancelRequest(paymentRequest.paymentKey, paymentRequest.amount, e.message!!) - val paymentCancelResponse = paymentClient.cancelPayment(cancelRequest) - reservationWithPaymentService.saveCanceledPayment(paymentCancelResponse, paymentResponse.approvedAt, + val paymentCancelResponse = paymentClient.cancel(cancelRequest) + reservationWithPaymentService.createCanceledPayment(paymentCancelResponse, paymentResponse.approvedAt, paymentRequest.paymentKey) throw e } } @PostMapping("/reservations/admin") - override fun saveReservationByAdmin( + override fun createReservationByAdmin( @Valid @RequestBody adminReservationRequest: AdminReservationCreateRequest ): ResponseEntity> { val response: ReservationRetrieveResponse = - reservationService.addReservationByAdmin(adminReservationRequest) + reservationService.createReservationByAdmin(adminReservationRequest) return ResponseEntity.created(URI.create("/reservations/${response.id}")) .body(CommonApiResponse(response)) } @GetMapping("/reservations/waiting") - override fun getAllWaiting(): ResponseEntity> { + override fun findAllWaiting(): ResponseEntity> { val response: ReservationRetrieveListResponse = reservationService.findAllWaiting() return ResponseEntity.ok(CommonApiResponse(response)) } @PostMapping("/reservations/waiting") - override fun saveWaiting( + override fun createWaiting( @Valid @RequestBody waitingCreateRequest: WaitingCreateRequest, @MemberId @Parameter(hidden = true) memberId: Long, ): ResponseEntity> { - val response: ReservationRetrieveResponse = reservationService.addWaiting( + val response: ReservationRetrieveResponse = reservationService.createWaiting( waitingCreateRequest, memberId ) @@ -129,31 +133,31 @@ class ReservationController( } @DeleteMapping("/reservations/waiting/{id}") - override fun deleteWaiting( + override fun cancelWaitingByMember( @MemberId @Parameter(hidden = true) memberId: Long, @PathVariable("id") reservationId: Long ): ResponseEntity> { - reservationService.cancelWaiting(reservationId, memberId) + reservationService.deleteWaiting(reservationId, memberId) return ResponseEntity.noContent().build() } - @PostMapping("/reservations/waiting/{id}/approve") - override fun approveWaiting( + @PostMapping("/reservations/waiting/{id}/confirm") + override fun confirmWaiting( @MemberId @Parameter(hidden = true) memberId: Long, @PathVariable("id") reservationId: Long ): ResponseEntity> { - reservationService.approveWaiting(reservationId, memberId) + reservationService.confirmWaiting(reservationId, memberId) return ResponseEntity.ok().build() } - @PostMapping("/reservations/waiting/{id}/deny") - override fun denyWaiting( + @PostMapping("/reservations/waiting/{id}/reject") + override fun rejectWaiting( @MemberId @Parameter(hidden = true) memberId: Long, @PathVariable("id") reservationId: Long ): ResponseEntity> { - reservationService.denyWaiting(reservationId, memberId) + reservationService.rejectWaiting(reservationId, memberId) return ResponseEntity.noContent().build() } diff --git a/src/main/kotlin/roomescape/reservation/web/TimeController.kt b/src/main/kotlin/roomescape/reservation/web/TimeController.kt index 8c8043ca..d697bafa 100644 --- a/src/main/kotlin/roomescape/reservation/web/TimeController.kt +++ b/src/main/kotlin/roomescape/reservation/web/TimeController.kt @@ -15,17 +15,17 @@ class TimeController( ) : TimeAPI { @GetMapping("/times") - override fun findAll(): ResponseEntity> { - val response: TimeRetrieveListResponse = timeService.findAll() + override fun findTimes(): ResponseEntity> { + val response: TimeRetrieveListResponse = timeService.findTimes() return ResponseEntity.ok(CommonApiResponse(response)) } @PostMapping("/times") - override fun create( + override fun createTime( @Valid @RequestBody timeCreateRequest: TimeCreateRequest, ): ResponseEntity> { - val response: TimeCreateResponse = timeService.create(timeCreateRequest) + val response: TimeCreateResponse = timeService.createTime(timeCreateRequest) return ResponseEntity .created(URI.create("/times/${response.id}")) @@ -33,18 +33,18 @@ class TimeController( } @DeleteMapping("/times/{id}") - override fun deleteById(@PathVariable id: Long): ResponseEntity> { - timeService.deleteById(id) + override fun deleteTime(@PathVariable id: Long): ResponseEntity> { + timeService.deleteTime(id) return ResponseEntity.noContent().build() } - @GetMapping("/times/filter") - override fun findAllWithAvailability( + @GetMapping("/times/search") + override fun findTimesWithAvailability( @RequestParam date: LocalDate, @RequestParam themeId: Long ): ResponseEntity> { - val response: TimeWithAvailabilityListResponse = timeService.findAllWithAvailability(date, themeId) + val response: TimeWithAvailabilityListResponse = timeService.findTimesWithAvailability(date, themeId) return ResponseEntity.ok(CommonApiResponse(response)) } diff --git a/src/main/kotlin/roomescape/theme/business/ThemeService.kt b/src/main/kotlin/roomescape/theme/business/ThemeService.kt index a1b05146..91708c13 100644 --- a/src/main/kotlin/roomescape/theme/business/ThemeService.kt +++ b/src/main/kotlin/roomescape/theme/business/ThemeService.kt @@ -27,7 +27,7 @@ class ThemeService( ) @Transactional(readOnly = true) - fun findAll(): ThemesResponse = themeRepository.findAll() + fun findThemes(): ThemesResponse = themeRepository.findAll() .toResponse() @Transactional(readOnly = true) @@ -41,7 +41,7 @@ class ThemeService( } @Transactional - fun create(request: ThemeRequest): ThemeResponse { + fun createTheme(request: ThemeRequest): ThemeResponse { if (themeRepository.existsByName(request.name)) { throw RoomescapeException( ErrorType.THEME_DUPLICATED, @@ -60,7 +60,7 @@ class ThemeService( } @Transactional - fun deleteById(id: Long) { + fun deleteTheme(id: Long) { if (themeRepository.isReservedTheme(id)) { throw RoomescapeException( ErrorType.THEME_IS_USED_CONFLICT, diff --git a/src/main/kotlin/roomescape/theme/docs/ThemeAPI.kt b/src/main/kotlin/roomescape/theme/docs/ThemeAPI.kt index 60751c4f..d971884b 100644 --- a/src/main/kotlin/roomescape/theme/docs/ThemeAPI.kt +++ b/src/main/kotlin/roomescape/theme/docs/ThemeAPI.kt @@ -23,7 +23,7 @@ interface ThemeAPI { @LoginRequired @Operation(summary = "모든 테마 조회", description = "모든 테마를 조회합니다.", tags = ["로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) - fun findAll(): ResponseEntity> + fun findThemes(): ResponseEntity> @Operation(summary = "가장 많이 예약된 테마 조회") @ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) @@ -36,7 +36,7 @@ interface ThemeAPI { @ApiResponses( ApiResponse(responseCode = "201", description = "성공", useReturnTypeSchema = true), ) - fun create( + fun createTheme( @Valid @RequestBody request: ThemeRequest, ): ResponseEntity> @@ -45,7 +45,7 @@ interface ThemeAPI { @ApiResponses( ApiResponse(responseCode = "204", description = "성공", useReturnTypeSchema = true), ) - fun deleteById( + fun deleteTheme( @PathVariable id: Long ): ResponseEntity> } diff --git a/src/main/kotlin/roomescape/theme/web/ThemeController.kt b/src/main/kotlin/roomescape/theme/web/ThemeController.kt index 0c4f65fa..05820cb2 100644 --- a/src/main/kotlin/roomescape/theme/web/ThemeController.kt +++ b/src/main/kotlin/roomescape/theme/web/ThemeController.kt @@ -15,8 +15,8 @@ class ThemeController( ) : ThemeAPI { @GetMapping("/themes") - override fun findAll(): ResponseEntity> { - val response: ThemesResponse = themeService.findAll() + override fun findThemes(): ResponseEntity> { + val response: ThemesResponse = themeService.findThemes() return ResponseEntity.ok(CommonApiResponse(response)) } @@ -31,20 +31,20 @@ class ThemeController( } @PostMapping("/themes") - override fun create( + override fun createTheme( @RequestBody @Valid request: ThemeRequest ): ResponseEntity> { - val themeResponse: ThemeResponse = themeService.create(request) + val themeResponse: ThemeResponse = themeService.createTheme(request) return ResponseEntity.created(URI.create("/themes/${themeResponse.id}")) .body(CommonApiResponse(themeResponse)) } @DeleteMapping("/themes/{id}") - override fun deleteById( + override fun deleteTheme( @PathVariable id: Long ): ResponseEntity> { - themeService.deleteById(id) + themeService.deleteTheme(id) return ResponseEntity.noContent().build() } diff --git a/src/main/resources/static/js/user-reservation.js b/src/main/resources/static/js/user-reservation.js index 19cfcc92..500c016a 100644 --- a/src/main/resources/static/js/user-reservation.js +++ b/src/main/resources/static/js/user-reservation.js @@ -97,7 +97,7 @@ function checkDateAndTheme() { function fetchAvailableTimes(date, themeId) { - fetch(`/times/filter?date=${date}&themeId=${themeId}`, { // 예약 가능 시간 조회 API endpoint + fetch(`/times/search?date=${date}&themeId=${themeId}`, { // 예약 가능 시간 조회 API endpoint method: 'GET', headers: { 'Content-Type': 'application/json', diff --git a/src/main/resources/static/js/waiting.js b/src/main/resources/static/js/waiting.js index cea6f6f1..eaaf963e 100644 --- a/src/main/resources/static/js/waiting.js +++ b/src/main/resources/static/js/waiting.js @@ -38,7 +38,7 @@ function approve(event) { const row = event.target.closest('tr'); const id = row.cells[0].textContent; - const endpoint = `/reservations/waiting/${id}/approve` + const endpoint = `/reservations/waiting/${id}/confirm` return fetch(endpoint, { method: 'POST' }).then(response => { @@ -51,7 +51,7 @@ function deny(event) { const row = event.target.closest('tr'); const id = row.cells[0].textContent; - const endpoint = `/reservations/waiting/${id}/deny` + const endpoint = `/reservations/waiting/${id}/reject` return fetch(endpoint, { method: 'POST' }).then(response => { diff --git a/src/test/kotlin/roomescape/payment/infrastructure/client/TossPaymentClientTest.kt b/src/test/kotlin/roomescape/payment/infrastructure/client/TossPaymentClientTest.kt index 44556c32..b4f6e5c4 100644 --- a/src/test/kotlin/roomescape/payment/infrastructure/client/TossPaymentClientTest.kt +++ b/src/test/kotlin/roomescape/payment/infrastructure/client/TossPaymentClientTest.kt @@ -47,7 +47,7 @@ class TossPaymentClientTest( // when val paymentRequest = SampleTossPaymentConst.paymentRequest - val paymentResponse: PaymentApproveResponse = client.confirmPayment(paymentRequest) + val paymentResponse: PaymentApproveResponse = client.confirm(paymentRequest) assertSoftly(paymentResponse) { this.paymentKey shouldBe paymentRequest.paymentKey @@ -69,7 +69,7 @@ class TossPaymentClientTest( // then val exception = shouldThrow { - client.confirmPayment(paymentRequest) + client.confirm(paymentRequest) } assertSoftly(exception) { @@ -102,7 +102,7 @@ class TossPaymentClientTest( // when val cancelRequest: PaymentCancelRequest = SampleTossPaymentConst.cancelRequest - val cancelResponse: PaymentCancelResponse = client.cancelPayment(cancelRequest) + val cancelResponse: PaymentCancelResponse = client.cancel(cancelRequest) assertSoftly(cancelResponse) { this.cancelStatus shouldBe "DONE" @@ -124,7 +124,7 @@ class TossPaymentClientTest( // then val exception = shouldThrow { - client.cancelPayment(cancelRequest) + client.cancel(cancelRequest) } assertSoftly(exception) { diff --git a/src/test/kotlin/roomescape/reservation/business/ReservationServiceTest.kt b/src/test/kotlin/roomescape/reservation/business/ReservationServiceTest.kt index 9ce362f1..745cc89d 100644 --- a/src/test/kotlin/roomescape/reservation/business/ReservationServiceTest.kt +++ b/src/test/kotlin/roomescape/reservation/business/ReservationServiceTest.kt @@ -113,7 +113,7 @@ class ReservationServiceTest : FunSpec({ themeId = reservationRequest.themeId, timeId = reservationRequest.timeId ) - reservationService.addWaiting(waitingRequest, 1L) + reservationService.createWaiting(waitingRequest, 1L) }.also { it.errorType shouldBe ErrorType.HAS_RESERVATION_OR_WAITING } @@ -126,7 +126,7 @@ class ReservationServiceTest : FunSpec({ val endAt = startFrom.minusDays(1) shouldThrow { - reservationService.findFilteredReservations( + reservationService.searchReservations( null, null, startFrom, @@ -147,7 +147,7 @@ class ReservationServiceTest : FunSpec({ } returns member shouldThrow { - reservationService.approveWaiting(1L, member.id!!) + reservationService.confirmWaiting(1L, member.id!!) }.also { it.errorType shouldBe ErrorType.PERMISSION_DOES_NOT_EXIST } @@ -166,7 +166,7 @@ class ReservationServiceTest : FunSpec({ } returns true shouldThrow { - reservationService.approveWaiting(reservationId, member.id!!) + reservationService.confirmWaiting(reservationId, member.id!!) }.also { it.errorType shouldBe ErrorType.RESERVATION_DUPLICATED } diff --git a/src/test/kotlin/roomescape/reservation/business/ReservationWithPaymentServiceTest.kt b/src/test/kotlin/roomescape/reservation/business/ReservationWithPaymentServiceTest.kt index 90f329e9..dcbf069b 100644 --- a/src/test/kotlin/roomescape/reservation/business/ReservationWithPaymentServiceTest.kt +++ b/src/test/kotlin/roomescape/reservation/business/ReservationWithPaymentServiceTest.kt @@ -55,7 +55,7 @@ class ReservationWithPaymentServiceTest : FunSpec({ paymentService.createPayment(paymentApproveResponse, reservationEntity) } returns paymentEntity.toCreateResponse() - val result: ReservationRetrieveResponse = reservationWithPaymentService.addReservationWithPayment( + val result: ReservationRetrieveResponse = reservationWithPaymentService.createReservationAndPayment( request = reservationCreateWithPaymentRequest, paymentInfo = paymentApproveResponse, memberId = memberId @@ -85,10 +85,10 @@ class ReservationWithPaymentServiceTest : FunSpec({ } returns paymentCancelRequest every { - reservationService.removeReservationById(reservationEntity.id!!, reservationEntity.member.id!!) + reservationService.deleteReservation(reservationEntity.id!!, reservationEntity.member.id!!) } just Runs - val result: PaymentCancelRequest = reservationWithPaymentService.removeReservationWithPayment( + val result: PaymentCancelRequest = reservationWithPaymentService.deleteReservationAndPayment( reservationId = reservationEntity.id!!, memberId = reservationEntity.member.id!! ) diff --git a/src/test/kotlin/roomescape/reservation/business/TimeServiceTest.kt b/src/test/kotlin/roomescape/reservation/business/TimeServiceTest.kt index 2e39c9b4..83ed7417 100644 --- a/src/test/kotlin/roomescape/reservation/business/TimeServiceTest.kt +++ b/src/test/kotlin/roomescape/reservation/business/TimeServiceTest.kt @@ -46,7 +46,7 @@ class TimeServiceTest : FunSpec({ every { timeRepository.existsByStartAt(request.startAt) } returns true shouldThrow { - timeService.create(request) + timeService.createTime(request) }.apply { errorType shouldBe ErrorType.TIME_DUPLICATED httpStatus shouldBe HttpStatus.CONFLICT @@ -61,7 +61,7 @@ class TimeServiceTest : FunSpec({ every { timeRepository.findByIdOrNull(id) } returns null shouldThrow { - timeService.deleteById(id) + timeService.deleteTime(id) }.apply { errorType shouldBe ErrorType.TIME_NOT_FOUND httpStatus shouldBe HttpStatus.BAD_REQUEST @@ -77,7 +77,7 @@ class TimeServiceTest : FunSpec({ every { reservationRepository.findByTime(time) } returns listOf(mockk()) shouldThrow { - timeService.deleteById(id) + timeService.deleteTime(id) }.apply { errorType shouldBe ErrorType.TIME_IS_USED_CONFLICT httpStatus shouldBe HttpStatus.CONFLICT diff --git a/src/test/kotlin/roomescape/reservation/infrastructure/persistence/ReservationRepositoryTest.kt b/src/test/kotlin/roomescape/reservation/infrastructure/persistence/ReservationRepositoryTest.kt index 968a0073..f911261b 100644 --- a/src/test/kotlin/roomescape/reservation/infrastructure/persistence/ReservationRepositoryTest.kt +++ b/src/test/kotlin/roomescape/reservation/infrastructure/persistence/ReservationRepositoryTest.kt @@ -168,7 +168,7 @@ class ReservationRepositoryTest( entityManager.clear() } - val result: List = reservationRepository.findMyReservations(reservation.member.id!!) + val result: List = reservationRepository.findAllById(reservation.member.id!!) result shouldHaveSize 1 assertSoftly(result.first()) { @@ -179,7 +179,7 @@ class ReservationRepositoryTest( } test("결제 정보가 없다면 paymentKey와 amount는 null로 반환한다.") { - val result: List = reservationRepository.findMyReservations(reservation.member.id!!) + val result: List = reservationRepository.findAllById(reservation.member.id!!) result shouldHaveSize 1 assertSoftly(result.first()) { diff --git a/src/test/kotlin/roomescape/reservation/web/ReservationControllerTest.kt b/src/test/kotlin/roomescape/reservation/web/ReservationControllerTest.kt index 70f28bf8..cf9afdef 100644 --- a/src/test/kotlin/roomescape/reservation/web/ReservationControllerTest.kt +++ b/src/test/kotlin/roomescape/reservation/web/ReservationControllerTest.kt @@ -70,7 +70,7 @@ class ReservationControllerTest( ) every { - paymentClient.confirmPayment(any()) + paymentClient.confirm(any()) } returns paymentApproveResponse Given { @@ -94,7 +94,7 @@ class ReservationControllerTest( ) every { - paymentClient.confirmPayment(any()) + paymentClient.confirm(any()) } throws paymentException Given { @@ -118,7 +118,7 @@ class ReservationControllerTest( ) every { - paymentClient.confirmPayment(any()) + paymentClient.confirm(any()) } returns paymentApproveResponse // 예약 저장 과정에서 테마가 없는 예외 @@ -126,7 +126,7 @@ class ReservationControllerTest( val expectedException = RoomescapeException(ErrorType.THEME_NOT_FOUND, HttpStatus.BAD_REQUEST) every { - paymentClient.cancelPayment(any()) + paymentClient.cancel(any()) } returns PaymentFixture.createCancelResponse() val canceledPaymentSizeBeforeApiCall: Long = entityManager.createQuery( @@ -367,7 +367,7 @@ class ReservationControllerTest( } every { - paymentClient.cancelPayment(any()) + paymentClient.cancel(any()) } returns PaymentFixture.createCancelResponse() val canceledPaymentSizeBeforeApiCall: Long = entityManager.createQuery( @@ -561,14 +561,14 @@ class ReservationControllerTest( } } - context("POST /reservations/waiting/{id}/approve") { + context("POST /reservations/waiting/{id}/confirm") { test("관리자만 승인할 수 있다.") { login(MemberFixture.create(role = Role.MEMBER)) Given { port(port) }.When { - post("/reservations/waiting/1/approve") + post("/reservations/waiting/1/confirm") }.Then { statusCode(302) header(HttpHeaders.LOCATION, containsString("/login")) @@ -585,7 +585,7 @@ class ReservationControllerTest( Given { port(port) }.When { - post("/reservations/waiting/${reservation.id!!}/approve") + post("/reservations/waiting/${reservation.id!!}/confirm") }.Then { statusCode(200) } @@ -601,14 +601,14 @@ class ReservationControllerTest( } } - context("POST /reservations/waiting/{id}/deny") { + context("POST /reservations/waiting/{id}/reject") { test("관리자만 거절할 수 있다.") { login(MemberFixture.create(role = Role.MEMBER)) Given { port(port) }.When { - post("/reservations/waiting/1/deny") + post("/reservations/waiting/1/reject") }.Then { statusCode(302) header(HttpHeaders.LOCATION, containsString("/login")) @@ -625,7 +625,7 @@ class ReservationControllerTest( Given { port(port) }.When { - post("/reservations/waiting/${reservation.id!!}/deny") + post("/reservations/waiting/${reservation.id!!}/reject") }.Then { statusCode(204) } diff --git a/src/test/kotlin/roomescape/reservation/web/TimeControllerTest.kt b/src/test/kotlin/roomescape/reservation/web/TimeControllerTest.kt index 6883d893..1161b705 100644 --- a/src/test/kotlin/roomescape/reservation/web/TimeControllerTest.kt +++ b/src/test/kotlin/roomescape/reservation/web/TimeControllerTest.kt @@ -112,7 +112,7 @@ class TimeControllerTest( Then("정상 응답") { every { - timeService.create(request) + timeService.createTime(request) } returns TimeCreateResponse(id = 1, startAt = time) runPostTest( @@ -174,7 +174,7 @@ class TimeControllerTest( Then("정상 응답") { every { - timeService.deleteById(1L) + timeService.deleteTime(1L) } returns Unit runDeleteTest( @@ -272,7 +272,7 @@ class TimeControllerTest( val response = runGetTest( mockMvc = mockMvc, - endpoint = "/times/filter?date=$date&themeId=$themeId", + endpoint = "/times/search?date=$date&themeId=$themeId", ) { status { isOk() } content { diff --git a/src/test/kotlin/roomescape/theme/business/ThemeServiceTest.kt b/src/test/kotlin/roomescape/theme/business/ThemeServiceTest.kt index 4c29b180..c823c351 100644 --- a/src/test/kotlin/roomescape/theme/business/ThemeServiceTest.kt +++ b/src/test/kotlin/roomescape/theme/business/ThemeServiceTest.kt @@ -51,7 +51,7 @@ class ThemeServiceTest : FunSpec({ themeRepository.findAll() } returns themes - assertSoftly(themeService.findAll()) { + assertSoftly(themeService.findThemes()) { this.themes.size shouldBe themes.size this.themes[0].name shouldBe "t1" this.themes[1].name shouldBe "t2" @@ -68,7 +68,7 @@ class ThemeServiceTest : FunSpec({ } returns true val exception = shouldThrow { - themeService.create(ThemeRequest( + themeService.createTheme(ThemeRequest( name = name, description = "Description", thumbnail = "http://example.com/thumbnail.jpg" @@ -91,7 +91,7 @@ class ThemeServiceTest : FunSpec({ } returns true val exception = shouldThrow { - themeService.deleteById(themeId) + themeService.deleteTheme(themeId) } assertSoftly(exception) { diff --git a/src/test/kotlin/roomescape/theme/web/ThemeControllerTest.kt b/src/test/kotlin/roomescape/theme/web/ThemeControllerTest.kt index 34d8b1e3..817f5077 100644 --- a/src/test/kotlin/roomescape/theme/web/ThemeControllerTest.kt +++ b/src/test/kotlin/roomescape/theme/web/ThemeControllerTest.kt @@ -195,7 +195,7 @@ class ThemeControllerTest(mockMvc: MockMvc) : RoomescapeApiTest() { ) every { - themeService.create(request) + themeService.createTheme(request) } returns ThemeResponse( id = theme.id!!, name = theme.name,