generated from pricelees/issue-pr-template
refactor: 인기 테마 조회 시 ORDER BY 위치 수정 및 동일 예약수인 경우 ID 오름차순 정렬 추가
This commit is contained in:
parent
8bb22a6a84
commit
7bda14984e
@ -32,10 +32,9 @@ interface ThemeRepository : JpaRepository<ThemeEntity, Long> {
|
|||||||
AND (s.date BETWEEN :startFrom AND :endAt)
|
AND (s.date BETWEEN :startFrom AND :endAt)
|
||||||
GROUP BY
|
GROUP BY
|
||||||
s.theme_id
|
s.theme_id
|
||||||
ORDER BY
|
|
||||||
reservation_count desc
|
|
||||||
LIMIT :count
|
LIMIT :count
|
||||||
) ranked_themes ON t.id = ranked_themes.theme_id
|
) ranked_themes ON t.id = ranked_themes.theme_id
|
||||||
|
ORDER BY ranked_themes.reservation_count DESC, t.id ASC
|
||||||
""",
|
""",
|
||||||
nativeQuery = true
|
nativeQuery = true
|
||||||
)
|
)
|
||||||
|
|||||||
@ -4,14 +4,15 @@ import com.sangdol.common.types.web.HttpStatus
|
|||||||
import com.sangdol.common.utils.KoreaDate
|
import com.sangdol.common.utils.KoreaDate
|
||||||
import com.sangdol.roomescape.supports.*
|
import com.sangdol.roomescape.supports.*
|
||||||
import com.sangdol.roomescape.theme.business.DateUtils
|
import com.sangdol.roomescape.theme.business.DateUtils
|
||||||
|
import com.sangdol.roomescape.theme.dto.ThemeInfoResponse
|
||||||
import com.sangdol.roomescape.theme.exception.ThemeErrorCode
|
import com.sangdol.roomescape.theme.exception.ThemeErrorCode
|
||||||
import com.sangdol.roomescape.theme.infrastructure.persistence.ThemeEntity
|
import com.sangdol.roomescape.theme.infrastructure.persistence.ThemeEntity
|
||||||
import com.sangdol.roomescape.theme.infrastructure.persistence.ThemeRepository
|
import com.sangdol.roomescape.theme.infrastructure.persistence.ThemeRepository
|
||||||
import com.sangdol.roomescape.theme.dto.ThemeInfoResponse
|
|
||||||
import com.sangdol.roomescape.theme.mapper.toEntity
|
import com.sangdol.roomescape.theme.mapper.toEntity
|
||||||
import com.sangdol.roomescape.user.infrastructure.persistence.UserEntity
|
import com.sangdol.roomescape.user.infrastructure.persistence.UserEntity
|
||||||
import io.kotest.matchers.collections.shouldContainInOrder
|
import io.kotest.matchers.collections.shouldContainInOrder
|
||||||
import io.kotest.matchers.collections.shouldHaveSize
|
import io.kotest.matchers.collections.shouldHaveSize
|
||||||
|
import io.kotest.matchers.comparables.shouldBeLessThan
|
||||||
import org.hamcrest.CoreMatchers.equalTo
|
import org.hamcrest.CoreMatchers.equalTo
|
||||||
import org.springframework.http.HttpMethod
|
import org.springframework.http.HttpMethod
|
||||||
import java.time.LocalDate
|
import java.time.LocalDate
|
||||||
@ -72,6 +73,35 @@ class ThemeApiTest(
|
|||||||
response.map { it.id }.shouldContainInOrder(expectedResult)
|
response.map { it.id }.shouldContainInOrder(expectedResult)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test("예약 수가 동일한 경우 ID 오름차순으로 정렬한다.") {
|
||||||
|
val expectedSize = initialize("두 개의 테마에 각각 1개의 확정 예약 생성") {
|
||||||
|
val user = testAuthUtil.defaultUserLogin()
|
||||||
|
(1..2).map { _ ->
|
||||||
|
dummyInitializer.createConfirmReservation(
|
||||||
|
user.first,
|
||||||
|
scheduleRequest = ScheduleFixture.createRequest.copy(
|
||||||
|
date = DateUtils.getSundayOfPreviousWeek(KoreaDate.today())
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}.size
|
||||||
|
|
||||||
|
runTest(
|
||||||
|
on = {
|
||||||
|
get("/themes/most-reserved?count=10")
|
||||||
|
},
|
||||||
|
expect = {
|
||||||
|
statusCode(HttpStatus.OK.value())
|
||||||
|
}
|
||||||
|
).also { res ->
|
||||||
|
val response: List<ThemeInfoResponse> =
|
||||||
|
ResponseParser.parseListResponse(res.extract().path("data.themes"))
|
||||||
|
|
||||||
|
response shouldHaveSize expectedSize
|
||||||
|
response[0].id shouldBeLessThan response[1].id
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user