package desafio.excecao;
import com.google.gson.Gson;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class GitHubService {
private static final String URL_GITHUB_USERS = "https://api.github.com/users/";
private static Gson gson = new Gson();
public GitHubUser buscarUser(String nomeUsuario) throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest
.newBuilder()
.uri(URI.create(URL_GITHUB_USERS + nomeUsuario))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
String usuarioJson = response.body();
if(response.statusCode() == 404) {
throw new UsuarioNaoEncontradoException("o usuário: " + nomeUsuario + " não foi encontrado na base do Github, verifique e tente novamente.");
}
return new Gson().fromJson(usuarioJson, GitHubUser.class);
}
public GitHubUserRepo buscarUserComRepo(String nomeUsuario) throws IOException, InterruptedException {
GitHubUser user = this.buscarUser(nomeUsuario);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest
.newBuilder()
.uri(URI.create(user.repos_url()))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if(response.statusCode() == 404) {
throw new UsuarioNaoEncontradoException("o usuário: " + nomeUsuario + " não foi encontrado na base do Github, verifique e tente novamente.");
}
GitHubRepo[] repo = gson.fromJson(response.body(), GitHubRepo[].class);
return new GitHubUserRepo(user, Arrays.asList(repo));
}
}
package desafio.excecao;
public record GitHubUser(String login, String name, String location, String repos_url) {
@Override
public String toString() {
return "GitHubUser{" +
"login='" + login + '\'' +
", name='" + name + '\'' +
", location='" + location + '\'' +
'}';
}
}
package desafio.excecao;
import java.util.List;
public record GitHubRepo(String name, String html_url) {
}
package desafio.excecao;
import java.util.List;
public record GitHubUserRepo(GitHubUser gitHubUser, List<GitHubRepo> repos) {
}
package desafio.excecao;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.Scanner;
public class PrincipalGitHub {
public static void main(String[] args) throws IOException, InterruptedException {
GitHubService gitHubService = new GitHubService();
Scanner sc = new Scanner(System.in);
String menu = """
Olá, seja bem vindo.
Escolha uma das opções abaixo para consulta das informações no GitHub
1- Buscar somente usuário
2- Buscar usuários e repositorios
0- Sair
""";
int opcao = 1;
while (opcao != 0) {
System.out.println(menu);
opcao = Integer.parseInt(sc.nextLine());
switch (opcao) {
case 0:
System.out.println("Saindo...");
break;
case 1:
System.out.println("Por favor, informe o nome de usuário:");
String nome = sc.nextLine();
try {
System.out.println(gitHubService.buscarUser(nome));
break;
} catch (UsuarioNaoEncontradoException e){
System.out.println(e.getMessage());
break;
}
case 2:
System.out.println("Por favor, informe o nome de usuário:");
String usuario = sc.nextLine();
try {
System.out.println(gitHubService.buscarUserComRepo(usuario));
break;
} catch (UsuarioNaoEncontradoException e){
System.out.println(e.getMessage());
break;
}
default:
System.out.println("Opção invalida!");
}
}
}
}