diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/AdminAuditionController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/AdminAuditionController.kt index ab1e9ef..ebba99c 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/AdminAuditionController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/AdminAuditionController.kt @@ -4,6 +4,7 @@ import kr.co.vividnext.sodalive.common.ApiResponse import org.springframework.data.domain.Pageable import org.springframework.security.access.prepost.PreAuthorize import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.PutMapping import org.springframework.web.bind.annotation.RequestMapping @@ -34,4 +35,9 @@ class AdminAuditionController(private val service: AdminAuditionService) { limit = pageable.pageSize.toLong() ) ) + + @GetMapping("/{id}") + fun getAuditionDetail(@PathVariable id: Long) = ApiResponse.ok( + service.getAuditionDetail(auditionId = id) + ) } 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 f548802..6e0ad41 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,11 +1,13 @@ package kr.co.vividnext.sodalive.admin.audition +import com.querydsl.core.group.GroupBy.list import com.querydsl.core.types.dsl.DateTimePath import com.querydsl.core.types.dsl.Expressions 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 @@ -17,6 +19,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 } class AdminAuditionQueryRepositoryImpl( @@ -54,6 +57,30 @@ class AdminAuditionQueryRepositoryImpl( .size } + override fun getAuditionDetail(auditionId: Long): GetAuditionDetailResponse { + return queryFactory + .select( + QGetAuditionDetailResponse( + audition.id, + audition.title, + audition.imagePath.prepend("/").prepend(coverImageHost), + audition.information, + audition.originalWorkUrl, + list( + QGetAuditionDetailRole( + auditionRole.id, + auditionRole.name, + auditionRole.imagePath.prepend("/").prepend(coverImageHost) + ) + ) + ) + ) + .from(audition) + .leftJoin(auditionRole).on(auditionRole.audition.id.eq(audition.id)) + .where(audition.id.eq(auditionId)) + .fetchFirst() + } + private fun getFormattedDate(dateTimePath: DateTimePath<LocalDateTime>): StringTemplate { return Expressions.stringTemplate( "DATE_FORMAT({0}, {1})", 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 bfec948..5127a00 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 @@ -87,4 +87,8 @@ class AdminAuditionService( val items = repository.getAuditionList(offset = offset, limit = limit) return GetAuditionListResponse(totalCount, items) } + + fun getAuditionDetail(auditionId: Long): GetAuditionDetailResponse { + return repository.getAuditionDetail(auditionId = auditionId) + } } 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 new file mode 100644 index 0000000..803aca6 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/GetAuditionDetailResponse.kt @@ -0,0 +1,18 @@ +package kr.co.vividnext.sodalive.admin.audition + +import com.querydsl.core.annotations.QueryProjection + +data class GetAuditionDetailResponse @QueryProjection constructor( + val id: Long, + val title: String, + val imageUrl: String, + val information: String, + val originalWorkUrl: String, + val roleList: List<GetAuditionDetailRole> = listOf() +) + +data class GetAuditionDetailRole @QueryProjection constructor( + val id: Long, + val name: String, + val imageUrl: String +)