관리자 오디션 상세 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.data.domain.Pageable
|
||||||
import org.springframework.security.access.prepost.PreAuthorize
|
import org.springframework.security.access.prepost.PreAuthorize
|
||||||
import org.springframework.web.bind.annotation.GetMapping
|
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.PostMapping
|
||||||
import org.springframework.web.bind.annotation.PutMapping
|
import org.springframework.web.bind.annotation.PutMapping
|
||||||
import org.springframework.web.bind.annotation.RequestMapping
|
import org.springframework.web.bind.annotation.RequestMapping
|
||||||
|
@ -34,4 +35,9 @@ class AdminAuditionController(private val service: AdminAuditionService) {
|
||||||
limit = pageable.pageSize.toLong()
|
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
|
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.DateTimePath
|
||||||
import com.querydsl.core.types.dsl.Expressions
|
import com.querydsl.core.types.dsl.Expressions
|
||||||
import com.querydsl.core.types.dsl.StringTemplate
|
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
|
||||||
|
@ -17,6 +19,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
|
||||||
}
|
}
|
||||||
|
|
||||||
class AdminAuditionQueryRepositoryImpl(
|
class AdminAuditionQueryRepositoryImpl(
|
||||||
|
@ -54,6 +57,30 @@ class AdminAuditionQueryRepositoryImpl(
|
||||||
.size
|
.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 {
|
private fun getFormattedDate(dateTimePath: DateTimePath<LocalDateTime>): StringTemplate {
|
||||||
return Expressions.stringTemplate(
|
return Expressions.stringTemplate(
|
||||||
"DATE_FORMAT({0}, {1})",
|
"DATE_FORMAT({0}, {1})",
|
||||||
|
|
|
@ -87,4 +87,8 @@ class AdminAuditionService(
|
||||||
val items = repository.getAuditionList(offset = offset, limit = limit)
|
val items = repository.getAuditionList(offset = offset, limit = limit)
|
||||||
return GetAuditionListResponse(totalCount, items)
|
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