implemented reports request in Report.java

This commit is contained in:
Lars Neuhaus 2024-12-05 22:16:15 +01:00
parent 0276763a8d
commit 694ca0efba
2 changed files with 25 additions and 46 deletions

View File

@ -2,7 +2,6 @@ package eu.mhsl.craftattack.spawn.api.client.repositories;
import eu.mhsl.craftattack.spawn.api.client.HttpRepository;
import eu.mhsl.craftattack.spawn.api.client.ReqResp;
import eu.mhsl.craftattack.spawn.appliances.report.Report;
import eu.mhsl.craftattack.spawn.util.api.ApiUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@ -31,6 +30,10 @@ public class ReportRepository extends HttpRepository {
}
public ReqResp<ReportsResponse> queryReports(UUID player) {
return this.get("reports", (builder) -> builder.addParameter("token", "asd"), input, SendReportResponse.class);
return this.get(
"report",
uriBuilder -> uriBuilder.addParameter("uuid", player.toString()),
ReportRepository.ReportsResponse.class
);
}
}

View File

@ -2,6 +2,8 @@ package eu.mhsl.craftattack.spawn.appliances.report;
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.ReportRepository;
import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
import net.kyori.adventure.text.Component;
@ -51,15 +53,6 @@ public class Report extends Appliance {
private record ReportResponse(@NotNull String url) {
}
private record ReportsResponse(List<ReportInfo> from_self, Object to_self) {
}
private record ReportInfo(Reporter reported, @NotNull String subject, boolean draft, @NotNull String status, @NotNull String url) {
}
private record Reporter(@NotNull String username, @NotNull String uuid) {
}
public void reportToUnknown(@NotNull Player issuer) {
Request request = new Request(issuer.getUniqueId(), null, "");
this.issueReport(issuer, request);
@ -79,25 +72,20 @@ public class Report extends Appliance {
}
public void requestReports(Player issuer) {
URIBuilder uriBuilder = new URIBuilder(this.apiEndpoint);
uriBuilder.addParameter("secret", apiSecret);
uriBuilder.addParameter("uuid", issuer.getUniqueId().toString());
ReqResp<ReportRepository.ReportsResponse> response = this.queryRepository(ReportRepository.class).queryReports(issuer.getUniqueId());
try(HttpClient client = HttpClient.newHttpClient()) {
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(uriBuilder.build())
.header("Content-Type", "application/json")
.GET()
.build();
HttpResponse<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
this.printReports(issuer, httpResponse);
} catch (IOException | InterruptedException | URISyntaxException e) {
if(response.status() != 200) {
Main.logger().warning("Failed to request Reports: " + response.status());
issuer.sendMessage(
Component.text("Internal server description: " + e.getMessage()).color(NamedTextColor.RED)
Component.text()
.append(Component.text("Interner Serverfehler beim abfragen der Reports.", NamedTextColor.RED))
.appendNewline()
.append(Component.text("Bitte melde dich bei einem Admin!", NamedTextColor.RED))
);
throw new RuntimeException(e);
return;
}
this.printReports(issuer, response);
}
private void issueReport(Player issuer, Request reportRequest) {
@ -121,21 +109,9 @@ public class Report extends Appliance {
}
}
private void printReports(Player issuer, HttpResponse<String> httpResponse) {
if(httpResponse.statusCode() != 200) {
Main.logger().warning("Failed to request Reports: " + httpResponse.statusCode());
issuer.sendMessage(
Component.text()
.append(Component.text("Interner Serverfehler beim abfragen der Reports.", NamedTextColor.RED))
.appendNewline()
.append(Component.text("Bitte melde dich bei einem Admin!", NamedTextColor.RED))
);
return;
}
List<ReportInfo> reports = new Gson().fromJson(httpResponse.body(), ReportsResponse.class).from_self;
reports.removeIf(reportInfo -> reportInfo.draft);
private void printReports(Player issuer, ReqResp<ReportRepository.ReportsResponse> response) {
List<ReportRepository.ReportInfo> reports = response.data().from_self();
reports.removeIf(ReportRepository.ReportInfo::draft);
if(reports.isEmpty()) {
issuer.sendMessage(
Component.text()
@ -158,9 +134,9 @@ public class Report extends Appliance {
component.append(
Component.text()
.append(Component.text(" - ", NamedTextColor.WHITE))
.append(Component.text(reportInfo.reported.username, NamedTextColor.WHITE))
.append(Component.text(String.format(": %s", reportInfo.subject), NamedTextColor.GRAY))
.clickEvent(ClickEvent.openUrl(reportInfo.url))
.append(Component.text(reportInfo.reported().username(), NamedTextColor.WHITE))
.append(Component.text(String.format(": %s", reportInfo.subject()), NamedTextColor.GRAY))
.clickEvent(ClickEvent.openUrl(reportInfo.url()))
.hoverEvent(HoverEvent.showText(Component.text("Klicke, um den Report einzusehen.", NamedTextColor.GOLD)))
);
component.appendNewline();