diff options
Diffstat (limited to 'jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/presentation')
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(); + } +} |
