DefaultPlayerQueryService.kt
package io.github.lishangbu.avalon.game.player
import io.github.lishangbu.avalon.game.repository.PlayerRepository
import org.springframework.stereotype.Service
@Service
class DefaultPlayerQueryService(
private val playerRepository: PlayerRepository,
) : PlayerQueryService {
override fun listByUserId(userId: String): List<PlayerView> {
val parsedUserId = userId.toLongOrNull() ?: error("userId must be a valid long value.")
return playerRepository
.findAll()
.filter { player -> player.userId == parsedUserId }
.sortedWith(compareBy<io.github.lishangbu.avalon.game.entity.Player> { player -> player.slotNo }.thenBy { player -> player.id })
.map { player ->
PlayerView(
id = player.id.toString(),
userId = player.userId.toString(),
slotNo = player.slotNo,
nickname = player.nickname,
avatar = player.avatar,
createdAt = player.createdAt,
updatedAt = player.updatedAt,
)
}
}
}