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

Merged
pricelees merged 24 commits from refactor/#18 into main 2025-07-22 09:05:31 +00:00
86 changed files with 23 additions and 45 deletions
Showing only changes of commit ee38a01ad6 - Show all commits

View File

@ -5,11 +5,9 @@ import io.github.oshai.kotlinlogging.KotlinLogging
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.http.converter.HttpMessageNotReadableException
import org.springframework.web.HttpRequestMethodNotSupportedException
import org.springframework.web.bind.MethodArgumentNotValidException
import org.springframework.web.bind.annotation.ExceptionHandler
import org.springframework.web.bind.annotation.RestControllerAdvice
import org.springframework.web.client.ResourceAccessException
import roomescape.common.dto.response.CommonErrorResponse
@RestControllerAdvice

View File

@ -54,7 +54,6 @@ class PaymentService(
canceledAt = cancelInfo.canceledAt
).also { canceledPaymentRepository.save(it) }
@Transactional
fun createCanceledPaymentByReservationId(reservationId: Long): PaymentCancelRequest {
val paymentKey: String = paymentRepository.findPaymentKeyByReservationId(reservationId)

View File

@ -98,7 +98,6 @@ class ReservationService(
reservationRepository.save(it)
}.toRetrieveResponse()
private fun validateMemberAlreadyReserve(themeId: Long?, timeId: Long?, date: LocalDate?, memberId: Long?) {
val spec: Specification<ReservationEntity> = ReservationSearchSpecification()
.sameMemberId(memberId)

View File

@ -49,7 +49,6 @@ class ReservationWithPaymentService(
@Transactional(readOnly = true)
fun isNotPaidReservation(reservationId: Long): Boolean = !paymentService.isReservationPaid(reservationId)
fun updateCanceledTime(
paymentKey: String,
canceledAt: OffsetDateTime

View File

@ -27,7 +27,6 @@ class TimeService(
HttpStatus.BAD_REQUEST
)
@Transactional(readOnly = true)
fun findAll(): TimeRetrieveListResponse = timeRepository.findAll().toRetrieveListResponse()

View File

@ -12,10 +12,10 @@ import org.springframework.web.bind.annotation.RequestParam
import roomescape.auth.web.support.Admin
import roomescape.auth.web.support.LoginRequired
import roomescape.common.dto.response.CommonApiResponse
import roomescape.reservation.web.TimeWithAvailabilityListResponse
import roomescape.reservation.web.TimeCreateRequest
import roomescape.reservation.web.TimeCreateResponse
import roomescape.reservation.web.TimeRetrieveListResponse
import roomescape.reservation.web.TimeWithAvailabilityListResponse
import java.time.LocalDate
@Tag(name = "4. 예약 시간 API", description = "예약 시간을 조회 / 추가 / 삭제할 때 사용합니다.")

View File

@ -1,7 +1,6 @@
package roomescape.reservation.infrastructure.persistence
import com.fasterxml.jackson.annotation.JsonIgnore
import io.swagger.v3.oas.annotations.media.Schema
import jakarta.persistence.*
import roomescape.member.infrastructure.persistence.MemberEntity
import roomescape.theme.infrastructure.persistence.ThemeEntity

View File

@ -8,8 +8,8 @@ import roomescape.auth.web.support.MemberId
import roomescape.common.dto.response.CommonApiResponse
import roomescape.common.exception.RoomescapeException
import roomescape.payment.infrastructure.client.PaymentApproveRequest
import roomescape.payment.infrastructure.client.TossPaymentClient
import roomescape.payment.infrastructure.client.PaymentApproveResponse
import roomescape.payment.infrastructure.client.TossPaymentClient
import roomescape.payment.web.PaymentCancelRequest
import roomescape.reservation.business.ReservationService
import roomescape.reservation.business.ReservationWithPaymentService

View File

@ -30,7 +30,6 @@ class ThemeService(
fun findAll(): ThemesResponse = themeRepository.findAll()
.toResponse()
@Transactional(readOnly = true)
fun findMostReservedThemes(count: Int): ThemesResponse {
val today = LocalDate.now()

View File

@ -46,7 +46,6 @@ fun ThemeEntity.toResponse(): ThemeResponse = ThemeResponse(
thumbnail = this.thumbnail
)
@Schema(name = "테마 목록 조회 응답", description = "모든 테마 목록 조회 응답시 사용됩니다.")
data class ThemesResponse(
@field:Schema(description = "모든 테마 목록")

View File

@ -17,7 +17,6 @@ import roomescape.member.infrastructure.persistence.MemberRepository
import roomescape.util.JwtFixture
import roomescape.util.MemberFixture
class AuthServiceTest : BehaviorSpec({
val memberRepository: MemberRepository = mockk()
val memberService: MemberService = MemberService(memberRepository)

View File

@ -1,6 +1,5 @@
package roomescape.payment.infrastructure.client
import roomescape.payment.infrastructure.client.PaymentApproveRequest
import roomescape.payment.web.PaymentCancelRequest
import kotlin.math.roundToLong

View File

@ -12,8 +12,8 @@ import roomescape.reservation.web.MyReservationRetrieveResponse
import roomescape.theme.infrastructure.persistence.ThemeEntity
import roomescape.util.PaymentFixture
import roomescape.util.ReservationFixture
import roomescape.util.TimeFixture
import roomescape.util.ThemeFixture
import roomescape.util.TimeFixture
@DataJpaTest
class ReservationRepositoryTest(

View File

@ -10,8 +10,8 @@ import roomescape.member.infrastructure.persistence.MemberEntity
import roomescape.theme.infrastructure.persistence.ThemeEntity
import roomescape.util.MemberFixture
import roomescape.util.ReservationFixture
import roomescape.util.TimeFixture
import roomescape.util.ThemeFixture
import roomescape.util.TimeFixture
import java.time.LocalDate
@DataJpaTest

View File

@ -18,9 +18,9 @@ import roomescape.reservation.infrastructure.persistence.ReservationRepository
import roomescape.reservation.infrastructure.persistence.TimeEntity
import roomescape.reservation.infrastructure.persistence.TimeRepository
import roomescape.util.ReservationFixture
import roomescape.util.TimeFixture
import roomescape.util.RoomescapeApiTest
import roomescape.util.ThemeFixture
import roomescape.util.TimeFixture
import java.time.LocalDate
import java.time.LocalTime

View File

@ -7,8 +7,8 @@ import roomescape.reservation.infrastructure.persistence.TimeEntity
import roomescape.theme.infrastructure.persistence.ThemeEntity
import roomescape.util.MemberFixture
import roomescape.util.ReservationFixture
import roomescape.util.TimeFixture
import roomescape.util.ThemeFixture
import roomescape.util.TimeFixture
import java.time.LocalDate
import java.time.LocalTime

View File

@ -9,22 +9,15 @@ import org.hamcrest.Matchers.equalTo
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.boot.test.web.server.LocalServerPort
import org.springframework.transaction.support.TransactionTemplate
import roomescape.theme.business.ThemeService
import roomescape.theme.util.TestThemeCreateUtil
import roomescape.util.CleanerMode
import roomescape.util.DatabaseCleanerExtension
import java.time.LocalDate
import kotlin.random.Random
/**
* GET /themes/most-reserved-last-week API 테스트
* 상세 테스트는 Repository 테스트에서 진행
* 날짜 범위, 예약 수만 검증
*/
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class MostReservedThemeAPITest(
class MostReservedThemeApiTest(
@LocalServerPort val port: Int,
val themeService: ThemeService,
val transactionTemplate: TransactionTemplate,
val entityManager: EntityManager,
) : FunSpec({
@ -53,59 +46,55 @@ class MostReservedThemeAPITest(
}
}
context("가장 많이 예약된 테마를 조회할 때, ") {
context("지난 주 가장 많이 예약된 테마 API") {
val endpoint = "/themes/most-reserved-last-week"
test("갯수를 입력하지 않으면 10개를 반환한다.") {
test("count 파라미터가 없으면 10개를 반환한다") {
Given {
port(port)
} When {
get(endpoint)
} Then {
log().all()
statusCode(200)
body("data.themes.size()", equalTo(10))
}
}
test("입력된 갯수가 조회된 갯수보다 크면 조회된 갯수만큼 반환한다.") {
test("조회된 테마가 count보다 적으면 조회된 만큼 반환한다") {
val count = 15
Given {
port(port)
} When {
param("count", count)
get("/themes/most-reserved-last-week")
} When {
get(endpoint)
} Then {
log().all()
statusCode(200)
body("data.themes.size()", equalTo(10))
}
}
test("입력된 갯수가 조회된 갯수보다 작으면 입력된 갯수만큼 반환한다.") {
test("조회된 테마가 count보다 많으면 count만큼 반환한다") {
val count = 5
Given {
port(port)
} When {
param("count", count)
get("/themes/most-reserved-last-week")
} When {
get(endpoint)
} Then {
log().all()
statusCode(200)
body("data.themes.size()", equalTo(count))
}
}
test("7일 전 부터 1일 전 까지 예약된 테마를 대상으로 한다.") {
// 현재 저장된 데이터는 지난 7일간 예약된 테마 10개와 8일 전 예약된 테마 1개
// 8일 전 예약된 테마는 제외되어야 하므로, 10개가 조회되어야 한다.
test("지난 7일 동안의 예약만 집계한다") {
// 8일 전에 예약된 테마는 집계에서 제외되어야 한다.
val count = 11
Given {
port(port)
} When {
param("count", count)
get("/themes/most-reserved-last-week")
} When {
get(endpoint)
} Then {
log().all()
statusCode(200)
body("data.themes.size()", equalTo(10))
}

View File

@ -4,10 +4,10 @@ import roomescape.auth.infrastructure.jwt.JwtHandler
import roomescape.auth.web.LoginRequest
import roomescape.member.infrastructure.persistence.MemberEntity
import roomescape.member.infrastructure.persistence.Role
import roomescape.payment.infrastructure.persistence.CanceledPaymentEntity
import roomescape.payment.infrastructure.persistence.PaymentEntity
import roomescape.payment.infrastructure.client.PaymentApproveRequest
import roomescape.payment.infrastructure.client.PaymentApproveResponse
import roomescape.payment.infrastructure.persistence.CanceledPaymentEntity
import roomescape.payment.infrastructure.persistence.PaymentEntity
import roomescape.payment.web.PaymentCancelRequest
import roomescape.payment.web.PaymentCancelResponse
import roomescape.reservation.infrastructure.persistence.ReservationEntity