관리자 오디션 상세 API
This commit is contained in:
parent
e29e71b8bd
commit
bb3263dd68
|
@ -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)
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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})",
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
Loading…
Reference in New Issue