refactor: ReservationSummaryResponse -> ReservationOverviewResponse 클래스명 수정 및 schedule에 추가된 ScheduleOverviewResponse 조회 적용

This commit is contained in:
이상진 2025-09-19 18:01:01 +09:00
parent 5a6f7c4763
commit 70b9c58c15
5 changed files with 29 additions and 23 deletions

View File

@ -17,10 +17,9 @@ import roomescape.reservation.infrastructure.persistence.*
import roomescape.reservation.web.* import roomescape.reservation.web.*
import roomescape.schedule.business.ScheduleService import roomescape.schedule.business.ScheduleService
import roomescape.schedule.infrastructure.persistence.ScheduleStatus import roomescape.schedule.infrastructure.persistence.ScheduleStatus
import roomescape.schedule.web.ScheduleSummaryResponse import roomescape.schedule.web.ScheduleOverviewResponse
import roomescape.schedule.web.ScheduleUpdateRequest import roomescape.schedule.web.ScheduleUpdateRequest
import roomescape.theme.business.ThemeService import roomescape.theme.business.ThemeService
import roomescape.theme.web.ThemeInfoResponse
import roomescape.user.business.UserService import roomescape.user.business.UserService
import roomescape.user.web.UserContactResponse import roomescape.user.web.UserContactResponse
import java.time.LocalDate import java.time.LocalDate
@ -90,7 +89,7 @@ class ReservationService(
} }
@Transactional(readOnly = true) @Transactional(readOnly = true)
fun findUserSummaryReservation(user: CurrentUserContext): ReservationSummaryListResponse { fun findAllUserReservationOverview(user: CurrentUserContext): ReservationOverviewListResponse {
log.info { "[ReservationService.findSummaryByMemberId] 예약 조회 시작: userId=${user.id}" } log.info { "[ReservationService.findSummaryByMemberId] 예약 조회 시작: userId=${user.id}" }
val reservations: List<ReservationEntity> = reservationRepository.findAllByUserIdAndStatusIsIn( val reservations: List<ReservationEntity> = reservationRepository.findAllByUserIdAndStatusIsIn(
@ -98,17 +97,9 @@ class ReservationService(
statuses = listOf(ReservationStatus.CONFIRMED, ReservationStatus.CANCELED) statuses = listOf(ReservationStatus.CONFIRMED, ReservationStatus.CANCELED)
) )
return ReservationSummaryListResponse(reservations.map { return ReservationOverviewListResponse(reservations.map {
val schedule: ScheduleSummaryResponse = scheduleService.findSummaryById(it.scheduleId) val schedule: ScheduleOverviewResponse = scheduleService.findScheduleOverviewById(it.scheduleId)
val theme: ThemeInfoResponse = themeService.findInfoById(schedule.themeId) it.toOverviewResponse(schedule)
ReservationSummaryResponse(
id = it.id,
themeName = theme.name,
date = schedule.date,
startAt = schedule.time,
status = it.status
)
}).also { }).also {
log.info { "[ReservationService.findSummaryByMemberId] ${it.reservations.size}개의 예약 조회 완료: userId=${user.id}" } log.info { "[ReservationService.findSummaryByMemberId] ${it.reservations.size}개의 예약 조회 완료: userId=${user.id}" }
} }

View File

@ -50,7 +50,7 @@ interface ReservationAPI {
@ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true)) @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true))
fun findSummaryByMemberId( fun findSummaryByMemberId(
@User user: CurrentUserContext, @User user: CurrentUserContext,
): ResponseEntity<CommonApiResponse<ReservationSummaryListResponse>> ): ResponseEntity<CommonApiResponse<ReservationOverviewListResponse>>
@UserOnly @UserOnly
@Operation(summary = "특정 예약에 대한 상세 조회") @Operation(summary = "특정 예약에 대한 상세 조회")

View File

