diff --git a/pom.xml b/pom.xml index 7c0304e..4160cb3 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ de.infinimotion model-persistence - 0.0.38 + 0.0.44 diff --git a/src/main/java/de/infinimotion/persistence/CommandObserver.java b/src/main/java/de/infinimotion/persistence/CommandObserver.java new file mode 100644 index 0000000..e7b6b61 --- /dev/null +++ b/src/main/java/de/infinimotion/persistence/CommandObserver.java @@ -0,0 +1,28 @@ +package de.infinimotion.persistence; + +import de.infinimotion.model.persistence.*; +import jakarta.enterprise.context.ApplicationScoped; +import org.eclipse.microprofile.reactive.messaging.Incoming; +import org.eclipse.microprofile.reactive.messaging.Outgoing; + +import java.io.IOException; + + +@ApplicationScoped +public class CommandObserver { + + @Incoming("command") + @Outgoing("command-replies") + public CommandWrapper process(CommandWrapper request) throws IOException { + System.out.println(request); + try { + return request.process().serialize().copyIds(request); + } catch (Throwable t) { + t.printStackTrace(); + CommandException e = new CommandException(); + e.setException(t.getMessage()); + return e.serialize().copyIds(request); + } + } + +} diff --git a/src/main/java/de/infinimotion/persistence/CommandProcessor.java b/src/main/java/de/infinimotion/persistence/CommandProcessor.java deleted file mode 100644 index 9183201..0000000 --- a/src/main/java/de/infinimotion/persistence/CommandProcessor.java +++ /dev/null @@ -1,64 +0,0 @@ -package de.infinimotion.persistence; - -import de.infinimotion.model.persistence.*; -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; -import jakarta.persistence.EntityManager; -import jakarta.transaction.Transactional; -import org.eclipse.microprofile.reactive.messaging.Incoming; -import org.eclipse.microprofile.reactive.messaging.Outgoing; - -import java.io.IOException; -import java.util.List; -import java.util.Map; - -@ApplicationScoped -public class CommandProcessor { - - @Inject - EntityManager em; - - private Map> processors - = Map.of(CommandListKinosaal.class.getSimpleName(), this::processListKinosaal, - CommandCreateKinosaal.class.getSimpleName(), this::processCreateKinosaal); - - @Incoming("command") - @Outgoing("command-replies") - public CommandWrapper process(CommandWrapper request) throws IOException { - try { - ThrowingFunction processor = processors.get(request.getType()); - if (processor == null) { - CommandException e = new CommandException(); - e.setException("unknown processor"); - return e.serialize().copyIds(request); - } - - return processor.apply(request).serialize().copyIds(request); - } catch (Throwable t) { - CommandException e = new CommandException(); - e.setException(t.getMessage()); - return e.serialize().copyIds(request); - } - } - - @Transactional - Command processListKinosaal(CommandWrapper wrapper) throws IOException { - CommandListKinosaal request = CommandListKinosaal.deserialize(wrapper); - List results = em.createQuery("SELECT k FROM Kinosaal k", Kinosaal.class).getResultList(); - CommandListKinosaalResponse response = new CommandListKinosaalResponse(); - response.setList(results); - return response; - } - - @Transactional - Command processCreateKinosaal(CommandWrapper wrapper) throws IOException { - CommandCreateKinosaal request = CommandCreateKinosaal.deserialize(wrapper); - Kinosaal hall = new Kinosaal(); - hall.setName(request.getName()); - em.persist(hall); - CommandCreateKinosaalResponse response = new CommandCreateKinosaalResponse(); - response.setHall(hall); - return response; - } - -} diff --git a/src/main/java/de/infinimotion/persistence/ThrowingFunction.java b/src/main/java/de/infinimotion/persistence/ThrowingFunction.java deleted file mode 100644 index ec04237..0000000 --- a/src/main/java/de/infinimotion/persistence/ThrowingFunction.java +++ /dev/null @@ -1,6 +0,0 @@ -package de.infinimotion.persistence; - -@FunctionalInterface -public interface ThrowingFunction { - R apply(T t) throws E; -} diff --git a/src/main/java/de/infinimotion/persistence/processor/KinosaalProcessor.java b/src/main/java/de/infinimotion/persistence/processor/KinosaalProcessor.java new file mode 100644 index 0000000..f643db0 --- /dev/null +++ b/src/main/java/de/infinimotion/persistence/processor/KinosaalProcessor.java @@ -0,0 +1,37 @@ +package de.infinimotion.persistence.processor; + +import de.infinimotion.model.persistence.*; +import io.quarkus.arc.Unremovable; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.persistence.EntityManager; +import jakarta.transaction.Transactional; + +import java.util.List; + +@Unremovable +@ApplicationScoped +public class KinosaalProcessor implements CommandListKinosaalProcessor, CommandCreateKinosaalProcessor { + + @Inject + EntityManager em; + + @Transactional + public Command processCommandListKinosaal(CommandListKinosaal request) { + List results = em.createQuery("SELECT k FROM Kinosaal k", Kinosaal.class).getResultList(); + CommandListKinosaalResponse response = new CommandListKinosaalResponse(); + response.setList(results); + return response; + } + + @Transactional + public Command processCommandCreateKinosaal(CommandCreateKinosaal request) { + Kinosaal hall = new Kinosaal(); + hall.setName(request.getName()); + em.persist(hall); + CommandCreateKinosaalResponse response = new CommandCreateKinosaalResponse(); + response.setHall(hall); + return response; + } + +}