discord notify + transaction logging

This commit is contained in:
2025-11-17 20:02:55 +01:00
parent f61d0e15fd
commit 4f1544a16f
4 changed files with 33 additions and 10 deletions

View File

@@ -35,7 +35,7 @@
<dependency>
<groupId>de.infinimotion</groupId>
<artifactId>model-persistence</artifactId>
<version>0.0.101</version>
<version>0.0.110</version>
</dependency>
<!-- Quarkus -->

View File

@@ -5,6 +5,10 @@ import io.vertx.core.Vertx;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -17,6 +21,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
@ApplicationScoped
public class CommandResponseInterceptor {
private static final HttpClient client = HttpClient.newHttpClient();
@Inject
Vertx vertx;
@@ -24,18 +30,32 @@ public class CommandResponseInterceptor {
public void intercept(CommandWrapper response) {
vertx.executeBlocking(() -> {
synchronized (LOCK) {
if (response.getType().equals(CommandCreateEintrittskarteResponse.class.getSimpleName())) {
Eintrittskarte ticket = CommandCreateEintrittskarteResponse.deserialize(response).getEintrittskarte();
interceptCreate(ticket);
} else if (response.getType().equals(CommandUpdateBestellungResponse.class.getSimpleName())) {
Bestellung order = CommandUpdateBestellungResponse.deserialize(response).getBestellung();
interceptUpdate(order);
try {
synchronized (LOCK) {
if (response.getType().equals(CommandCreateEintrittskarteResponse.class.getSimpleName())) {
Eintrittskarte ticket = CommandCreateEintrittskarteResponse.deserialize(response).getEintrittskarte();
interceptCreate(ticket);
} else if (response.getType().equals(CommandUpdateBestellungResponse.class.getSimpleName())) {
Bestellung order = CommandUpdateBestellungResponse.deserialize(response).getBestellung();
interceptUpdate(order);
} else if (response.getType().equals(CommandCreateBestellungResponse.class.getSimpleName())) {
// Sendet eine Discord-Benachrichtigung beim Erstellen einer neuen Bestellung:
// Das ist für das Projekt irrelevant und kann ignoriert werden, wir wollten es aber ausprobieren :)
Bestellung order = CommandUpdateBestellungResponse.deserialize(response).getBestellung();
HttpRequest discordWebhook = HttpRequest
.newBuilder()
.uri(URI.create("https://discord.com/api/webhooks/1438939377337110639/zswqN9Oo_WK8-ObkSpwAzGDLB-978m33xjhate3IYaZ5g7AxxpqsPZhRyviOCPg8ZjwD"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"content\":\"Neue Bestellung: %s\"}".formatted(order.getCode()))).build();
client.send(discordWebhook, HttpResponse.BodyHandlers.ofString());
}
return null;
}
return null;
} catch (Exception e) {
e.printStackTrace();
throw e;
}
});
}
public void interceptCreate(Eintrittskarte ticket) {

View File

@@ -49,6 +49,7 @@ public class Transaction extends Thread {
});
} catch (QuarkusTransactionException e) {
if (!(e.getCause() instanceof InitiateRollbackException)) {
e.printStackTrace();
throw e;
}
} finally {

View File

@@ -10,6 +10,7 @@ kafka.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule r
mp.messaging.incoming.command.connector=smallrye-kafka
mp.messaging.incoming.command.auto.offset.reset=earliest
mp.messaging.incoming.command.assign-seek=0
mp.messaging.outgoing.command-replies.connector=smallrye-kafka
@@ -19,6 +20,7 @@ quarkus.datasource.username=postgres
quarkus.datasource.password=a552855c0d842e90895121cf614c31f950086cab
%dev.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/postgres
quarkus.datasource.jdbc.url=jdbc:postgresql://postgres:5432/postgres
quarkus.datasource.jdbc.transaction-isolation-level=serializable
quarkus.mongodb.connection-string = mongodb://root:a552855c0d842e90895121cf614c31f950086cab@mongo:27017
%dev.quarkus.mongodb.connection-string = mongodb://root:a552855c0d842e90895121cf614c31f950086cab@localhost:27017