Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Solução e dúvida

O código da aula resolvido, más gostaria de saber se tem um jeito mais fácil ou alguma melhoria no mesmo!

package org.example

import com.google.gson.Gson
import com.google.gson.JsonParser
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse.BodyHandlers
import java.util.*


fun main() {
    val leitura = Scanner(System.`in`)
    println("Insira o número do jogo que deseja buscar.")
    val idJogo = leitura.nextLine()
    val url = "https://www.cheapshark.com/api/1.0/games?id=$idJogo"
    val client: HttpClient = HttpClient.newHttpClient()

    val request = HttpRequest.newBuilder()
        .uri(URI.create(url))
        .build()

    val response = client
        .send(request, BodyHandlers.ofString())

    val json = response.body()

    val gson =  Gson()

    val elementoJson = JsonParser.parseString(json)

    var meuInfoJogo:InfoJogo? = null

    val resultadoGson = runCatching {
        meuInfoJogo = gson.fromJson(elementoJson, InfoJogo::class.java)
    }

    resultadoGson.onFailure {
        println("Erro no tipo da resposta")
        System.exit(1)
    }

    var meuJogo:Jogo? = null

    val resultadoJogo = runCatching {
        meuJogo = meuInfoJogo?.info?.let {
            Jogo(
                it.title,
                it.thumb)
        }
    }

    resultadoJogo.onFailure {
        println("Jogo inexistente. Tente outro id")
    }

    resultadoJogo.onSuccess {
        println("Você deseja escrever uma descrição personalizada? S/N")
        val opcao = leitura.nextLine()
        if (opcao.equals("s", true)) {
            println("Dê sua descrição ao jogo ${meuJogo?.titulo}\n")
            val descricaoPersonalizada = leitura.nextLine()
            meuJogo?.descricao = descricaoPersonalizada
        } else {
            meuJogo?.descricao = meuJogo?.titulo
        }
        println(meuJogo)
    }
}
1 resposta
solução!

Oi Victor! Tudo bem?

Que bom que você conseguiu resolver o código! Olhando para ele, uma maneira de melhorar e simplificar seria aplicar o conceito de separação de responsabilidades, que é algo que a aula menciona. Isso ajudará a deixar seu código mais organizado e fácil de manter.

Aqui estão algumas sugestões que podem ajudar:

  1. Separação de Responsabilidades: Você pode mover o código responsável por consumir a API para uma classe separada. Isso tornará a Main mais limpa e focada em sua responsabilidade principal.

    class ConsumoApi {
        fun buscaJogo(id: String): InfoJogo? {
            val url = "https://www.cheapshark.com/api/1.0/games?id=$id"
            val client: HttpClient = HttpClient.newHttpClient()
            val request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .build()
    
            return try {
                val response = client.send(request, BodyHandlers.ofString())
                val json = response.body()
                val gson = Gson()
                gson.fromJson(json, InfoJogo::class.java)
            } catch (e: Exception) {
                println("Erro ao buscar jogo: ${e.message}")
                null
            }
        }
    }
    
  2. Uso de Funções: Você pode criar funções para lidar com a entrada do usuário e a exibição dos resultados. Isso ajuda a quebrar o código em partes menores e mais gerenciáveis.

  3. Tratamento de Erros: Ao invés de usar System.exit(1), que encerra o programa abruptamente, você pode lidar com erros de maneira mais amigável, talvez retornando um valor nulo ou uma mensagem de erro.

  4. Simplificação do Fluxo: A lógica para adicionar uma descrição personalizada pode ser movida para uma função separada, o que tornará o main mais legível.

  5. Organização em Pacotes: Como mencionado na aula, organizar suas classes em pacotes pode ajudar a manter o projeto organizado. Por exemplo, você pode ter pacotes como modelo, servicos, e principal.

Implementando essas sugestões, seu código pode ficar mais limpo e fácil de manter.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.