오디션 상세

- 오디션 데이터와 오디션 배역 리스트 데이터 호출을 분리
This commit is contained in:
Klaus 2024-12-27 23:19:21 +09:00
parent 4f0a882b9e
commit c9e90974bd
4 changed files with 48 additions and 26 deletions

View File

@ -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<Audition, Long>, AdminAudition
interface AdminAuditionQueryRepository {
fun getAuditionList(offset: Long, limit: Long): List<GetAuditionListItem>
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()
}

View File

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

View File

@ -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<GetAuditionDetailRole> = emptyList()
val roleList: List<GetAuditionRoleListData>
)
data class GetAuditionDetailRole @QueryProjection constructor(
data class GetAuditionRoleListData @QueryProjection constructor(
val id: Long,
val name: String,
val imageUrl: String,

View File

@ -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<AuditionRole, Long>, AdminAuditionRoleQueryRepository
interface AdminAuditionRoleQueryRepository {
fun getAuditionRoleListByAuditionId(auditionId: Long): List<GetAuditionRoleListData>
fun getAuditionRoleDetail(auditionRoleId: Long): GetAuditionRoleDetailResponse
fun getAuditionApplicantList(auditionRoleId: Long, offset: Long, limit: Long): List<GetAuditionRoleApplicantItem>
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<GetAuditionRoleListData> {
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(