diff --git a/src/main/kotlin/controller/api/PlaylistApiController.kt b/src/main/kotlin/controller/api/PlaylistApiController.kt index 4c5dc9f..878eb78 100644 --- a/src/main/kotlin/controller/api/PlaylistApiController.kt +++ b/src/main/kotlin/controller/api/PlaylistApiController.kt @@ -62,7 +62,6 @@ @PathVariable("slug") slug: String, @Valid @RequestBody request: PlaylistAudioRequest ): ResponseEntity { - log.info("recieve: {}", request) playlistService.updatePlaylistAudioList(slug, request) return ResponseEntity.ok(null) } diff --git a/src/main/kotlin/entity/Entity.kt b/src/main/kotlin/entity/Entity.kt index 28836cf..ce6e7dc 100644 --- a/src/main/kotlin/entity/Entity.kt +++ b/src/main/kotlin/entity/Entity.kt @@ -103,7 +103,7 @@ @Table("playlist_audio") data class PlaylistAudioEntity( - @property:Column("id", insertable = false, updatable = false) + @property:Column("id", updatable = false) var id: Long = 0L, @property:Column("playlist_id") var playlistId: Long = 0L, diff --git a/src/main/kotlin/service/PlaylistService.kt b/src/main/kotlin/service/PlaylistService.kt index 951945e..ce5ef04 100644 --- a/src/main/kotlin/service/PlaylistService.kt +++ b/src/main/kotlin/service/PlaylistService.kt @@ -99,41 +99,26 @@ ) { playlistDao.findOneBySlug(slug) ?.let { playlist -> + val oldPlaylistAudioList = playlist.playlistAudio + if (oldPlaylistAudioList.isNotEmpty()) { + playlistAudioDao.deleteAllByIds(playlist.playlistAudio + .map { it.id } + .toList()) + } val audioList = findAllByOrderedSlugs(request.audioSlugs) if (request.audioSlugs.size != audioList.size) { throw BadRequestException() } - val registeredAudioIds = playlist.playlistAudio.map { it.audioId }.toSet() - val requestAudioIds = audioList.map { it.id }.toSet() - val playlistSize = playlist.playlistAudio?.size ?: 0 - - // delete - val deleteIds = playlist.playlistAudio - .filter { !requestAudioIds.contains(it.audioId) } - .map { it.id } - .toList() - if (deleteIds.isNotEmpty()) { - playlistAudioDao.deleteAllByIds( - playlist.playlistAudio - .filter { !requestAudioIds.contains(it.audioId) } - .map { it.id } - .toList() - ) - } - audioList.forEachIndexed { idx, audio -> - if (registeredAudioIds.contains(audio.id)) { - // ignore - return@forEachIndexed + audioList.forEachIndexed { index, audio -> + val a = if (index < oldPlaylistAudioList.count()) { + oldPlaylistAudioList[index] + } else { + PlaylistAudioEntity() } - // add - playlistAudioDao.insertOne( - PlaylistAudioEntity( - id = if (idx >= playlistSize) 0L else playlist?.playlistAudio!![idx].id, - playlistId = playlist.id, - sequence = idx, - audioId = audio.id - ) - ) + a.playlistId = playlist.id + a.sequence = index + a.audioId = audio.id + playlistAudioDao.insertOne(a) } } ?: throw NotFoundException() }