diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/AdminAuditionRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/AdminAuditionRepository.kt index 7bf3b17..a457e59 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/AdminAuditionRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/AdminAuditionRepository.kt @@ -1,6 +1,5 @@ package kr.co.vividnext.sodalive.admin.audition -import com.querydsl.core.group.GroupBy.list import com.querydsl.core.types.dsl.CaseBuilder import com.querydsl.core.types.dsl.DateTimePath import com.querydsl.core.types.dsl.Expressions @@ -8,7 +7,6 @@ import com.querydsl.core.types.dsl.StringTemplate import com.querydsl.jpa.impl.JPAQueryFactory import kr.co.vividnext.sodalive.audition.Audition import kr.co.vividnext.sodalive.audition.QAudition.audition -import kr.co.vividnext.sodalive.audition.QAuditionRole.auditionRole import org.springframework.beans.factory.annotation.Value import org.springframework.data.jpa.repository.JpaRepository import org.springframework.stereotype.Repository @@ -20,7 +18,7 @@ interface AdminAuditionRepository : JpaRepository, AdminAudition interface AdminAuditionQueryRepository { fun getAuditionList(offset: Long, limit: Long): List fun getAuditionListCount(): Int - fun getAuditionDetail(auditionId: Long): GetAuditionDetailResponse + fun getAuditionDetail(auditionId: Long): GetAuditionDetailRawData } class AdminAuditionQueryRepositoryImpl( @@ -62,35 +60,19 @@ class AdminAuditionQueryRepositoryImpl( .size } - override fun getAuditionDetail(auditionId: Long): GetAuditionDetailResponse { + override fun getAuditionDetail(auditionId: Long): GetAuditionDetailRawData { return queryFactory .select( - QGetAuditionDetailResponse( + QGetAuditionDetailRawData( audition.id, audition.title, audition.imagePath.prepend("/").prepend(coverImageHost), audition.information, - audition.originalWorkUrl.coalesce(""), - list( - QGetAuditionDetailRole( - auditionRole.id, - auditionRole.name, - auditionRole.imagePath.prepend("/").prepend(coverImageHost), - auditionRole.status - ) - ) + audition.originalWorkUrl.coalesce("") ) ) .from(audition) - .leftJoin(auditionRole).on(auditionRole.audition.id.eq(audition.id)) .where(audition.id.eq(auditionId)) - .groupBy( - audition.id, - audition.title, - audition.imagePath, - audition.information, - audition.originalWorkUrl - ) .fetchFirst() } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/AdminAuditionService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/AdminAuditionService.kt index 6358a23..774b5b8 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/AdminAuditionService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/AdminAuditionService.kt @@ -1,6 +1,7 @@ package kr.co.vividnext.sodalive.admin.audition import com.fasterxml.jackson.databind.ObjectMapper +import kr.co.vividnext.sodalive.admin.audition.role.AdminAuditionRoleRepository import kr.co.vividnext.sodalive.audition.AuditionStatus import kr.co.vividnext.sodalive.aws.s3.S3Uploader import kr.co.vividnext.sodalive.common.SodaException @@ -19,6 +20,7 @@ class AdminAuditionService( private val s3Uploader: S3Uploader, private val objectMapper: ObjectMapper, private val repository: AdminAuditionRepository, + private val roleRepository: AdminAuditionRoleRepository, @Value("\${cloud.aws.s3.bucket}") private val bucket: String @@ -101,6 +103,16 @@ class AdminAuditionService( } fun getAuditionDetail(auditionId: Long): GetAuditionDetailResponse { - return repository.getAuditionDetail(auditionId = auditionId) + val auditionDetail = repository.getAuditionDetail(auditionId = auditionId) + val roleList = roleRepository.getAuditionRoleListByAuditionId(auditionId = auditionId) + + return GetAuditionDetailResponse( + id = auditionDetail.id, + title = auditionDetail.title, + imageUrl = auditionDetail.imageUrl, + information = auditionDetail.information, + originalWorkUrl = auditionDetail.originalWorkUrl, + roleList = roleList + ) } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/GetAuditionDetailResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/GetAuditionDetailResponse.kt index 9ac5a2b..0071dd2 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/GetAuditionDetailResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/GetAuditionDetailResponse.kt @@ -3,16 +3,24 @@ package kr.co.vividnext.sodalive.admin.audition import com.querydsl.core.annotations.QueryProjection import kr.co.vividnext.sodalive.audition.AuditionStatus -data class GetAuditionDetailResponse @QueryProjection constructor( +data class GetAuditionDetailRawData @QueryProjection constructor( + val id: Long, + val title: String, + val imageUrl: String, + val information: String, + val originalWorkUrl: String +) + +data class GetAuditionDetailResponse( val id: Long, val title: String, val imageUrl: String, val information: String, val originalWorkUrl: String, - val roleList: List = emptyList() + val roleList: List ) -data class GetAuditionDetailRole @QueryProjection constructor( +data class GetAuditionRoleListData @QueryProjection constructor( val id: Long, val name: String, val imageUrl: String, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/AdminAuditionRoleRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/AdminAuditionRoleRepository.kt index c4fdbac..0c71c7f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/AdminAuditionRoleRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/AdminAuditionRoleRepository.kt @@ -1,7 +1,10 @@ package kr.co.vividnext.sodalive.admin.audition.role import com.querydsl.jpa.impl.JPAQueryFactory +import kr.co.vividnext.sodalive.admin.audition.GetAuditionRoleListData +import kr.co.vividnext.sodalive.admin.audition.QGetAuditionRoleListData import kr.co.vividnext.sodalive.audition.AuditionRole +import kr.co.vividnext.sodalive.audition.QAudition.audition import kr.co.vividnext.sodalive.audition.QAuditionApplicant.auditionApplicant import kr.co.vividnext.sodalive.audition.QAuditionRole.auditionRole import kr.co.vividnext.sodalive.audition.QAuditionVote.auditionVote @@ -12,6 +15,7 @@ import org.springframework.data.jpa.repository.JpaRepository interface AdminAuditionRoleRepository : JpaRepository, AdminAuditionRoleQueryRepository interface AdminAuditionRoleQueryRepository { + fun getAuditionRoleListByAuditionId(auditionId: Long): List fun getAuditionRoleDetail(auditionRoleId: Long): GetAuditionRoleDetailResponse fun getAuditionApplicantList(auditionRoleId: Long, offset: Long, limit: Long): List fun getAuditionApplicantTotalCount(auditionRoleId: Long): Int @@ -23,6 +27,22 @@ class AdminAuditionRoleQueryRepositoryImpl( @Value("\${cloud.aws.cloud-front.host}") private val cloudfrontHost: String ) : AdminAuditionRoleQueryRepository { + override fun getAuditionRoleListByAuditionId(auditionId: Long): List { + return queryFactory + .select( + QGetAuditionRoleListData( + auditionRole.id, + auditionRole.name, + auditionRole.imagePath.prepend("/").prepend(cloudfrontHost), + auditionRole.status + ) + ) + .from(auditionRole) + .innerJoin(auditionRole.audition, audition) + .where(auditionRole.audition.id.eq(auditionId)) + .fetch() + } + override fun getAuditionRoleDetail(auditionRoleId: Long): GetAuditionRoleDetailResponse { return queryFactory .select(