Precisamos revisar um problema grave, na época que foi gravada a aula, os id que não tinham nenhum jogo retornavam pelo menos algum Json, que implicava numa determinada exceção que era tratável com o que foi dado em aula, apenas colocando apenas a instancia da variável meuJogo dentro do try ou runCatching, porém o erro agora dá bem antes disso, pois deve ter havido alguma atualização com a API do CheapShark, conforme a print abaixo do Postman, ele não está mais retornando código 200 na pesquisa, mas código 404, ou seja, o código quebra antes de chegar nessa parte do try. A solução foi colocar todo o tratamento da variável response em diante dentro do encapsulamento da tentativa.
O problema se agravou na hora de refatorar o código, pois encapsulamos tudo dentro de uma classe, desde o HttpClient até o Gson, portanto a solução foi deixar essa instância toda - mesmo que fosse preciso apenas um pedaço - dentro do runCatching, abaixo o código que consegue tratar as exceções
package br.com.alura.alugames.principal
import br.com.alura.alugames.modelo.*
import br.com.alura.alugames.servicos.ConsumoApi
import java.util.Scanner
fun main() {
val leitura = Scanner(System.`in`)
println("Digite o ID do jogo que deseja buscar:")
val busca = leitura.nextLine()
var meuJogo: Jogo? = null
val resultado = runCatching {
val buscaApi = ConsumoApi()
val meuInfoJogo = buscaApi.buscaJogo(busca)
meuJogo = Jogo(
meuInfoJogo.info.title,
meuInfoJogo.info.thumb)
}
resultado.onFailure {
println("Erro ao buscar o jogo.")
}
resultado.onSuccess {
println("Deseja inserir uma descrição personalizada? (s/n)")
val resposta = leitura.nextLine()
if (resposta.equals("s", true)) {
println("Digite a descrição personalizada:")
val descricaoPersonalizada = leitura.nextLine()
meuJogo?.descricao = descricaoPersonalizada
println("Descrição inserida: $descricaoPersonalizada")
} else {
meuJogo?.descricao = meuJogo?.titulo
}
println(meuJogo)
}
resultado.onSuccess {
println("Busca finalizada com sucesso")
}
}