1
resposta

Outra abordagem para achar tópico com o id

Antes de começar este curso eu já li alguns livros de Kotlin e uma abordagem para achar um elemento em uma lista de acordo com um parametro do objeto seria:

fun buscarPorId(id: Long): Topico? {
        return topicos.find { topico -> id == topico.id }
    }

Achei muito legal que o Kotlin dava erro na compilação por eu não declarar o retorno da função como Topico?, ou seja, pode ser que minha função retorne um objeto que não exista.

1 resposta

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!