오디션 #249
|
@ -1,6 +1,5 @@
|
||||||
package kr.co.vividnext.sodalive.admin.audition
|
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.CaseBuilder
|
||||||
import com.querydsl.core.types.dsl.DateTimePath
|
import com.querydsl.core.types.dsl.DateTimePath
|
||||||
import com.querydsl.core.types.dsl.Expressions
|
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 com.querydsl.jpa.impl.JPAQueryFactory
|
||||||
import kr.co.vividnext.sodalive.audition.Audition
|
import kr.co.vividnext.sodalive.audition.Audition
|
||||||
import kr.co.vividnext.sodalive.audition.QAudition.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.beans.factory.annotation.Value
|
||||||
import org.springframework.data.jpa.repository.JpaRepository
|
import org.springframework.data.jpa.repository.JpaRepository
|
||||||
import org.springframework.stereotype.Repository
|
import org.springframework.stereotype.Repository
|
||||||
|
@ -20,7 +18,7 @@ interface AdminAuditionRepository : JpaRepository<Audition, Long>, AdminAudition
|
||||||
interface AdminAuditionQueryRepository {
|
interface AdminAuditionQueryRepository {
|
||||||
fun getAuditionList(offset: Long, limit: Long): List<GetAuditionListItem>
|
fun getAuditionList(offset: Long, limit: Long): List<GetAuditionListItem>
|
||||||
fun getAuditionListCount(): Int
|
fun getAuditionListCount(): Int
|
||||||
fun getAuditionDetail(auditionId: Long): GetAuditionDetailResponse
|
fun getAuditionDetail(auditionId: Long): GetAuditionDetailRawData
|
||||||
}
|
}
|
||||||
|
|
||||||
class AdminAuditionQueryRepositoryImpl(
|
class AdminAuditionQueryRepositoryImpl(
|
||||||
|
@ -62,35 +60,19 @@ class AdminAuditionQueryRepositoryImpl(
|
||||||
.size
|
.size
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getAuditionDetail(auditionId: Long): GetAuditionDetailResponse {
|
override fun getAuditionDetail(auditionId: Long): GetAuditionDetailRawData {
|
||||||
return queryFactory
|
return queryFactory
|
||||||
.select(
|
.select(
|
||||||
QGetAuditionDetailResponse(
|
QGetAuditionDetailRawData(
|
||||||
audition.id,
|
audition.id,
|
||||||
audition.title,
|
audition.title,
|
||||||
audition.imagePath.prepend("/").prepend(coverImageHost),
|
audition.imagePath.prepend("/").prepend(coverImageHost),
|
||||||
audition.information,
|
audition.information,
|
||||||
audition.originalWorkUrl.coalesce(""),
|
audition.originalWorkUrl.coalesce("")
|
||||||
list(
|
|
||||||
QGetAuditionDetailRole(
|
|
||||||
auditionRole.id,
|
|
||||||
auditionRole.name,
|
|
||||||
auditionRole.imagePath.prepend("/").prepend(coverImageHost),
|
|
||||||
auditionRole.status
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
.from(audition)
|
.from(audition)
|
||||||
.leftJoin(auditionRole).on(auditionRole.audition.id.eq(audition.id))
|
|
||||||
.where(audition.id.eq(auditionId))
|
.where(audition.id.eq(auditionId))
|
||||||
.groupBy(
|
|
||||||
audition.id,
|
|
||||||
audition.title,
|
|
||||||
audition.imagePath,
|
|
||||||
audition.information,
|
|
||||||
audition.originalWorkUrl
|
|
||||||
)
|
|
||||||
.fetchFirst()
|
.fetchFirst()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package kr.co.vividnext.sodalive.admin.audition
|
package kr.co.vividnext.sodalive.admin.audition
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
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.audition.AuditionStatus
|
||||||
import kr.co.vividnext.sodalive.aws.s3.S3Uploader
|
import kr.co.vividnext.sodalive.aws.s3.S3Uploader
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
|
@ -19,6 +20,7 @@ class AdminAuditionService(
|
||||||
private val s3Uploader: S3Uploader,
|
private val s3Uploader: S3Uploader,
|
||||||
private val objectMapper: ObjectMapper,
|
private val objectMapper: ObjectMapper,
|
||||||
private val repository: AdminAuditionRepository,
|
private val repository: AdminAuditionRepository,
|
||||||
|
private val roleRepository: AdminAuditionRoleRepository,
|
||||||
|
|
||||||
@Value("\${cloud.aws.s3.bucket}")
|
@Value("\${cloud.aws.s3.bucket}")
|
||||||
private val bucket: String
|
private val bucket: String
|
||||||
|
@ -101,6 +103,16 @@ class AdminAuditionService(
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getAuditionDetail(auditionId: Long): GetAuditionDetailResponse {
|
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
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,16 +3,24 @@ package kr.co.vividnext.sodalive.admin.audition
|
||||||
import com.querydsl.core.annotations.QueryProjection
|
import com.querydsl.core.annotations.QueryProjection
|
||||||
import kr.co.vividnext.sodalive.audition.AuditionStatus
|
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 id: Long,
|
||||||
val title: String,
|
val title: String,
|
||||||
val imageUrl: String,
|
val imageUrl: String,
|
||||||
val information: String,
|
val information: String,
|
||||||
val originalWorkUrl: 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 id: Long,
|
||||||
val name: String,
|
val name: String,
|
||||||
val imageUrl: String,
|
val imageUrl: String,
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
package kr.co.vividnext.sodalive.admin.audition.role
|
package kr.co.vividnext.sodalive.admin.audition.role
|
||||||
|
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory
|
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.AuditionRole
|
||||||
|
import kr.co.vividnext.sodalive.audition.QAudition.audition
|
||||||
import kr.co.vividnext.sodalive.audition.QAuditionApplicant.auditionApplicant
|
import kr.co.vividnext.sodalive.audition.QAuditionApplicant.auditionApplicant
|
||||||
import kr.co.vividnext.sodalive.audition.QAuditionRole.auditionRole
|
import kr.co.vividnext.sodalive.audition.QAuditionRole.auditionRole
|
||||||
import kr.co.vividnext.sodalive.audition.QAuditionVote.auditionVote
|
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 AdminAuditionRoleRepository : JpaRepository<AuditionRole, Long>, AdminAuditionRoleQueryRepository
|
||||||
|
|
||||||
interface AdminAuditionRoleQueryRepository {
|
interface AdminAuditionRoleQueryRepository {
|
||||||
|
fun getAuditionRoleListByAuditionId(auditionId: Long): List<GetAuditionRoleListData>
|
||||||
fun getAuditionRoleDetail(auditionRoleId: Long): GetAuditionRoleDetailResponse
|
fun getAuditionRoleDetail(auditionRoleId: Long): GetAuditionRoleDetailResponse
|
||||||
fun getAuditionApplicantList(auditionRoleId: Long, offset: Long, limit: Long): List<GetAuditionRoleApplicantItem>
|
fun getAuditionApplicantList(auditionRoleId: Long, offset: Long, limit: Long): List<GetAuditionRoleApplicantItem>
|
||||||
fun getAuditionApplicantTotalCount(auditionRoleId: Long): Int
|
fun getAuditionApplicantTotalCount(auditionRoleId: Long): Int
|
||||||
|
@ -23,6 +27,22 @@ class AdminAuditionRoleQueryRepositoryImpl(
|
||||||
@Value("\${cloud.aws.cloud-front.host}")
|
@Value("\${cloud.aws.cloud-front.host}")
|
||||||
private val cloudfrontHost: String
|
private val cloudfrontHost: String
|
||||||
) : AdminAuditionRoleQueryRepository {
|
) : 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 {
|
override fun getAuditionRoleDetail(auditionRoleId: Long): GetAuditionRoleDetailResponse {
|
||||||
return queryFactory
|
return queryFactory
|
||||||
.select(
|
.select(
|
||||||
|
|
Loading…
Reference in New Issue