Fiz o desafio número 3, mas de uma forma que acho ser mais profissional, como se estivesse fazendo isso para uma empresa, me colocando como um desenvolvedor júnior. Aí decidi usar coisas que ainda não sei totalmente, como o uso do Jackson, que é uma biblioteca para manipular arquivos JSON
. Também usei engenharia de prompt e pedi ao ChatGPT para elaborar um desafio para mim sobre o que foi pedido no desafio 3:
"Crie um programa Java que faça uma consulta à API do TheMealDB utilizando as classes HttpClient, HttpRequest e HttpResponse. Solicite ao usuário que insira o nome de uma receita e exiba as informações disponíveis sobre essa receita."
O resultado eu postei no meu GitHub. Provavelmente o código todo não cabe aqui.
Class Main
Package Util
Class MealParser
Package Service
Interface SearchStragety
Class MealService
Enum URL
Package Infra
Record HttpClientProvider
Package Infra.http.response
Class MealResponse
Package Factory
Class SearchFactory
package com.github.rickmvi.com.mealdb.app.factory;
import com.github.rickmvi.com.mealdb.app.service.SearchStrategy;
import com.github.rickmvi.com.mealdb.app.util.Verify;
import java.util.Map;
public class SearchFactory {
private static final Map<Class<?>, SearchStrategy> strategies =
Map.of(
String.class, (searchTerm, baseUrl) -> baseUrl + searchTerm,
Number.class, (searchTerm, baseUrl) -> baseUrl + searchTerm,
Character.class, (searchTerm, baseUrl) -> baseUrl + searchTerm
);
public static String create(Object searchTerm, String baseUrl) {
Verify.notNull(searchTerm, "Search term cannot be null");
SearchStrategy strategy = strategies.get(searchTerm.getClass());
Verify.notNull(strategy, "No strategy found for search term type: " + searchTerm.getClass());
return strategy.build(searchTerm, baseUrl);
}
}
Final Class Verify
package com.github.rickmvi.com.mealdb.app.util;
import org.jetbrains.annotations.Contract;
@lombok.experimental.UtilityClass
public class Verify {
@Contract(value = "null, _ -> fail", pure = true)
public static void notNull(Object object, String message) {
if (object == null) throw new IllegalArgumentException(message);
}
@Contract("null, _ -> fail")
public static void notEmpty(String string, String message) {
if (string == null || string.isEmpty()) throw new IllegalArgumentException(message);
}
@Contract(value = "true, _ -> fail", pure = true)
public static void ifTrue(boolean condition, String message) {
if (condition) throw new IllegalArgumentException(message);
}
@Contract(value = "false, _ -> fail", pure = true)
public static void ifFalse(boolean condition, String message) {
if (!condition) throw new IllegalArgumentException(message);
}
@Contract(value = "!null, _ -> fail", pure = true)
public static void isNull(Object object, String message) {
if (object != null) throw new IllegalArgumentException(message);
}
}
Package Domain
Class Meal
pom.xml