Compare commits

...

3 Commits

Author SHA1 Message Date
Klaus 1a02f2383e 오디오 콘텐츠 삭제
- 콘텐츠 삭제시 오픈 예정 날짜 null 처리
2024-01-10 22:33:33 +09:00
Klaus 319893d60f 오디오 콘텐츠 리스트
- 오픈예정 콘텐츠가 리스트에 보이도록 로직 수정
2024-01-10 22:32:28 +09:00
Klaus e007a95982 오디오 콘텐츠 예약 업로드
- 예약 업로드 한 콘텐츠 release와 푸시발송 로직 추가
2024-01-10 21:45:44 +09:00
3 changed files with 75 additions and 6 deletions

View File

@ -25,7 +25,10 @@ import java.time.temporal.TemporalAdjusters
@RestController
@RequestMapping("/audio-content")
class AudioContentController(private val service: AudioContentService) {
class AudioContentController(
private val service: AudioContentService,
private val repository: AudioContentRepository
) {
@PostMapping
@PreAuthorize("hasRole('CREATOR')")
fun createAudioContent(
@ -190,4 +193,16 @@ class AudioContentController(private val service: AudioContentService) {
)
)
}
@PostMapping("/release")
@PreAuthorize("hasRole('BOT')")
fun releaseContent() = run {
val contentIdList = repository.getNotReleaseContentId()
contentIdList.forEach {
service.releaseContent(it)
}
ApiResponse.ok(null)
}
}

View File

@ -98,6 +98,8 @@ interface AudioContentQueryRepository {
): List<GetAudioContentRankingItem>
fun getAudioContentCurationList(isAdult: Boolean, offset: Long, limit: Long): List<AudioContentCuration>
fun getNotReleaseContentId(): List<Long>
}
@Repository
@ -148,8 +150,11 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory)
SortType.PRICE_LOW -> audioContent.price.asc()
}
var where = audioContent.isActive.isTrue
.and(audioContent.member.id.eq(creatorId))
var where = audioContent.member.id.eq(creatorId)
.and(
audioContent.isActive.isTrue
.or(audioContent.releaseDate.isNotNull)
)
if (!isAdult) {
where = where.and(audioContent.isAdult.isFalse)
@ -168,8 +173,11 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory)
creatorId: Long,
isAdult: Boolean
): Int {
var where = audioContent.isActive.isTrue
.and(audioContent.member.id.eq(creatorId))
var where = audioContent.member.id.eq(creatorId)
.and(
audioContent.isActive.isTrue
.or(audioContent.releaseDate.isNotNull)
)
if (!isAdult) {
where = where.and(audioContent.isAdult.isFalse)
@ -581,4 +589,16 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory)
.orderBy(audioContentCuration.orders.asc())
.fetch()
}
override fun getNotReleaseContentId(): List<Long> {
val where = audioContent.isActive.isFalse
.and(audioContent.releaseDate.isNotNull)
.and(audioContent.releaseDate.loe(LocalDateTime.now()))
return queryFactory
.select(audioContent.id)
.from(audioContent)
.where(where)
.fetch()
}
}

View File

@ -126,6 +126,7 @@ class AudioContentService(
?: throw SodaException("잘못된 콘텐츠 입니다.\n다시 시도해 주세요.")
audioContent.isActive = false
audioContent.releaseDate = null
}
@Transactional
@ -342,7 +343,6 @@ class AudioContentService(
val audioContent = repository.findByIdOrNull(contentId)
?: throw SodaException("잘못된 요청입니다.")
audioContent.isActive = true
audioContent.content = content
audioContent.duration = duration
@ -358,6 +358,8 @@ class AudioContentService(
)
if (audioContent.releaseDate == null) {
audioContent.isActive = true
applicationEventPublisher.publishEvent(
FcmEvent(
type = FcmEventType.UPLOAD_CONTENT,
@ -384,6 +386,38 @@ class AudioContentService(
}
}
@Transactional
fun releaseContent(contentId: Long) {
val audioContent = repository.findByIdOrNull(contentId)
?: throw SodaException("잘못된 요청입니다.")
audioContent.isActive = true
applicationEventPublisher.publishEvent(
FcmEvent(
type = FcmEventType.UPLOAD_CONTENT,
title = audioContent.member!!.nickname,
message = "콘텐츠를 업로드 하였습니다. - ${audioContent.title}",
isAuth = audioContent.isAdult,
contentId = contentId,
creatorId = audioContent.member!!.id,
container = "ios"
)
)
applicationEventPublisher.publishEvent(
FcmEvent(
type = FcmEventType.UPLOAD_CONTENT,
title = audioContent.member!!.nickname,
message = "콘텐츠를 업로드 하였습니다. - ${audioContent.title}",
isAuth = audioContent.isAdult,
contentId = contentId,
creatorId = audioContent.member!!.id,
container = "aos"
)
)
}
fun getDetail(id: Long, member: Member, timezone: String): GetAudioContentDetailResponse {
// 묶음 콘텐츠 조회
val bundleAudioContentList = repository.findBundleByContentId(contentId = id)