Compare commits
No commits in common. "affbb3eba323f06effadbc7b8d018a4928fc6e22" and "bb41a81eb1cb4977087002b5ec99b9c8e012f23c" have entirely different histories.
affbb3eba3
...
bb41a81eb1
|
@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.admin.audition.role
|
||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
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.web.bind.annotation.GetMapping
|
import org.springframework.web.bind.annotation.GetMapping
|
||||||
import org.springframework.web.bind.annotation.PathVariable
|
import org.springframework.web.bind.annotation.PathVariable
|
||||||
import org.springframework.web.bind.annotation.PostMapping
|
import org.springframework.web.bind.annotation.PostMapping
|
||||||
|
@ -13,7 +12,6 @@ import org.springframework.web.bind.annotation.RestController
|
||||||
import org.springframework.web.multipart.MultipartFile
|
import org.springframework.web.multipart.MultipartFile
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@PreAuthorize("hasRole('ADMIN')")
|
|
||||||
@RequestMapping("/admin/audition/role")
|
@RequestMapping("/admin/audition/role")
|
||||||
class AdminAuditionRoleController(private val service: AdminAuditionRoleService) {
|
class AdminAuditionRoleController(private val service: AdminAuditionRoleService) {
|
||||||
@PostMapping
|
@PostMapping
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition
|
|
||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
|
||||||
import org.springframework.data.domain.Pageable
|
|
||||||
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping
|
|
||||||
import org.springframework.web.bind.annotation.PathVariable
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping
|
|
||||||
import org.springframework.web.bind.annotation.RestController
|
|
||||||
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/audition")
|
|
||||||
class AuditionController(private val service: AuditionService) {
|
|
||||||
@GetMapping
|
|
||||||
fun getAuditionList(
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
|
||||||
pageable: Pageable
|
|
||||||
) = run {
|
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
|
||||||
|
|
||||||
ApiResponse.ok(
|
|
||||||
service.getAuditionList(
|
|
||||||
offset = pageable.offset,
|
|
||||||
limit = pageable.pageSize.toLong(),
|
|
||||||
isAdult = member.auth != null
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/{id}")
|
|
||||||
fun getAuditionDetail(
|
|
||||||
@PathVariable id: Long,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
|
||||||
) = run {
|
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
|
||||||
|
|
||||||
ApiResponse.ok(service.getAuditionDetail(auditionId = id))
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,94 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition
|
|
||||||
|
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory
|
|
||||||
import kr.co.vividnext.sodalive.audition.QAudition.audition
|
|
||||||
import org.springframework.beans.factory.annotation.Value
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository
|
|
||||||
|
|
||||||
interface AuditionRepository : JpaRepository<Audition, Long>, AuditionQueryRepository
|
|
||||||
|
|
||||||
interface AuditionQueryRepository {
|
|
||||||
fun getInProgressAuditionCount(isAdult: Boolean): Int
|
|
||||||
fun getCompletedAuditionCount(isAdult: Boolean): Int
|
|
||||||
fun getAuditionList(offset: Long, limit: Long, isAdult: Boolean): List<GetAuditionListItem>
|
|
||||||
fun getAuditionDetail(auditionId: Long): GetAuditionDetailRawData
|
|
||||||
}
|
|
||||||
|
|
||||||
class AuditionQueryRepositoryImpl(
|
|
||||||
private val queryFactory: JPAQueryFactory,
|
|
||||||
|
|
||||||
@Value("\${cloud.aws.cloud-front.host}")
|
|
||||||
private val cloudFrontHost: String
|
|
||||||
) : AuditionQueryRepository {
|
|
||||||
override fun getInProgressAuditionCount(isAdult: Boolean): Int {
|
|
||||||
var where = audition.isActive.isTrue
|
|
||||||
.and(audition.status.eq(AuditionStatus.IN_PROGRESS))
|
|
||||||
|
|
||||||
if (!isAdult) {
|
|
||||||
where = where.and(audition.isAdult.isFalse)
|
|
||||||
}
|
|
||||||
|
|
||||||
return queryFactory
|
|
||||||
.select(audition.id)
|
|
||||||
.from(audition)
|
|
||||||
.where(where)
|
|
||||||
.fetch()
|
|
||||||
.size
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getCompletedAuditionCount(isAdult: Boolean): Int {
|
|
||||||
var where = audition.isActive.isTrue
|
|
||||||
.and(audition.status.eq(AuditionStatus.COMPLETED))
|
|
||||||
|
|
||||||
if (!isAdult) {
|
|
||||||
where = where.and(audition.isAdult.isFalse)
|
|
||||||
}
|
|
||||||
|
|
||||||
return queryFactory
|
|
||||||
.select(audition.id)
|
|
||||||
.from(audition)
|
|
||||||
.where(where)
|
|
||||||
.fetch()
|
|
||||||
.size
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getAuditionList(offset: Long, limit: Long, isAdult: Boolean): List<GetAuditionListItem> {
|
|
||||||
var where = audition.isActive.isTrue
|
|
||||||
.and(
|
|
||||||
audition.status.eq(AuditionStatus.COMPLETED)
|
|
||||||
.and(audition.status.eq(AuditionStatus.IN_PROGRESS))
|
|
||||||
)
|
|
||||||
|
|
||||||
if (!isAdult) {
|
|
||||||
where = where.and(audition.isAdult.isFalse)
|
|
||||||
}
|
|
||||||
|
|
||||||
return queryFactory
|
|
||||||
.select(
|
|
||||||
QGetAuditionListItem(
|
|
||||||
audition.id,
|
|
||||||
audition.title,
|
|
||||||
audition.imagePath.prepend("/").prepend(cloudFrontHost),
|
|
||||||
audition.status.eq(AuditionStatus.COMPLETED)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.from(audition)
|
|
||||||
.where(where)
|
|
||||||
.fetch()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getAuditionDetail(auditionId: Long): GetAuditionDetailRawData {
|
|
||||||
return queryFactory
|
|
||||||
.select(
|
|
||||||
QGetAuditionDetailRawData(
|
|
||||||
audition.id,
|
|
||||||
audition.title,
|
|
||||||
audition.imagePath.prepend("/").prepend(cloudFrontHost),
|
|
||||||
audition.information
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.from(audition)
|
|
||||||
.where(audition.id.eq(auditionId))
|
|
||||||
.fetchFirst()
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition
|
|
||||||
|
|
||||||
import kr.co.vividnext.sodalive.audition.role.AuditionRoleRepository
|
|
||||||
import org.springframework.stereotype.Service
|
|
||||||
|
|
||||||
@Service
|
|
||||||
class AuditionService(
|
|
||||||
private val repository: AuditionRepository,
|
|
||||||
private val roleRepository: AuditionRoleRepository
|
|
||||||
) {
|
|
||||||
fun getAuditionList(offset: Long, limit: Long, isAdult: Boolean): GetAuditionListResponse {
|
|
||||||
val inProgressCount = repository.getInProgressAuditionCount(isAdult = isAdult)
|
|
||||||
val completedCount = repository.getCompletedAuditionCount(isAdult = isAdult)
|
|
||||||
val items = repository.getAuditionList(offset = offset, limit = limit, isAdult = isAdult)
|
|
||||||
|
|
||||||
return GetAuditionListResponse(inProgressCount, completedCount, items)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getAuditionDetail(auditionId: Long): GetAuditionDetailResponse {
|
|
||||||
val auditionDetail = repository.getAuditionDetail(auditionId = auditionId)
|
|
||||||
val roleList = roleRepository.getAuditionRoleListByAuditionId(auditionId = auditionId)
|
|
||||||
|
|
||||||
return GetAuditionDetailResponse(
|
|
||||||
auditionId = auditionId,
|
|
||||||
title = auditionDetail.title,
|
|
||||||
imageUrl = auditionDetail.imageUrl,
|
|
||||||
information = auditionDetail.information,
|
|
||||||
roleList = roleList
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition
|
|
||||||
|
|
||||||
import com.querydsl.core.annotations.QueryProjection
|
|
||||||
|
|
||||||
data class GetAuditionDetailRawData @QueryProjection constructor(
|
|
||||||
val auditionId: Long,
|
|
||||||
val title: String,
|
|
||||||
val imageUrl: String,
|
|
||||||
val information: String
|
|
||||||
)
|
|
||||||
|
|
||||||
data class GetAuditionDetailResponse(
|
|
||||||
val auditionId: Long,
|
|
||||||
val title: String,
|
|
||||||
val imageUrl: String,
|
|
||||||
val information: String,
|
|
||||||
val roleList: List<GetAuditionRoleListData>
|
|
||||||
)
|
|
||||||
|
|
||||||
data class GetAuditionRoleListData @QueryProjection constructor(
|
|
||||||
val roleId: Long,
|
|
||||||
val name: String,
|
|
||||||
val imageUrl: String,
|
|
||||||
val isComplete: Boolean
|
|
||||||
)
|
|
|
@ -1,16 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition
|
|
||||||
|
|
||||||
import com.querydsl.core.annotations.QueryProjection
|
|
||||||
|
|
||||||
data class GetAuditionListResponse(
|
|
||||||
val inProgressCount: Int,
|
|
||||||
val completedCount: Int,
|
|
||||||
val items: List<GetAuditionListItem>
|
|
||||||
)
|
|
||||||
|
|
||||||
data class GetAuditionListItem @QueryProjection constructor(
|
|
||||||
val id: Long,
|
|
||||||
val title: String,
|
|
||||||
val imageUrl: String,
|
|
||||||
val isOff: Boolean
|
|
||||||
)
|
|
|
@ -1,34 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition.applicant
|
|
||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
|
||||||
import org.springframework.data.domain.Pageable
|
|
||||||
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam
|
|
||||||
import org.springframework.web.bind.annotation.RestController
|
|
||||||
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/audition/applicant")
|
|
||||||
class AuditionApplicantController(private val service: AuditionApplicantService) {
|
|
||||||
@GetMapping
|
|
||||||
fun getAuditionApplicantList(
|
|
||||||
@RequestParam auditionRoleId: Long,
|
|
||||||
@RequestParam sortType: AuditionApplicantSortType,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
|
||||||
pageable: Pageable
|
|
||||||
) = run {
|
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
|
||||||
|
|
||||||
ApiResponse.ok(
|
|
||||||
service.getAuditionApplicantList(
|
|
||||||
auditionRoleId = auditionRoleId,
|
|
||||||
sortType = sortType,
|
|
||||||
offset = pageable.offset,
|
|
||||||
limit = pageable.pageSize.toLong()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,93 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition.applicant
|
|
||||||
|
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory
|
|
||||||
import kr.co.vividnext.sodalive.audition.AuditionApplicant
|
|
||||||
import kr.co.vividnext.sodalive.audition.QAuditionApplicant.auditionApplicant
|
|
||||||
import kr.co.vividnext.sodalive.audition.QAuditionRole.auditionRole
|
|
||||||
import kr.co.vividnext.sodalive.audition.QAuditionVote.auditionVote
|
|
||||||
import kr.co.vividnext.sodalive.member.QMember.member
|
|
||||||
import org.springframework.beans.factory.annotation.Value
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository
|
|
||||||
|
|
||||||
interface AuditionApplicantRepository : JpaRepository<AuditionApplicant, Long>, AuditionApplicantQueryRepository
|
|
||||||
|
|
||||||
interface AuditionApplicantQueryRepository {
|
|
||||||
fun isAlreadyApplicant(auditionRoleId: Long, memberId: Long): Boolean
|
|
||||||
fun getAuditionApplicantTotalCount(auditionRoleId: Long): Int
|
|
||||||
fun getAuditionApplicantList(
|
|
||||||
auditionRoleId: Long,
|
|
||||||
sortType: AuditionApplicantSortType,
|
|
||||||
offset: Long,
|
|
||||||
limit: Long
|
|
||||||
): List<GetAuditionRoleApplicantItem>
|
|
||||||
}
|
|
||||||
|
|
||||||
class AuditionApplicantQueryRepositoryImpl(
|
|
||||||
private val queryFactory: JPAQueryFactory,
|
|
||||||
|
|
||||||
@Value("\${cloud.aws.cloud-front.host}")
|
|
||||||
private val cloudFrontHost: String
|
|
||||||
) : AuditionApplicantQueryRepository {
|
|
||||||
override fun isAlreadyApplicant(auditionRoleId: Long, memberId: Long): Boolean {
|
|
||||||
return queryFactory
|
|
||||||
.select(auditionApplicant.id)
|
|
||||||
.from(auditionApplicant)
|
|
||||||
.innerJoin(auditionApplicant.role, auditionRole)
|
|
||||||
.innerJoin(auditionApplicant.member, member)
|
|
||||||
.where(
|
|
||||||
auditionRole.id.eq(auditionRoleId),
|
|
||||||
member.id.eq(memberId),
|
|
||||||
auditionApplicant.isActive.isTrue
|
|
||||||
)
|
|
||||||
.fetch()
|
|
||||||
.size > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getAuditionApplicantTotalCount(auditionRoleId: Long): Int {
|
|
||||||
return queryFactory
|
|
||||||
.select(auditionApplicant.id)
|
|
||||||
.from(auditionApplicant)
|
|
||||||
.innerJoin(auditionApplicant.role, auditionRole)
|
|
||||||
.where(
|
|
||||||
auditionRole.id.eq(auditionRoleId),
|
|
||||||
auditionRole.isActive.isTrue
|
|
||||||
)
|
|
||||||
.fetch()
|
|
||||||
.size
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getAuditionApplicantList(
|
|
||||||
auditionRoleId: Long,
|
|
||||||
sortType: AuditionApplicantSortType,
|
|
||||||
offset: Long,
|
|
||||||
limit: Long
|
|
||||||
): List<GetAuditionRoleApplicantItem> {
|
|
||||||
val orderBy = if (sortType == AuditionApplicantSortType.LIKES) {
|
|
||||||
auditionVote.id.count().desc()
|
|
||||||
} else {
|
|
||||||
auditionApplicant.id.desc()
|
|
||||||
}
|
|
||||||
|
|
||||||
return queryFactory
|
|
||||||
.select(
|
|
||||||
QGetAuditionRoleApplicantItem(
|
|
||||||
auditionApplicant.id,
|
|
||||||
member.nickname,
|
|
||||||
member.profileImage.prepend("/").prepend(cloudFrontHost),
|
|
||||||
auditionApplicant.voicePath.prepend("/").prepend(cloudFrontHost),
|
|
||||||
auditionVote.id.count()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.from(auditionApplicant)
|
|
||||||
.innerJoin(auditionApplicant.member, member)
|
|
||||||
.innerJoin(auditionApplicant.role, auditionRole)
|
|
||||||
.leftJoin(auditionVote).on(auditionApplicant.id.eq(auditionVote.applicant.id))
|
|
||||||
.where(
|
|
||||||
auditionRole.id.eq(auditionRoleId),
|
|
||||||
auditionRole.isActive.isTrue
|
|
||||||
)
|
|
||||||
.groupBy(auditionApplicant.id)
|
|
||||||
.orderBy(orderBy)
|
|
||||||
.fetch()
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition.applicant
|
|
||||||
|
|
||||||
import org.springframework.stereotype.Service
|
|
||||||
|
|
||||||
@Service
|
|
||||||
class AuditionApplicantService(private val repository: AuditionApplicantRepository) {
|
|
||||||
fun getAuditionApplicantList(
|
|
||||||
auditionRoleId: Long,
|
|
||||||
sortType: AuditionApplicantSortType,
|
|
||||||
offset: Long,
|
|
||||||
limit: Long
|
|
||||||
): GetAuditionApplicantListResponse {
|
|
||||||
val totalCount = repository.getAuditionApplicantTotalCount(auditionRoleId = auditionRoleId)
|
|
||||||
val items = repository.getAuditionApplicantList(
|
|
||||||
auditionRoleId = auditionRoleId,
|
|
||||||
sortType = sortType,
|
|
||||||
offset = offset,
|
|
||||||
limit = limit
|
|
||||||
)
|
|
||||||
|
|
||||||
return GetAuditionApplicantListResponse(
|
|
||||||
totalCount = totalCount,
|
|
||||||
items = items
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition.applicant
|
|
||||||
|
|
||||||
enum class AuditionApplicantSortType {
|
|
||||||
NEWEST, LIKES
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition.applicant
|
|
||||||
|
|
||||||
import com.querydsl.core.annotations.QueryProjection
|
|
||||||
|
|
||||||
data class GetAuditionApplicantListResponse(
|
|
||||||
val totalCount: Int,
|
|
||||||
val items: List<GetAuditionRoleApplicantItem>
|
|
||||||
)
|
|
||||||
|
|
||||||
data class GetAuditionRoleApplicantItem @QueryProjection constructor(
|
|
||||||
val applicantId: Long,
|
|
||||||
val nickname: String,
|
|
||||||
val profileImageUrl: String,
|
|
||||||
val voiceUrl: String,
|
|
||||||
val voteCount: Long
|
|
||||||
)
|
|
|
@ -1,29 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition.role
|
|
||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
|
||||||
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping
|
|
||||||
import org.springframework.web.bind.annotation.PathVariable
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping
|
|
||||||
import org.springframework.web.bind.annotation.RestController
|
|
||||||
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/audition/role")
|
|
||||||
class AuditionRoleController(private val service: AuditionRoleService) {
|
|
||||||
@GetMapping("/{id}")
|
|
||||||
fun getAuditionRoleDetail(
|
|
||||||
@PathVariable id: Long,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
|
||||||
) = run {
|
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
|
||||||
|
|
||||||
ApiResponse.ok(
|
|
||||||
service.getAuditionRoleDetail(
|
|
||||||
auditionRoleId = id,
|
|
||||||
memberId = member.id!!
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,65 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition.role
|
|
||||||
|
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory
|
|
||||||
import kr.co.vividnext.sodalive.audition.AuditionRole
|
|
||||||
import kr.co.vividnext.sodalive.audition.AuditionStatus
|
|
||||||
import kr.co.vividnext.sodalive.audition.GetAuditionRoleListData
|
|
||||||
import kr.co.vividnext.sodalive.audition.QAudition.audition
|
|
||||||
import kr.co.vividnext.sodalive.audition.QAuditionRole.auditionRole
|
|
||||||
import kr.co.vividnext.sodalive.audition.QGetAuditionRoleListData
|
|
||||||
import org.springframework.beans.factory.annotation.Value
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository
|
|
||||||
|
|
||||||
interface AuditionRoleRepository : JpaRepository<AuditionRole, Long>, AuditionRoleQueryRepository
|
|
||||||
|
|
||||||
interface AuditionRoleQueryRepository {
|
|
||||||
fun getAuditionRoleListByAuditionId(auditionId: Long): List<GetAuditionRoleListData>
|
|
||||||
fun getAuditionRoleDetail(auditionRoleId: Long): GetAuditionRoleDetailData?
|
|
||||||
}
|
|
||||||
|
|
||||||
class AuditionRoleQueryRepositoryImpl(
|
|
||||||
private val queryFactory: JPAQueryFactory,
|
|
||||||
|
|
||||||
@Value("\${cloud.aws.cloud-front.host}")
|
|
||||||
private val cloudfrontHost: String
|
|
||||||
) : AuditionRoleQueryRepository {
|
|
||||||
override fun getAuditionRoleListByAuditionId(auditionId: Long): List<GetAuditionRoleListData> {
|
|
||||||
return queryFactory
|
|
||||||
.select(
|
|
||||||
QGetAuditionRoleListData(
|
|
||||||
auditionRole.id,
|
|
||||||
auditionRole.name,
|
|
||||||
auditionRole.imagePath.prepend("/").prepend(cloudfrontHost),
|
|
||||||
auditionRole.status.eq(AuditionStatus.COMPLETED)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.from(auditionRole)
|
|
||||||
.innerJoin(auditionRole.audition, audition)
|
|
||||||
.where(
|
|
||||||
audition.id.eq(auditionId),
|
|
||||||
auditionRole.isActive.isTrue
|
|
||||||
)
|
|
||||||
.fetch()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getAuditionRoleDetail(auditionRoleId: Long): GetAuditionRoleDetailData? {
|
|
||||||
return queryFactory
|
|
||||||
.select(
|
|
||||||
QGetAuditionRoleDetailData(
|
|
||||||
auditionRole.id,
|
|
||||||
auditionRole.name,
|
|
||||||
auditionRole.imagePath.prepend("/").prepend(cloudfrontHost),
|
|
||||||
auditionRole.information,
|
|
||||||
audition.originalWorkUrl,
|
|
||||||
auditionRole.auditionScriptUrl
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.from(auditionRole)
|
|
||||||
.innerJoin(auditionRole.audition, audition)
|
|
||||||
.where(
|
|
||||||
auditionRole.id.eq(auditionRoleId),
|
|
||||||
auditionRole.isActive.isTrue
|
|
||||||
)
|
|
||||||
.fetchFirst()
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition.role
|
|
||||||
|
|
||||||
import kr.co.vividnext.sodalive.audition.applicant.AuditionApplicantRepository
|
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
|
||||||
import org.springframework.stereotype.Service
|
|
||||||
|
|
||||||
@Service
|
|
||||||
class AuditionRoleService(
|
|
||||||
private val repository: AuditionRoleRepository,
|
|
||||||
private val applicantRepository: AuditionApplicantRepository
|
|
||||||
) {
|
|
||||||
fun getAuditionRoleDetail(auditionRoleId: Long, memberId: Long): GetAuditionRoleDetailResponse {
|
|
||||||
val roleDetailData = repository.getAuditionRoleDetail(auditionRoleId = auditionRoleId)
|
|
||||||
?: throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.")
|
|
||||||
|
|
||||||
val isAlreadyApplicant = applicantRepository.isAlreadyApplicant(
|
|
||||||
auditionRoleId = auditionRoleId,
|
|
||||||
memberId = memberId
|
|
||||||
)
|
|
||||||
|
|
||||||
return roleDetailData.toDetailResponse(isAlreadyApplicant = isAlreadyApplicant)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.audition.role
|
|
||||||
|
|
||||||
import com.querydsl.core.annotations.QueryProjection
|
|
||||||
|
|
||||||
data class GetAuditionRoleDetailResponse(
|
|
||||||
val auditionRoleId: Long,
|
|
||||||
val name: String,
|
|
||||||
val imageUrl: String,
|
|
||||||
val information: String,
|
|
||||||
val originalWorkUrl: String,
|
|
||||||
val auditionScriptUrl: String,
|
|
||||||
val isAlreadyApplicant: Boolean = false
|
|
||||||
)
|
|
||||||
|
|
||||||
data class GetAuditionRoleDetailData @QueryProjection constructor(
|
|
||||||
val auditionRoleId: Long,
|
|
||||||
val name: String,
|
|
||||||
val imageUrl: String,
|
|
||||||
val information: String,
|
|
||||||
val originalWorkUrl: String,
|
|
||||||
val auditionScriptUrl: String
|
|
||||||
) {
|
|
||||||
fun toDetailResponse(isAlreadyApplicant: Boolean) = GetAuditionRoleDetailResponse(
|
|
||||||
auditionRoleId = auditionRoleId,
|
|
||||||
name = name,
|
|
||||||
imageUrl = imageUrl,
|
|
||||||
information = information,
|
|
||||||
originalWorkUrl = originalWorkUrl,
|
|
||||||
auditionScriptUrl = auditionScriptUrl,
|
|
||||||
isAlreadyApplicant = isAlreadyApplicant
|
|
||||||
)
|
|
||||||
}
|
|
Loading…
Reference in New Issue