플레이 리스트 상세 API 추가

This commit is contained in:
Klaus 2024-11-27 19:09:18 +09:00
parent d6e5a45be9
commit 3093d2159d
3 changed files with 50 additions and 0 deletions

View File

@ -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))
}
}

View File

@ -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"
}

View File

@ -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>
)