/* * Copyright (c) 2023. yo-saito. All Rights Reserved. */ package net.piedpiper.bremer.repository import net.piedpiper.bremer.dao.PlaylistAudioDao import net.piedpiper.bremer.dao.PlaylistDao import net.piedpiper.bremer.entity.PlaylistEntity import org.springframework.beans.factory.annotation.Qualifier import org.springframework.stereotype.Repository import org.springframework.transaction.annotation.Transactional @Repository("bremer.repository.PlaylistRepository") class PlaylistRepository( @Qualifier("bremer.dao.PlaylistDao") private val playlistDao: PlaylistDao, @Qualifier("bremer.dao.PlaylistAudioDao") private val playlistAudioDao: PlaylistAudioDao ) { fun findOneById(id: Long): PlaylistEntity? = playlistDao.findOneById(id) fun findBySlug(slug: String): PlaylistEntity? = playlistDao.findOneBySlug(slug) fun findAll(): List<PlaylistEntity> = playlistDao.findAll() fun insertOne(playlist: PlaylistEntity): Long { playlistDao.insertOne(playlist) playlist.playlistAudio?.forEach { it.playlistId = playlist.id playlistAudioDao.insertOne(it) } return playlist.id } fun updateOne(playlist: PlaylistEntity) { // playlist playlistDao.updateOne(playlist) // playlist_audio val oldAudio = playlistDao.findOneById(playlist.id) ?.playlistAudio ?.associate { it.id to it } ?.toMutableMap() ?: mutableMapOf() val oldSize = oldAudio?.size ?: 0 playlist?.playlistAudio?.forEachIndexed { idx, entity -> if (idx >= oldSize) { playlistAudioDao.insertOne(entity) } else { playlistAudioDao.updateOne(entity) oldAudio.remove(entity.id) } } deleteAllByIds(oldAudio.keys.toList()) } fun deleteAllByIds(ids: List<Long>) { if (ids.isNotEmpty()) { playlistAudioDao.deleteAllByIds(ids) } } }