@ -57,8 +57,8 @@ class ReservationController(
@GetMapping("/summary") @GetMapping("/summary")
override fun findSummaryByMemberId( override fun findSummaryByMemberId(
@User user: CurrentUserContext, @User user: CurrentUserContext,
): ResponseEntity<CommonApiResponse<ReservationSummaryListResponse>> { ): ResponseEntity<CommonApiResponse<ReservationOverviewListResponse>> {
val response = reservationService.findUserSummaryReservation(user) val response = reservationService.findAllUserReservationOverview(user)
return ResponseEntity.ok(CommonApiResponse(response)) return ResponseEntity.ok(CommonApiResponse(response))
} }

View File

@ -4,6 +4,7 @@ import jakarta.validation.constraints.NotEmpty
import roomescape.payment.web.PaymentWithDetailResponse import roomescape.payment.web.PaymentWithDetailResponse
import roomescape.reservation.infrastructure.persistence.ReservationEntity import roomescape.reservation.infrastructure.persistence.ReservationEntity
import roomescape.reservation.infrastructure.persistence.ReservationStatus import roomescape.reservation.infrastructure.persistence.ReservationStatus
import roomescape.schedule.web.ScheduleOverviewResponse
import roomescape.user.web.UserContactResponse import roomescape.user.web.UserContactResponse
import java.time.LocalDate import java.time.LocalDate
import java.time.LocalDateTime import java.time.LocalDateTime
@ -34,16 +35,30 @@ data class PendingReservationCreateResponse(
val id: Long val id: Long
) )
data class ReservationSummaryResponse( data class ReservationOverviewResponse(
val id: Long, val id: Long,
val storeName: String,
val themeName: String, val themeName: String,
val date: LocalDate, val date: LocalDate,
val startAt: LocalTime, val startFrom: LocalTime,
val endAt: LocalTime,
val status: ReservationStatus val status: ReservationStatus
) )
data class ReservationSummaryListResponse( fun ReservationEntity.toOverviewResponse(
val reservations: List<ReservationSummaryResponse> schedule: ScheduleOverviewResponse
) = ReservationOverviewResponse(
id = this.id,
storeName = schedule.storeName,
themeName = schedule.themeName,
date = schedule.date,
startFrom = schedule.startFrom,
endAt = schedule.endAt,
status = this.status
)
data class ReservationOverviewListResponse(
val reservations: List<ReservationOverviewResponse>
) )
data class ReservationDetailResponse( data class ReservationDetailResponse(

View File

@ -21,7 +21,7 @@ import roomescape.reservation.infrastructure.persistence.ReservationRepository
import roomescape.reservation.infrastructure.persistence.ReservationStatus import roomescape.reservation.infrastructure.persistence.ReservationStatus
import roomescape.reservation.web.MostReservedThemeIdListResponse import roomescape.reservation.web.MostReservedThemeIdListResponse
import roomescape.reservation.web.ReservationCancelRequest import roomescape.reservation.web.ReservationCancelRequest
import roomescape.reservation.web.ReservationSummaryResponse import roomescape.reservation.web.ReservationOverviewResponse
import roomescape.schedule.infrastructure.persistence.ScheduleEntity import roomescape.schedule.infrastructure.persistence.ScheduleEntity
import roomescape.schedule.infrastructure.persistence.ScheduleRepository import roomescape.schedule.infrastructure.persistence.ScheduleRepository
import roomescape.schedule.infrastructure.persistence.ScheduleStatus import roomescape.schedule.infrastructure.persistence.ScheduleStatus
@ -349,7 +349,7 @@ class ReservationApiTest(
) )
} }
).also { response -> ).also { response ->
ResponseParser.parseListResponse<ReservationSummaryResponse>( ResponseParser.parseListResponse<ReservationOverviewResponse>(
response.extract().path("data.reservations") response.extract().path("data.reservations")
).forEach { ).forEach {
it.status shouldBe ReservationStatus.CONFIRMED it.status shouldBe ReservationStatus.CONFIRMED