From ddedcea8ea348ec3c4fc17e691bba1d0f5ff4c7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 8 Dec 2024 22:27:54 +0100 Subject: [PATCH] added FeedbackRepository --- .../repositories/FeedbackRepository.java | 25 +++++++++++ .../spawn/appliances/feedback/Feedback.java | 42 +++++-------------- 2 files changed, 35 insertions(+), 32 deletions(-) create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/FeedbackRepository.java diff --git a/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/FeedbackRepository.java b/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/FeedbackRepository.java new file mode 100644 index 0000000..f3eed1c --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/FeedbackRepository.java @@ -0,0 +1,25 @@ +package eu.mhsl.craftattack.spawn.api.client.repositories; + +import com.google.common.reflect.TypeToken; +import eu.mhsl.craftattack.spawn.api.client.HttpRepository; +import eu.mhsl.craftattack.spawn.api.client.ReqResp; +import eu.mhsl.craftattack.spawn.util.api.ApiUtil; + +import java.lang.reflect.Type; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class FeedbackRepository extends HttpRepository { + public FeedbackRepository() { + super(ApiUtil.getBaseUri(), ApiUtil::withAuthorizationSecret); + } + + public record Request(String event, List users) {} + + public ReqResp> createFeedbackUrls(Request data) { + final Type responseType = new TypeToken>(){}.getType(); + ReqResp rawData = this.post("feedback", data, Object.class); + return new ReqResp<>(rawData.status(), this.gson.fromJson(this.gson.toJson(rawData.data()), responseType)); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/feedback/Feedback.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/feedback/Feedback.java index 32a4b4f..cbcdfcb 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/feedback/Feedback.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/feedback/Feedback.java @@ -1,12 +1,13 @@ package eu.mhsl.craftattack.spawn.appliances.feedback; -import com.google.common.reflect.TypeToken; -import com.google.gson.Gson; import eu.mhsl.craftattack.spawn.Main; +import eu.mhsl.craftattack.spawn.api.client.ReqResp; +import eu.mhsl.craftattack.spawn.api.client.repositories.FeedbackRepository; import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; import eu.mhsl.craftattack.spawn.appliances.feedback.commands.FeedbackCommand; import eu.mhsl.craftattack.spawn.appliances.feedback.commands.RequestFeedbackCommand; +import eu.mhsl.craftattack.spawn.util.api.HttpStatus; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.ComponentBuilder; import net.kyori.adventure.text.TextComponent; @@ -18,33 +19,27 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.io.IOException; -import java.lang.reflect.Type; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; import java.util.*; public class Feedback extends Appliance { - private final URI apiEndpoint; - public Feedback() { super("feedback"); - this.apiEndpoint = URI.create(Objects.requireNonNull(localConfig().getString("api"))); } public void requestFeedback(String eventName, List receivers, @Nullable String question) { - Map feedbackUrls = createPersonalizedUrls( - new Request(eventName, receivers.stream().map(Entity::getUniqueId).toList()) + ReqResp> response = this.queryRepository(FeedbackRepository.class).createFeedbackUrls( + new FeedbackRepository.Request(eventName, receivers.stream().map(Entity::getUniqueId).toList()) ); - System.out.println(feedbackUrls.toString()); + System.out.println(response.toString()); + System.out.println(response.status()); + + if(response.status() != HttpStatus.CREATED) throw new RuntimeException(); Component border = Component.text("-".repeat(40), NamedTextColor.GRAY); receivers.forEach(player -> { - String feedbackUrl = feedbackUrls.get(player.getUniqueId()); + String feedbackUrl = response.data().get(player.getUniqueId()); if(feedbackUrl == null) { Main.logger().warning(String.format("FeedbackUrl not found for player '%s' from backend!", player.getUniqueId())); return; @@ -72,23 +67,6 @@ public class Feedback extends Appliance { }); } - private record Request(String event, List users) {} - private final Type responseType = new TypeToken>(){}.getType(); - private Map createPersonalizedUrls(Request data) { - try(HttpClient client = HttpClient.newHttpClient()) { - HttpRequest httpRequest = HttpRequest.newBuilder() - .uri(this.apiEndpoint) - .header("Content-Type", "application/json") - .POST(HttpRequest.BodyPublishers.ofString(new Gson().toJson(data))) - .build(); - - HttpResponse httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString()); - return new Gson().fromJson(httpResponse.body(), responseType); - } catch(IOException | InterruptedException e) { - throw new RuntimeException(e); - } - } - @Override protected @NotNull List> commands() { return List.of(