discord notify + transaction logging
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -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 -->
|
||||||
|
|||||||
@@ -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,18 +30,32 @@ public class CommandResponseInterceptor {
|
|||||||
|
|
||||||
public void intercept(CommandWrapper response) {
|
public void intercept(CommandWrapper response) {
|
||||||
vertx.executeBlocking(() -> {
|
vertx.executeBlocking(() -> {
|
||||||
synchronized (LOCK) {
|
try {
|
||||||
if (response.getType().equals(CommandCreateEintrittskarteResponse.class.getSimpleName())) {
|
synchronized (LOCK) {
|
||||||
Eintrittskarte ticket = CommandCreateEintrittskarteResponse.deserialize(response).getEintrittskarte();
|
if (response.getType().equals(CommandCreateEintrittskarteResponse.class.getSimpleName())) {
|
||||||
interceptCreate(ticket);
|
Eintrittskarte ticket = CommandCreateEintrittskarteResponse.deserialize(response).getEintrittskarte();
|
||||||
} else if (response.getType().equals(CommandUpdateBestellungResponse.class.getSimpleName())) {
|
interceptCreate(ticket);
|
||||||
Bestellung order = CommandUpdateBestellungResponse.deserialize(response).getBestellung();
|
} else if (response.getType().equals(CommandUpdateBestellungResponse.class.getSimpleName())) {
|
||||||
interceptUpdate(order);
|
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) {
|
public void interceptCreate(Eintrittskarte ticket) {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user