Oi Lucas!
Que legal que você já tem conhecimento prévio de Kotlin! A abordagem que você mencionou para buscar um elemento em uma lista é realmente muito elegante e aproveita bem as funcionalidades do Kotlin. Vamos usar essa abordagem para implementar a busca por ID na sua classe TopicoService
.
No seu caso, você pode simplificar a busca por ID utilizando a função find
do Kotlin, que é bem intuitiva e direta. Vou mostrar como você pode fazer isso:
@Service
class TopicoService(private var topicos: List<Topico>) {
// Método listar
fun listar(): List<Topico> {
return topicos
}
// Método buscarPorId
fun buscarPorId(id: Long): Topico? {
return topicos.find { it.id == id }
}
}
Note que a função buscarPorId
retorna um Topico?
, indicando que pode retornar um Topico
ou null
caso não encontre nenhum tópico com o ID fornecido. Isso é importante para evitar erros de execução caso o ID não exista na lista.
No controlador, você também deve ajustar para lidar com o possível retorno null
:
@RestController
@RequestMapping("/topicos")
class TopicoController(private val service: TopicoService) {
@GetMapping
fun listar(): List<Topico> {
return service.listar()
}
@GetMapping("/{id}")
fun buscarPorId(@PathVariable id: Long): ResponseEntity<Topico> {
val topico = service.buscarPorId(id)
return if (topico != null) {
ResponseEntity.ok(topico)
} else {
ResponseEntity.notFound().build()
}
}
}
Aqui, usamos ResponseEntity
para retornar uma resposta adequada. Se o tópico for encontrado, retornamos um status 200 (OK) com o tópico. Se não for encontrado, retornamos um status 404 (Not Found).
Espero ter ajudado e bons estudos!