added FeedbackRepository
This commit is contained in:
parent
318a30fe54
commit
ddedcea8ea
@ -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<UUID> users) {}
|
||||||
|
|
||||||
|
public ReqResp<Map<UUID, String>> createFeedbackUrls(Request data) {
|
||||||
|
final Type responseType = new TypeToken<Map<UUID, String>>(){}.getType();
|
||||||
|
ReqResp<Object> rawData = this.post("feedback", data, Object.class);
|
||||||
|
return new ReqResp<>(rawData.status(), this.gson.fromJson(this.gson.toJson(rawData.data()), responseType));
|
||||||
|
}
|
||||||
|
}
|
@ -1,12 +1,13 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.feedback;
|
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.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.Appliance;
|
||||||
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
|
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.feedback.commands.FeedbackCommand;
|
import eu.mhsl.craftattack.spawn.appliances.feedback.commands.FeedbackCommand;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.feedback.commands.RequestFeedbackCommand;
|
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.Component;
|
||||||
import net.kyori.adventure.text.ComponentBuilder;
|
import net.kyori.adventure.text.ComponentBuilder;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
@ -18,33 +19,27 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
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.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class Feedback extends Appliance {
|
public class Feedback extends Appliance {
|
||||||
private final URI apiEndpoint;
|
|
||||||
|
|
||||||
public Feedback() {
|
public Feedback() {
|
||||||
super("feedback");
|
super("feedback");
|
||||||
this.apiEndpoint = URI.create(Objects.requireNonNull(localConfig().getString("api")));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void requestFeedback(String eventName, List<Player> receivers, @Nullable String question) {
|
public void requestFeedback(String eventName, List<Player> receivers, @Nullable String question) {
|
||||||
Map<UUID, String> feedbackUrls = createPersonalizedUrls(
|
ReqResp<Map<UUID, String>> response = this.queryRepository(FeedbackRepository.class).createFeedbackUrls(
|
||||||
new Request(eventName, receivers.stream().map(Entity::getUniqueId).toList())
|
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);
|
Component border = Component.text("-".repeat(40), NamedTextColor.GRAY);
|
||||||
|
|
||||||
receivers.forEach(player -> {
|
receivers.forEach(player -> {
|
||||||
String feedbackUrl = feedbackUrls.get(player.getUniqueId());
|
String feedbackUrl = response.data().get(player.getUniqueId());
|
||||||
if(feedbackUrl == null) {
|
if(feedbackUrl == null) {
|
||||||
Main.logger().warning(String.format("FeedbackUrl not found for player '%s' from backend!", player.getUniqueId()));
|
Main.logger().warning(String.format("FeedbackUrl not found for player '%s' from backend!", player.getUniqueId()));
|
||||||
return;
|
return;
|
||||||
@ -72,23 +67,6 @@ public class Feedback extends Appliance {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private record Request(String event, List<UUID> users) {}
|
|
||||||
private final Type responseType = new TypeToken<Map<UUID, String>>(){}.getType();
|
|
||||||
private Map<UUID, String> 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<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
|
|
||||||
return new Gson().fromJson(httpResponse.body(), responseType);
|
|
||||||
} catch(IOException | InterruptedException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected @NotNull List<ApplianceCommand<?>> commands() {
|
protected @NotNull List<ApplianceCommand<?>> commands() {
|
||||||
return List.of(
|
return List.of(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user