From 1ccc1ae3c1bd031d4a3cd1123511274c7d987067 Mon Sep 17 00:00:00 2001 From: Walter Lara Date: Wed, 28 Jan 2026 08:37:14 -0800 Subject: [PATCH] feat: optimize GetNftSongs endpoint by fetching data in parallel --- .../nftsong/repo/NftSongRepositoryImpl.kt | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/newm-server/src/main/kotlin/io/newm/server/features/nftsong/repo/NftSongRepositoryImpl.kt b/newm-server/src/main/kotlin/io/newm/server/features/nftsong/repo/NftSongRepositoryImpl.kt index ed3d76d5..c992369d 100644 --- a/newm-server/src/main/kotlin/io/newm/server/features/nftsong/repo/NftSongRepositoryImpl.kt +++ b/newm-server/src/main/kotlin/io/newm/server/features/nftsong/repo/NftSongRepositoryImpl.kt @@ -7,24 +7,27 @@ import io.newm.server.features.ethereum.repo.EthereumRepository import io.newm.server.features.nftsong.model.NftChainMetadata import io.newm.server.features.nftsong.model.NftSong import io.newm.server.typealiases.UserId +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope internal class NftSongRepositoryImpl( private val cardanoRepository: CardanoRepository, private val ethereumRepository: EthereumRepository ) : NftSongRepository { - override suspend fun getNftSongs(userId: UserId): List { - val nftSongs = mutableListOf() - - nftSongs += cardanoRepository - .getWalletNftSongs(userId, includeLegacy = true, useDripDropz = false) - .map { it.toNftSong() } - - nftSongs += ethereumRepository - .getWalletNftSongs(userId) - .map { it.toNftSong() } - - return nftSongs - } + override suspend fun getNftSongs(userId: UserId): List = + coroutineScope { + val cardanoJob = async { + cardanoRepository + .getWalletNftSongs(userId, includeLegacy = true, useDripDropz = false) + .map { it.toNftSong() } + } + val ethereumJob = async { + ethereumRepository + .getWalletNftSongs(userId) + .map { it.toNftSong() } + } + cardanoJob.await() + ethereumJob.await() + } private fun CardanoNftSong.toNftSong(): NftSong = NftSong(