diff --git a/pom.xml b/pom.xml index e19f15e..f9aec58 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ de.infinimotion model-persistence - 0.0.101 + 0.0.110 diff --git a/src/main/java/de/infinimotion/persistence/processor/CommandResponseInterceptor.java b/src/main/java/de/infinimotion/persistence/processor/CommandResponseInterceptor.java index 936026b..ea7e49f 100644 --- a/src/main/java/de/infinimotion/persistence/processor/CommandResponseInterceptor.java +++ b/src/main/java/de/infinimotion/persistence/processor/CommandResponseInterceptor.java @@ -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) { diff --git a/src/main/java/de/infinimotion/persistence/transaction/Transaction.java b/src/main/java/de/infinimotion/persistence/transaction/Transaction.java index 038590c..5cd0a3d 100644 --- a/src/main/java/de/infinimotion/persistence/transaction/Transaction.java +++ b/src/main/java/de/infinimotion/persistence/transaction/Transaction.java @@ -49,6 +49,7 @@ public class Transaction extends Thread { }); } catch (QuarkusTransactionException e) { if (!(e.getCause() instanceof InitiateRollbackException)) { + e.printStackTrace(); throw e; } } finally { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ea7669a..9ff12b7 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -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