Skip to content

Commit 03d1ad0

Browse files
authored
feat: optimize GetNftSongs endpoint by fetching data in parallel (#719)
1 parent 50d367a commit 03d1ad0

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

newm-server/src/main/kotlin/io/newm/server/features/nftsong/repo/NftSongRepositoryImpl.kt

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,27 @@ import io.newm.server.features.ethereum.repo.EthereumRepository
77
import io.newm.server.features.nftsong.model.NftChainMetadata
88
import io.newm.server.features.nftsong.model.NftSong
99
import io.newm.server.typealiases.UserId
10+
import kotlinx.coroutines.async
11+
import kotlinx.coroutines.coroutineScope
1012

1113
internal class NftSongRepositoryImpl(
1214
private val cardanoRepository: CardanoRepository,
1315
private val ethereumRepository: EthereumRepository
1416
) : NftSongRepository {
15-
override suspend fun getNftSongs(userId: UserId): List<NftSong> {
16-
val nftSongs = mutableListOf<NftSong>()
17-
18-
nftSongs += cardanoRepository
19-
.getWalletNftSongs(userId, includeLegacy = true, useDripDropz = false)
20-
.map { it.toNftSong() }
21-
22-
nftSongs += ethereumRepository
23-
.getWalletNftSongs(userId)
24-
.map { it.toNftSong() }
25-
26-
return nftSongs
27-
}
17+
override suspend fun getNftSongs(userId: UserId): List<NftSong> =
18+
coroutineScope {
19+
val cardanoJob = async {
20+
cardanoRepository
21+
.getWalletNftSongs(userId, includeLegacy = true, useDripDropz = false)
22+
.map { it.toNftSong() }
23+
}
24+
val ethereumJob = async {
25+
ethereumRepository
26+
.getWalletNftSongs(userId)
27+
.map { it.toNftSong() }
28+
}
29+
cardanoJob.await() + ethereumJob.await()
30+
}
2831

2932
private fun CardanoNftSong.toNftSong(): NftSong =
3033
NftSong(

0 commit comments

Comments
 (0)