/* * Copyright (c) 2023. yo-saito. All Rights Reserved. */ package net.piedpiper.bremer.service.domain import net.piedpiper.bremer.config.Log import net.piedpiper.bremer.entity.AudioEntity import net.piedpiper.bremer.entity.AudioPlayHistoryEntity import net.piedpiper.bremer.repository.AudioRepository import org.springframework.beans.factory.annotation.Qualifier import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional @Service("bremer.service.AudioDomainService") class AudioDomainService( @Qualifier("bremer.repository.AudioRepository") private val audioRepository: AudioRepository, ) { private val log by Log() @Transactional fun findOneBySlug(slug: String): AudioEntity? { val a = audioRepository.findOneBySlug(slug) log.info("audio: {}", a) return a } @Transactional fun findAllByOrderedIds(ids: List<Long>): List<AudioEntity> { val id2idx = ids.mapIndexed { index, id -> id to index }.toMap() return audioRepository.findAllByIdIn(ids) .sortedBy { id2idx[it.id] } } @Transactional fun findAllByOrderedSlugs(slugs: List<String>): List<AudioEntity> { if (slugs.isEmpty()) { return emptyList() } val slug2idx = slugs.mapIndexed { index, slug -> slug to index }.toMap() return audioRepository.findAllBySlugIn(slugs) .sortedBy { slug2idx[it.slug] } } @Transactional fun findAllLruLimit(limit: Int): List<AudioEntity> = audioRepository.findAllLruLimit(limit) @Transactional fun findAllByKeyword( nameLike: String?, artistNameLike: String?, albumNameLike: String?, limit: Int ): List<AudioEntity> { val set = mutableSetOf<AudioEntity>() if (nameLike?.isNotEmpty() == true) { set.addAll(audioRepository.findAllByNameLikeLimit(nameLike, limit)) } if (artistNameLike?.isNotEmpty() == true) { set.addAll(audioRepository.findAllByArtistNameLikeLimit(artistNameLike, limit)) } if (albumNameLike?.isNotEmpty() == true) { set.addAll(audioRepository.findAllByAlbumNameLikeLimit(albumNameLike, limit)) } return set.take(limit).sortedByDescending { it.id }.toList() } fun savePlayedHistory(entity: AudioPlayHistoryEntity) = audioRepository.saveAudioPlayHistory(entity) }