From 8614366254bbd8216bcf6a68a1c1ea5c382e952e Mon Sep 17 00:00:00 2001 From: Lennart Heinrich Date: Mon, 17 Nov 2025 20:02:04 +0100 Subject: [PATCH] order api + statistics --- pom.xml | 2 +- .../backend/endpoint/OrderTx.java | 44 +++++++++++++++++++ .../backend/endpoint/Statistics.java | 21 ++++++++- src/main/resources/application.properties | 1 + 4 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 src/main/java/de/infinimotion/backend/endpoint/OrderTx.java diff --git a/pom.xml b/pom.xml index 1bb3bc2..30adabb 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ de.infinimotion model-backend - 0.0.101 + 0.0.110 diff --git a/src/main/java/de/infinimotion/backend/endpoint/OrderTx.java b/src/main/java/de/infinimotion/backend/endpoint/OrderTx.java new file mode 100644 index 0000000..6a6efa2 --- /dev/null +++ b/src/main/java/de/infinimotion/backend/endpoint/OrderTx.java @@ -0,0 +1,44 @@ +package de.infinimotion.backend.endpoint; + +import de.infinimotion.model.backend.*; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; + +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +@ApplicationScoped +@Path("/order-transaction") +public class OrderTx { + + @Inject + RequestReply requester; + + @POST + @Path("/create") + public OrderTransaction createOrderTransaction(OrderTransaction orderTransaction) throws Exception { + CommandWrapper orderRequest = new CommandCreateBestellung(orderTransaction.getOrder()).serialize().generateIds(); + Bestellung orderResponse = CommandCreateBestellungResponse.deserialize(requester.request(orderRequest)).getBestellung(); + + AtomicInteger countDown = new AtomicInteger(orderTransaction.getTickets().size()); + List ticketResponses = orderTransaction.getTickets().stream().map(ticket -> { + try { + ticket.setOrder(orderResponse); + CommandWrapper ticketRequest = new CommandCreateEintrittskarte(ticket).serialize().tx(orderRequest); + if (countDown.decrementAndGet() == 0) { + ticketRequest.commit(); + } + return CommandCreateEintrittskarteResponse.deserialize(requester.request(ticketRequest)).getEintrittskarte(); + } catch (Exception e) { + throw new RuntimeException(e); + } + }).toList(); + + orderTransaction.setOrder(orderResponse); + orderTransaction.setTickets(ticketResponses); + return orderTransaction; + } + +} diff --git a/src/main/java/de/infinimotion/backend/endpoint/Statistics.java b/src/main/java/de/infinimotion/backend/endpoint/Statistics.java index 9b49181..7e038ea 100644 --- a/src/main/java/de/infinimotion/backend/endpoint/Statistics.java +++ b/src/main/java/de/infinimotion/backend/endpoint/Statistics.java @@ -15,10 +15,27 @@ public class Statistics { @GET @Path("/list") - public CommandListStatisticsResponse list() throws Exception { + public StatisticsReduced list() throws Exception { CommandListStatistics request = new CommandListStatistics(); CommandWrapper requestWrapper = request.serialize().generateIds().commit(); - return CommandListStatisticsResponse.deserialize(requester.request(requestWrapper)); + CommandListStatisticsResponse response = CommandListStatisticsResponse.deserialize(requester.request(requestWrapper)); + + StatisticsReduced stats = new StatisticsReduced(); + stats.setMovies(response.getMovies().stream().map(movieStats -> { + StatisticsFilmReduced reduced = new StatisticsFilmReduced(); + reduced.setMovie(movieStats.getMovie()); + reduced.setTickets(movieStats.getTickets().size()); + reduced.setEarnings(movieStats.getEarnings()); + return reduced; + }).toList()); + stats.setShows(response.getShows().stream().map(showStats -> { + StatisticsVorstellungReduced reduced = new StatisticsVorstellungReduced(); + reduced.setShow(showStats.getShow()); + reduced.setTickets(showStats.getTickets().size()); + reduced.setEarnings(showStats.getEarnings()); + return reduced; + }).toList()); + return stats; } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 690aeaf..de107fa 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -20,6 +20,7 @@ mp.messaging.outgoing.command.connector=smallrye-kafka mp.messaging.incoming.command-replies.connector=smallrye-kafka mp.messaging.incoming.command-replies.auto.offset.reset=earliest +mp.messaging.incoming.command-replies.assign-seek=0 omdb.api-key=2a3264fc quarkus.rest-client.omdb-api.url=https://omdbapi.com/