summaryrefslogtreecommitdiff
path: root/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation
diff options
context:
space:
mode:
Diffstat (limited to 'jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation')
-rw-r--r--jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation/rest/HelloWorldResource.java19
-rw-r--r--jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation/rest/ItemProducerResource.java154
-rw-r--r--jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation/subscriber/AggregateSubscriber.java47
3 files changed, 220 insertions, 0 deletions
diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation/rest/HelloWorldResource.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation/rest/HelloWorldResource.java
new file mode 100644
index 0000000..9f9cb70
--- /dev/null
+++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation/rest/HelloWorldResource.java
@@ -0,0 +1,19 @@
+package fr.epita.assistants.item_producer.presentation.rest;
+
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
+
+@Path("/hello")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.TEXT_PLAIN)
+public class HelloWorldResource {
+ @GET @Path("/")
+ public String helloWorld() {
+ return "Hello World!";
+ }
+
+ @GET @Path("/{name}")
+ public String helloWorld(@PathParam("name") String name) {
+ return "Hello " + name + "!";
+ }
+}
diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation/rest/ItemProducerResource.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation/rest/ItemProducerResource.java
new file mode 100644
index 0000000..fcebee9
--- /dev/null
+++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation/rest/ItemProducerResource.java
@@ -0,0 +1,154 @@
+package fr.epita.assistants.item_producer.presentation.rest;
+
+import fr.epita.assistants.common.api.request.MoveRequest;
+import fr.epita.assistants.common.api.request.StartRequest;
+import fr.epita.assistants.common.api.response.MoveResponse;
+import fr.epita.assistants.common.api.response.StartResponse;
+import fr.epita.assistants.common.utils.ErrorInfo;
+import fr.epita.assistants.item_producer.converter.ItemProducerConverter;
+import fr.epita.assistants.item_producer.domain.service.ItemProducerService;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+
+@Path("/")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class ItemProducerResource {
+ @Inject
+ ItemProducerService itemProducerService;
+
+ @Path("/")
+ @GET
+ public Response getInventory() {
+ Response.ResponseBuilder rb;
+ if (!itemProducerService.isGameRunning())
+ rb = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("Game is not running"));
+ else
+ rb = Response.ok(ItemProducerConverter.EntityToResponse(itemProducerService.getAllItems()));
+ return rb.build();
+ }
+
+ @Path("player")
+ @GET
+ public Response getPlayer() {
+ Response.ResponseBuilder rb;
+ if (!itemProducerService.isGameRunning())
+ rb = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("Game is not running"));
+ else
+ rb = Response.ok(ItemProducerConverter.EntityToResponse(itemProducerService.getCurrentPlayer()));
+ return rb.build();
+ }
+ @Path("start")
+ @POST
+ public Response start(StartRequest startRequest) {
+ StartResponse r = ItemProducerConverter.EntityToResponse(itemProducerService.startGame(ItemProducerConverter.Start(startRequest)));
+ Response.ResponseBuilder res;
+ if (r == null)
+ res = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("Bad request for /start"));
+ else
+ res = Response.ok(r);
+ return res.build();
+ }
+ @Path("upgrades")
+ @GET
+ public Response getUpgrades() {
+ Response.ResponseBuilder rb;
+ if (!itemProducerService.isGameRunning())
+ rb = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("Game is not running"));
+ else
+ rb = Response.ok(ItemProducerConverter.EntityToResponse(itemProducerService.getUpgradeCosts()));
+ return rb.build();
+ }
+
+ @Path("collect")
+ @POST
+ public Response collect() {
+ Response.ResponseBuilder rb;
+ if (!itemProducerService.isGameRunning())
+ rb = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("Game is not running"));
+ else if (!itemProducerService.canCollect())
+ rb = Response.status(Response.Status.TOO_MANY_REQUESTS).entity(new ErrorInfo("Input too early, wait " +
+ "before trying to move again"));
+ else {
+ StartResponse rep = ItemProducerConverter.EntityToResponse(itemProducerService.collect());
+ if (rep == null)
+ rb = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("Can't collect on this tile"));
+ else
+ rb = Response.ok(rep);
+ }
+ return rb.build();
+ }
+
+ @Path("move")
+ @POST
+ public Response move(MoveRequest moveRequest) {
+ Response.ResponseBuilder rb;
+ if (!itemProducerService.isGameRunning())
+ rb = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("Game is not running"));
+ else if (!itemProducerService.canMove())
+ rb = Response.status(Response.Status.TOO_MANY_REQUESTS).entity(new ErrorInfo("Input too early, wait " +
+ "before trying to move again"));
+ else {
+ MoveResponse rep = ItemProducerConverter.EntityToResponse(itemProducerService.move(moveRequest.getDirection()));
+ if (rep == null)
+ rb = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("Tried to move out of bounds " +
+ "(or maybe you felt like you were Jesus)"));
+ else
+ rb = Response.ok(rep);
+ }
+ return rb.build();
+ }
+
+ @Path("upgrade/collect")
+ @PATCH
+ public Response upgradeCollect() {
+ Response.ResponseBuilder rb;
+ if (!itemProducerService.isGameRunning())
+ rb = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("Game is not running."));
+ else if (itemProducerService.getMoney() == null)
+ rb = Response.status(Response.Status.NOT_FOUND).entity(new ErrorInfo("No money was found."));
+ else if (itemProducerService.getMoney() < itemProducerService.getUpgradeCosts().getUpgradeCollectCost())
+ rb = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("You are poor."));
+ else {
+ itemProducerService.upgradeCollect();
+ rb = Response.noContent();
+ }
+ return rb.build();
+ }
+
+ @Path("upgrade/move")
+ @PATCH
+ public Response upgradeMove() {
+ Response.ResponseBuilder rb;
+ if (!itemProducerService.isGameRunning())
+ rb = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("Game is not running."));
+ else if (itemProducerService.getMoney() == null)
+ rb = Response.status(Response.Status.NOT_FOUND).entity(new ErrorInfo("No money was found."));
+ else if (itemProducerService.getMoney() < itemProducerService.getUpgradeCosts().getUpgradeMoveCost())
+ rb = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("You are poor."));
+ else {
+ itemProducerService.upgradeMove();
+ rb = Response.noContent();
+ }
+ return rb.build();
+ }
+
+ @Path("upgrade/stamina")
+ @PATCH
+ public Response upgradeStamina() {
+ Response.ResponseBuilder rb;
+ if (!itemProducerService.isGameRunning())
+ rb = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("Game is not running."));
+ else if (itemProducerService.getMoney() == null)
+ rb = Response.status(Response.Status.NOT_FOUND).entity(new ErrorInfo("No money was found."));
+ else if (itemProducerService.getMoney() < itemProducerService.getUpgradeCosts().getUpgradeStaminaCost())
+ rb = Response.status(Response.Status.BAD_REQUEST).entity(new ErrorInfo("You are poor."));
+ else {
+ itemProducerService.upgradeStamina();
+ rb = Response.noContent();
+ }
+ return rb.build();
+ }
+}
diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation/subscriber/AggregateSubscriber.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation/subscriber/AggregateSubscriber.java
new file mode 100644
index 0000000..c6f3231
--- /dev/null
+++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation/subscriber/AggregateSubscriber.java
@@ -0,0 +1,47 @@
+package fr.epita.assistants.item_producer.presentation.subscriber;
+
+import fr.epita.assistants.common.aggregate.ItemAggregate;
+import fr.epita.assistants.common.aggregate.ResetInventoryAggregate;
+import fr.epita.assistants.common.aggregate.UpgradeItemProducerAggregate;
+import fr.epita.assistants.item_producer.domain.service.ItemProducerService;
+import io.smallrye.reactive.messaging.annotations.Broadcast;
+import jakarta.inject.Inject;
+import org.eclipse.microprofile.reactive.messaging.Incoming;
+
+public class AggregateSubscriber {
+ @Inject
+ ItemProducerService itemProducerService;
+
+ @Broadcast
+ @Incoming("reset-inventory-aggregate")
+ public void commandListener(ResetInventoryAggregate aggregate) {
+ itemProducerService.clearItems(aggregate);
+ }
+
+ @Broadcast
+ @Incoming("collect-item-aggregate")
+ public void commandListener(ItemAggregate agr) {
+ itemProducerService.collectItem(agr);
+ }
+
+ @Broadcast
+ @Incoming("upgrade-collect-rate-aggregate")
+ public void collectCommandListener(UpgradeItemProducerAggregate agr) {
+ itemProducerService.pay(agr.getNewMoney());
+ itemProducerService.updateCollect();
+ }
+
+ @Broadcast
+ @Incoming("upgrade-movement-speed-aggregate")
+ public void moveCommandListener(UpgradeItemProducerAggregate agr) {
+ itemProducerService.pay(agr.getNewMoney());
+ itemProducerService.updateMove();
+ }
+
+ @Broadcast
+ @Incoming("upgrade-stamina-aggregate")
+ public void staminaCommandListener(UpgradeItemProducerAggregate agr) {
+ itemProducerService.pay(agr.getNewMoney());
+ itemProducerService.updateStamina();
+ }
+}