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> <dependency>
<groupId>de.infinimotion</groupId> <groupId>de.infinimotion</groupId>
<artifactId>model-persistence</artifactId> <artifactId>model-persistence</artifactId>
<version>0.0.101</version> <version>0.0.110</version>
</dependency> </dependency>
<!-- Quarkus --> <!-- Quarkus -->

View File

@@ -5,6 +5,10 @@ import io.vertx.core.Vertx;
import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject; 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.List;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
@@ -17,6 +21,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
@ApplicationScoped @ApplicationScoped
public class CommandResponseInterceptor { public class CommandResponseInterceptor {
private static final HttpClient client = HttpClient.newHttpClient();
@Inject @Inject
Vertx vertx; Vertx vertx;
@@ -24,6 +30,7 @@ public class CommandResponseInterceptor {
public void intercept(CommandWrapper response) { public void intercept(CommandWrapper response) {
vertx.executeBlocking(() -> { vertx.executeBlocking(() -> {
try {
synchronized (LOCK) { synchronized (LOCK) {
if (response.getType().equals(CommandCreateEintrittskarteResponse.class.getSimpleName())) { if (response.getType().equals(CommandCreateEintrittskarteResponse.class.getSimpleName())) {
Eintrittskarte ticket = CommandCreateEintrittskarteResponse.deserialize(response).getEintrittskarte(); Eintrittskarte ticket = CommandCreateEintrittskarteResponse.deserialize(response).getEintrittskarte();
@@ -31,11 +38,24 @@ public class CommandResponseInterceptor {
} else if (response.getType().equals(CommandUpdateBestellungResponse.class.getSimpleName())) { } else if (response.getType().equals(CommandUpdateBestellungResponse.class.getSimpleName())) {
Bestellung order = CommandUpdateBestellungResponse.deserialize(response).getBestellung(); Bestellung order = CommandUpdateBestellungResponse.deserialize(response).getBestellung();
interceptUpdate(order); 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) { public void interceptCreate(Eintrittskarte ticket) {

View File

@@ -49,6 +49,7 @@ public class Transaction extends Thread {
}); });
} catch (QuarkusTransactionException e) { } catch (QuarkusTransactionException e) {
if (!(e.getCause() instanceof InitiateRollbackException)) { if (!(e.getCause() instanceof InitiateRollbackException)) {
e.printStackTrace();
throw e; throw e;
} }
} finally { } 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.connector=smallrye-kafka
mp.messaging.incoming.command.auto.offset.reset=earliest mp.messaging.incoming.command.auto.offset.reset=earliest
mp.messaging.incoming.command.assign-seek=0
mp.messaging.outgoing.command-replies.connector=smallrye-kafka mp.messaging.outgoing.command-replies.connector=smallrye-kafka
@@ -19,6 +20,7 @@ quarkus.datasource.username=postgres
quarkus.datasource.password=a552855c0d842e90895121cf614c31f950086cab quarkus.datasource.password=a552855c0d842e90895121cf614c31f950086cab
%dev.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/postgres %dev.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/postgres
quarkus.datasource.jdbc.url=jdbc:postgresql://postgres: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 quarkus.mongodb.connection-string = mongodb://root:a552855c0d842e90895121cf614c31f950086cab@mongo:27017
%dev.quarkus.mongodb.connection-string = mongodb://root:a552855c0d842e90895121cf614c31f950086cab@localhost:27017 %dev.quarkus.mongodb.connection-string = mongodb://root:a552855c0d842e90895121cf614c31f950086cab@localhost:27017