플레이 리스트 상세 API 추가
This commit is contained in:
parent
d6e5a45be9
commit
3093d2159d
|
@ -55,4 +55,14 @@ class AudioContentPlaylistController(private val service: AudioContentPlaylistSe
|
|||
|
||||
ApiResponse.ok(service.getPlaylists(member))
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
fun getPlaylistDetail(
|
||||
@PathVariable id: Long,
|
||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||
) = run {
|
||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||
|
||||
ApiResponse.ok(service.getPlaylistDetail(playlistId = id, member = member))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,8 @@ import kr.co.vividnext.sodalive.live.roulette.RedisIdGenerator
|
|||
import kr.co.vividnext.sodalive.member.Member
|
||||
import org.springframework.data.repository.findByIdOrNull
|
||||
import org.springframework.stereotype.Service
|
||||
import java.time.ZoneId
|
||||
import java.time.format.DateTimeFormatter
|
||||
|
||||
@Service
|
||||
class AudioContentPlaylistService(
|
||||
|
@ -113,6 +115,33 @@ class AudioContentPlaylistService(
|
|||
redisRepository.delete(playlist)
|
||||
}
|
||||
|
||||
fun getPlaylistDetail(playlistId: Long, member: Member): GetPlaylistDetailResponse {
|
||||
val playlist = redisRepository.findByIdOrNull(id = playlistId)
|
||||
?: throw SodaException("잘못된 요청입니다.")
|
||||
|
||||
if (playlist.memberId != member.id) {
|
||||
throw SodaException("잘못된 요청입니다.")
|
||||
}
|
||||
|
||||
val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
|
||||
val createdDate = playlist.createdAt
|
||||
.atZone(ZoneId.of("UTC"))
|
||||
.withZoneSameInstant(ZoneId.of("Asia/Seoul"))
|
||||
.format(dateTimeFormatter)
|
||||
|
||||
val contentList = audioContentRepository.fetchContentForPlaylist(contentIdList = playlist.contentIdList)
|
||||
|
||||
return GetPlaylistDetailResponse(
|
||||
playlistId = playlist.id,
|
||||
title = playlist.title,
|
||||
desc = playlist.desc ?: "",
|
||||
createdDate = createdDate,
|
||||
contentCount = contentList.size,
|
||||
playlistCoverImageList = contentList.take(4).map { it.coverUrl },
|
||||
contentList = contentList
|
||||
)
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val SEQUENCE_NAME = "AudioContentPlaylist:sequence"
|
||||
}
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
package kr.co.vividnext.sodalive.content.playlist
|
||||
|
||||
data class GetPlaylistDetailResponse(
|
||||
val playlistId: Long,
|
||||
val title: String,
|
||||
val desc: String,
|
||||
val createdDate: String,
|
||||
val contentCount: Int,
|
||||
val playlistCoverImageList: List<String>,
|
||||
val contentList: List<AudioContentPlaylistContent>
|
||||
)
|
Loading…
Reference in New Issue