diff --git a/README.md b/README.md deleted file mode 100644 index bb23564..0000000 --- a/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# JWS - -> **Note** This is a school project, therefore it probably won't interest you if you are looking for something useful. - -## Overview - -JWS stands for Java Web Services and as its name doesn't suggest at all, it's basically a web server for a a pokemon-like game. It's written in Java and built onto Quarkus and Jakarta, providing a REST API with strict server-side rules like cooldowns and cheating prevention. - -## Architecture - -> **Note** Source code is located inside the `yakamon` folder, both others are school requirements and aren't important - -Each layer is strictly separated and can only communicate via to the one directly below or above it via converters. - -### Presentation Layer (REST & DTOs) -* located at `yakamon/jws/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation` -* Handled by JAX-RS (Jakarta RESTful Web Services). -* Exposes standard HTTP endpoints (`/player`, `/move`, `/yakadex`, etc.). Full API specification can be found inside `yakamon/src/main/resources/openapi.yaml` -* Implements strict **Data Transfer Objects (DTOs)** for both Requests and Responses to ensure the internal database models are never exposed directly to the client. - -### Business Logic Layer (Services) -* located at `yakamon/jws/yakamon/src/main/java/fr/epita/assistants/yakamon/domain` -* Acts as the brain of the application. -* Implements complex game rules: validating if a target tile is walkable based on the terrain type, calculating cooldowns between moves, and managing creature capture probabilities. -* **Converters** are used to translate Entities from the Data Layer into DTOs for the Presentation Layer. - -### Data Access Layer (Hibernate ORM) -* located at `yakamon/jws/yakamon/src/main/java/fr/epita/assistants/yakamon/data` -* Manages persistence using **Hibernate ORM** with the Active Record / Repository pattern. -* Defines relational entities (Player, Game, Yakamon, Item) mapped to a PostgreSQL database. - diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/ItemModel.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/ItemModel.java index e71d104..ff1a256 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/ItemModel.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/ItemModel.java @@ -9,34 +9,10 @@ public class ItemModel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private Integer id; + protected Integer id; @Enumerated - private ItemType type; + public ItemType type; - private Integer quantity; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public ItemType getType() { - return type; - } - - public void setType(ItemType type) { - this.type = type; - } - - public Integer getQuantity() { - return quantity; - } - - public void setQuantity(Integer quantity) { - this.quantity = quantity; - } + public Integer quantity; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/GameService.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/GameService.java index 29abf6e..0d4fd1c 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/GameService.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/GameService.java @@ -59,8 +59,8 @@ public class GameService { // Initialize player inventory ItemModel yakaballs = new ItemModel(); - yakaballs.setType(ItemType.YAKABALL); - yakaballs.setQuantity(5); + yakaballs.type = ItemType.YAKABALL; + yakaballs.quantity = 5; // Store playerRepository.persist(player); diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/PlayerService.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/PlayerService.java index 954eea4..d8bd07c 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/PlayerService.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/PlayerService.java @@ -145,7 +145,7 @@ public class PlayerService { ItemModel yakaballItem = itemRepository .find("type", ItemType.YAKABALL) .firstResult(); - if (yakaballItem == null || yakaballItem.getQuantity() < 1) { + if (yakaballItem == null || yakaballItem.quantity < 1) { throw new WebApplicationException( Response.status(400).entity("Not enough Yakaballs").build() ); @@ -170,7 +170,7 @@ public class PlayerService { ErrorCode.BAD_REQUEST.throwException("Yakamon species not found"); } - yakaballItem.setQuantity(yakaballItem.getQuantity() - 1); + yakaballItem.quantity -= 1; itemRepository.persist(yakaballItem); YakamonModel newYakamon = new YakamonModel(); @@ -342,11 +342,11 @@ public class PlayerService { .firstResult(); if (item == null) { item = new ItemModel(); - item.setType(itemType); - item.setQuantity(1); + item.type = itemType; + item.quantity = 1; itemRepository.persist(item); } else { - item.setQuantity(item.getQuantity() + 1); + item.quantity += 1; itemRepository.persist(item); } } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/YakamonAction.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/YakamonAction.java index 6faef97..5b307d3 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/YakamonAction.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/YakamonAction.java @@ -1,9 +1,7 @@ package fr.epita.assistants.yakamon.presentation.api; import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; -@NoArgsConstructor @AllArgsConstructor public class YakamonAction { diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/StartGameRequest.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/StartGameRequest.java index 885e164..97461d1 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/StartGameRequest.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/StartGameRequest.java @@ -1,9 +1,7 @@ package fr.epita.assistants.yakamon.presentation.api.request; import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; -@NoArgsConstructor @AllArgsConstructor public class StartGameRequest { diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamFeedRequest.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamFeedRequest.java index 5c9fbfa..8d094b0 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamFeedRequest.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamFeedRequest.java @@ -1,10 +1,8 @@ package fr.epita.assistants.yakamon.presentation.api.request; import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; @AllArgsConstructor -@NoArgsConstructor public class TeamFeedRequest { public Integer quantity; diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamRenameRequest.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamRenameRequest.java index db76322..bceb7e2 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamRenameRequest.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamRenameRequest.java @@ -1,10 +1,8 @@ package fr.epita.assistants.yakamon.presentation.api.request; import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; @AllArgsConstructor -@NoArgsConstructor public class TeamRenameRequest { public String newNickname; diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/GetInventoryResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/GetInventoryResponse.java index 3a1cf7e..8b4a708 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/GetInventoryResponse.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/GetInventoryResponse.java @@ -2,37 +2,21 @@ package fr.epita.assistants.yakamon.presentation.api.response; import java.util.List; import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; @AllArgsConstructor -@NoArgsConstructor public class GetInventoryResponse { public class ItemType { public String type; public String value; - - public ItemType() {} - - public ItemType(String type, String value) { - this.type = type; - this.value = value; - } } public class Items { public ItemType itemType; public Integer quantity; - - public Items() {} - - public Items(ItemType itemType, Integer quantity) { - this.itemType = itemType; - this.quantity = quantity; - } } - public List items; + List items; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerCatchResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerCatchResponse.java index 9ca2b4d..499002b 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerCatchResponse.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerCatchResponse.java @@ -1,9 +1,7 @@ package fr.epita.assistants.yakamon.presentation.api.response; import fr.epita.assistants.yakamon.presentation.api.YakamonAction; -import lombok.NoArgsConstructor; -@NoArgsConstructor public class PlayerCatchResponse extends YakamonAction { public PlayerCatchResponse( diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerCollectResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerCollectResponse.java index 200336f..1ac932c 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerCollectResponse.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerCollectResponse.java @@ -3,36 +3,20 @@ package fr.epita.assistants.yakamon.presentation.api.response; import fr.epita.assistants.yakamon.utils.tile.ItemType; import fr.epita.assistants.yakamon.utils.tile.TerrainType; import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; @AllArgsConstructor -@NoArgsConstructor public class PlayerCollectResponse { public class TileType { public class Collectible { - public ItemType type; - public String value; - - public Collectible() {} - - public Collectible(ItemType type, String value) { - this.type = type; - this.value = value; - } + ItemType type; + String value; } - public TerrainType terrainType; - public Collectible collectible; - - public TileType() {} - - public TileType(TerrainType terrainType, Collectible collectible) { - this.terrainType = terrainType; - this.collectible = collectible; - } + TerrainType terrainType; + Collectible collectible; } public TileType tileType; diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerInfosResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerInfosResponse.java index c4fa464..7773e89 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerInfosResponse.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerInfosResponse.java @@ -1,9 +1,7 @@ package fr.epita.assistants.yakamon.presentation.api.response; import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; -@NoArgsConstructor @AllArgsConstructor public class PlayerInfosResponse { @@ -12,7 +10,7 @@ public class PlayerInfosResponse { public Integer posX; public Integer posY; public String lastMove; - public String lastCollect; public String lastCatch; + public String lastCollect; public String lastFeed; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamEvolveResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamEvolveResponse.java index 7b97656..5347429 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamEvolveResponse.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamEvolveResponse.java @@ -1,9 +1,7 @@ package fr.epita.assistants.yakamon.presentation.api.response; import fr.epita.assistants.yakamon.presentation.api.YakamonAction; -import lombok.NoArgsConstructor; -@NoArgsConstructor public class TeamEvolveResponse extends YakamonAction { public TeamEvolveResponse( diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamFeedResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamFeedResponse.java index d8b024b..d13d43b 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamFeedResponse.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamFeedResponse.java @@ -1,9 +1,7 @@ package fr.epita.assistants.yakamon.presentation.api.response; import fr.epita.assistants.yakamon.presentation.api.YakamonAction; -import lombok.NoArgsConstructor; -@NoArgsConstructor public class TeamFeedResponse extends YakamonAction { public TeamFeedResponse( diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamInfosResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamInfosResponse.java index cc56a45..e2444ea 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamInfosResponse.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamInfosResponse.java @@ -2,11 +2,9 @@ package fr.epita.assistants.yakamon.presentation.api.response; import fr.epita.assistants.yakamon.presentation.api.YakamonAction; import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; @AllArgsConstructor -@NoArgsConstructor public class TeamInfosResponse { - public YakamonAction[] yakamons; + YakamonAction[] yakamons; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamRenameResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamRenameResponse.java index 2c46caf..a1b7f28 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamRenameResponse.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamRenameResponse.java @@ -1,9 +1,7 @@ package fr.epita.assistants.yakamon.presentation.api.response; import fr.epita.assistants.yakamon.presentation.api.YakamonAction; -import lombok.NoArgsConstructor; -@NoArgsConstructor public class TeamRenameResponse extends YakamonAction { public TeamRenameResponse( diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/YakadexAllInfosResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/YakadexAllInfosResponse.java index 5409a5e..0302209 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/YakadexAllInfosResponse.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/YakadexAllInfosResponse.java @@ -2,11 +2,9 @@ package fr.epita.assistants.yakamon.presentation.api.response; import fr.epita.assistants.yakamon.presentation.api.YakadexEntry; import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; @AllArgsConstructor -@NoArgsConstructor public class YakadexAllInfosResponse { - public YakadexEntry[] entries; + YakadexEntry[] entries; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/InventoryResource.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/InventoryResource.java index c8af0e9..ff1c655 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/InventoryResource.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/InventoryResource.java @@ -41,10 +41,10 @@ public class InventoryResource { for (ItemModel item : items) { GetInventoryResponse.Items responseItem = temp.new Items(); GetInventoryResponse.ItemType itemType = temp.new ItemType(); - itemType.type = item.getType().name(); - itemType.value = item.getType().name(); + itemType.type = item.type.name(); + itemType.value = item.type.name(); responseItem.itemType = itemType; - responseItem.quantity = item.getQuantity(); + responseItem.quantity = item.quantity; responseItems.add(responseItem); } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/PlayerResource.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/PlayerResource.java index 174f90e..fdfd8e4 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/PlayerResource.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/PlayerResource.java @@ -123,12 +123,12 @@ public class PlayerResource { player.lastMove != null ? player.lastMove.format(formatter) : null, - player.lastCollect != null - ? player.lastCollect.format(formatter) - : null, player.lastCatch != null ? player.lastCatch.format(formatter) : null, + player.lastCollect != null + ? player.lastCollect.format(formatter) + : null, player.lastFeed != null ? player.lastFeed.format(formatter) : null