[#18] 코드 정리 및 일부 컨벤션 통일 #19

Merged
pricelees merged 24 commits from refactor/#18 into main 2025-07-22 09:05:31 +00:00
26 changed files with 131 additions and 127 deletions
Showing only changes of commit 85328021a7 - Show all commits

View File

@ -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()

View File

@ -20,5 +20,5 @@ interface MemberAPI {
useReturnTypeSchema = true
)
)
fun findAll(): ResponseEntity<CommonApiResponse<MemberRetrieveListResponse>>
fun findMembers(): ResponseEntity<CommonApiResponse<MemberRetrieveListResponse>>
}

View File

@ -13,8 +13,8 @@ class MemberController(
) : MemberAPI {
@GetMapping("/members")
override fun findAll(): ResponseEntity<CommonApiResponse<MemberRetrieveListResponse>> {
val response: MemberRetrieveListResponse = memberService.findAll()
override fun findMembers(): ResponseEntity<CommonApiResponse<MemberRetrieveListResponse>> {
val response: MemberRetrieveListResponse = memberService.findMembers()
return ResponseEntity.ok(CommonApiResponse(response))
}

View File

@ -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<String, String>("cancelReason", cancelRequest.cancelReason)

View File

@ -24,7 +24,7 @@ class ReservationService(
) {
@Transactional(readOnly = true)
fun findAllReservations(): ReservationRetrieveListResponse {
fun findReservations(): ReservationRetrieveListResponse {
val spec: Specification<ReservationEntity> = 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()

View File

@ -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
}

View File

@ -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<ReservationEntity> = reservationRepository.findByDateAndThemeId(date, themeId)

View File

@ -26,12 +26,12 @@ interface ReservationAPI {
@Admin
@Operation(summary = "모든 예약 정보 조회", tags = ["관리자 로그인이 필요한 API"])
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
fun getAllReservations(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>>
fun findReservations(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>>
@LoginRequired
@Operation(summary = "자신의 예약 및 대기 조회", tags = ["로그인이 필요한 API"])
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
fun getMemberReservations(
fun findReservationsByMemberId(
@MemberId @Parameter(hidden = true) memberId: Long
): ResponseEntity<CommonApiResponse<MyReservationRetrieveListResponse>>
@ -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<CommonApiResponse<Unit>>
@ -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<CommonApiResponse<ReservationRetrieveResponse>>
@ -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<CommonApiResponse<ReservationRetrieveResponse>>
@Admin
@Operation(summary = "모든 예약 대기 조회", tags = ["관리자 로그인이 필요한 API"])
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
fun getAllWaiting(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>>
fun findAllWaiting(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>>
@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<CommonApiResponse<ReservationRetrieveResponse>>
@ -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<CommonApiResponse<Unit>>
@ -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<CommonApiResponse<Unit>>
@ -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<CommonApiResponse<Unit>>

View File

@ -24,26 +24,26 @@ interface TimeAPI {
@Admin
@Operation(summary = "모든 시간 조회", tags = ["관리자 로그인이 필요한 API"])
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
fun findAll(): ResponseEntity<CommonApiResponse<TimeRetrieveListResponse>>
fun findTimes(): ResponseEntity<CommonApiResponse<TimeRetrieveListResponse>>
@Admin
@Operation(summary = "시간 추가", tags = ["관리자 로그인이 필요한 API"])
@ApiResponses(ApiResponse(responseCode = "201", description = "성공", useReturnTypeSchema = true))
fun create(
fun createTime(
@Valid @RequestBody timeCreateRequest: TimeCreateRequest,
): ResponseEntity<CommonApiResponse<TimeCreateResponse>>
@Admin
@Operation(summary = "시간 삭제", tags = ["관리자 로그인이 필요한 API"])
@ApiResponses(ApiResponse(responseCode = "204", description = "성공", useReturnTypeSchema = true))
fun deleteById(
fun deleteTime(
@PathVariable id: Long
): ResponseEntity<CommonApiResponse<Unit>>
@LoginRequired
@Operation(summary = "예약 가능 여부를 포함한 모든 시간 조회", tags = ["로그인이 필요한 API"])
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
fun findAllWithAvailability(
fun findTimesWithAvailability(
@RequestParam date: LocalDate,
@RequestParam themeId: Long
): ResponseEntity<CommonApiResponse<TimeWithAvailabilityListResponse>>

View File

@ -58,5 +58,5 @@ interface ReservationRepository
ON p.reservation = r
WHERE r.member.id = :memberId
""")
fun findMyReservations(memberId: Long): List<MyReservationRetrieveResponse>
fun findAllById(memberId: Long): List<MyReservationRetrieveResponse>
}

View File

@ -24,46 +24,50 @@ class ReservationController(
private val paymentClient: TossPaymentClient
) : ReservationAPI {
@GetMapping("/reservations")
override fun getAllReservations(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>> {
val response: ReservationRetrieveListResponse = reservationService.findAllReservations()
override fun findReservations(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>> {
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<CommonApiResponse<MyReservationRetrieveListResponse>> {
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<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))
}
@DeleteMapping("/reservations/{id}")
override fun removeReservation(
override fun cancelReservationByAdmin(
@MemberId @Parameter(hidden = true) memberId: Long,
@PathVariable("id") reservationId: Long
): ResponseEntity<CommonApiResponse<Unit>> {
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<CommonApiResponse<ReservationRetrieveResponse>> {
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<CommonApiResponse<ReservationRetrieveResponse>> {
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<CommonApiResponse<ReservationRetrieveListResponse>> {
override fun findAllWaiting(): ResponseEntity<CommonApiResponse<ReservationRetrieveListResponse>> {
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<CommonApiResponse<ReservationRetrieveResponse>> {
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<CommonApiResponse<Unit>> {
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<CommonApiResponse<Unit>> {
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<CommonApiResponse<Unit>> {
reservationService.denyWaiting(reservationId, memberId)
reservationService.rejectWaiting(reservationId, memberId)
return ResponseEntity.noContent().build()
}

View File

@ -15,17 +15,17 @@ class TimeController(
) : TimeAPI {
@GetMapping("/times")
override fun findAll(): ResponseEntity<CommonApiResponse<TimeRetrieveListResponse>> {
val response: TimeRetrieveListResponse = timeService.findAll()
override fun findTimes(): ResponseEntity<CommonApiResponse<TimeRetrieveListResponse>> {
val response: TimeRetrieveListResponse = timeService.findTimes()
return ResponseEntity.ok(CommonApiResponse(response))
}
@PostMapping("/times")
override fun create(
override fun createTime(
@Valid @RequestBody timeCreateRequest: TimeCreateRequest,
): ResponseEntity<CommonApiResponse<TimeCreateResponse>> {
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<CommonApiResponse<Unit>> {
timeService.deleteById(id)
override fun deleteTime(@PathVariable id: Long): ResponseEntity<CommonApiResponse<Unit>> {
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<CommonApiResponse<TimeWithAvailabilityListResponse>> {
val response: TimeWithAvailabilityListResponse = timeService.findAllWithAvailability(date, themeId)
val response: TimeWithAvailabilityListResponse = timeService.findTimesWithAvailability(date, themeId)
return ResponseEntity.ok(CommonApiResponse(response))
}

View File

@ -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,

View File

@ -23,7 +23,7 @@ interface ThemeAPI {
@LoginRequired
@Operation(summary = "모든 테마 조회", description = "모든 테마를 조회합니다.", tags = ["로그인이 필요한 API"])
@ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true))
fun findAll(): ResponseEntity<CommonApiResponse<ThemesResponse>>
fun findThemes(): ResponseEntity<CommonApiResponse<ThemesResponse>>
@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<CommonApiResponse<ThemeResponse>>
@ -45,7 +45,7 @@ interface ThemeAPI {
@ApiResponses(
ApiResponse(responseCode = "204", description = "성공", useReturnTypeSchema = true),
)
fun deleteById(
fun deleteTheme(
@PathVariable id: Long
): ResponseEntity<CommonApiResponse<Unit>>
}

View File

@ -15,8 +15,8 @@ class ThemeController(
) : ThemeAPI {
@GetMapping("/themes")
override fun findAll(): ResponseEntity<CommonApiResponse<ThemesResponse>> {
val response: ThemesResponse = themeService.findAll()
override fun findThemes(): ResponseEntity<CommonApiResponse<ThemesResponse>> {
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<CommonApiResponse<ThemeResponse>> {
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<CommonApiResponse<Unit>> {
themeService.deleteById(id)
themeService.deleteTheme(id)
return ResponseEntity.noContent().build()
}

View File

@ -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',

View File

@ -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 => {

View File

@ -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<RoomescapeException> {
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<RoomescapeException> {
client.cancelPayment(cancelRequest)
client.cancel(cancelRequest)
}
assertSoftly(exception) {

View File

@ -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<RoomescapeException> {
reservationService.findFilteredReservations(
reservationService.searchReservations(
null,
null,
startFrom,
@ -147,7 +147,7 @@ class ReservationServiceTest : FunSpec({
} returns member
shouldThrow<RoomescapeException> {
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<RoomescapeException> {
reservationService.approveWaiting(reservationId, member.id!!)
reservationService.confirmWaiting(reservationId, member.id!!)
}.also {
it.errorType shouldBe ErrorType.RESERVATION_DUPLICATED
}

View File

@ -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!!
)

View File

@ -46,7 +46,7 @@ class TimeServiceTest : FunSpec({
every { timeRepository.existsByStartAt(request.startAt) } returns true
shouldThrow<RoomescapeException> {
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<RoomescapeException> {
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<RoomescapeException> {
timeService.deleteById(id)
timeService.deleteTime(id)
}.apply {
errorType shouldBe ErrorType.TIME_IS_USED_CONFLICT
httpStatus shouldBe HttpStatus.CONFLICT

View File

@ -168,7 +168,7 @@ class ReservationRepositoryTest(
entityManager.clear()
}
val result: List<MyReservationRetrieveResponse> = reservationRepository.findMyReservations(reservation.member.id!!)
val result: List<MyReservationRetrieveResponse> = reservationRepository.findAllById(reservation.member.id!!)
result shouldHaveSize 1
assertSoftly(result.first()) {
@ -179,7 +179,7 @@ class ReservationRepositoryTest(
}
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
assertSoftly(result.first()) {

View File

@ -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)
}

View File

@ -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 {

View File

@ -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<RoomescapeException> {
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<RoomescapeException> {
themeService.deleteById(themeId)
themeService.deleteTheme(themeId)
}
assertSoftly(exception) {

View File

@ -195,7 +195,7 @@ class ThemeControllerTest(mockMvc: MockMvc) : RoomescapeApiTest() {
)
every {
themeService.create(request)
themeService.createTheme(request)
} returns ThemeResponse(
id = theme.id!!,
name = theme.name,