From e1301f007b87c9e2b3fa07cee09b111746ecf68d Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Sat, 4 Apr 2026 00:01:13 +0200 Subject: [PATCH 1/3] trop tard --- .../yakamon/data/model/ItemModel.java | 30 +++++++++++++++++-- .../yakamon/domain/service/GameService.java | 4 +-- .../yakamon/domain/service/PlayerService.java | 10 +++---- .../presentation/rest/InventoryResource.java | 6 ++-- 4 files changed, 37 insertions(+), 13 deletions(-) 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 ff1a256..e71d104 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,10 +9,34 @@ public class ItemModel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - protected Integer id; + private Integer id; @Enumerated - public ItemType type; + private ItemType type; - public Integer quantity; + 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; + } } 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 0d4fd1c..29abf6e 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.type = ItemType.YAKABALL; - yakaballs.quantity = 5; + yakaballs.setType(ItemType.YAKABALL); + yakaballs.setQuantity(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 d8bd07c..954eea4 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.quantity < 1) { + if (yakaballItem == null || yakaballItem.getQuantity() < 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.quantity -= 1; + yakaballItem.setQuantity(yakaballItem.getQuantity() - 1); itemRepository.persist(yakaballItem); YakamonModel newYakamon = new YakamonModel(); @@ -342,11 +342,11 @@ public class PlayerService { .firstResult(); if (item == null) { item = new ItemModel(); - item.type = itemType; - item.quantity = 1; + item.setType(itemType); + item.setQuantity(1); itemRepository.persist(item); } else { - item.quantity += 1; + item.setQuantity(item.getQuantity() + 1); itemRepository.persist(item); } } 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 ff1c655..c8af0e9 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.type.name(); - itemType.value = item.type.name(); + itemType.type = item.getType().name(); + itemType.value = item.getType().name(); responseItem.itemType = itemType; - responseItem.quantity = item.quantity; + responseItem.quantity = item.getQuantity(); responseItems.add(responseItem); } From b3bdec10490656b252f61a05649b7dbe5af076d8 Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Sat, 4 Apr 2026 22:25:16 +0200 Subject: [PATCH 2/3] tar dur, jws demotivant --- .../presentation/api/YakamonAction.java | 2 ++ .../api/request/StartGameRequest.java | 2 ++ .../api/request/TeamFeedRequest.java | 2 ++ .../api/request/TeamRenameRequest.java | 2 ++ .../api/response/GetInventoryResponse.java | 18 +++++++++++++- .../api/response/PlayerCatchResponse.java | 2 ++ .../api/response/PlayerCollectResponse.java | 24 +++++++++++++++---- .../api/response/PlayerInfosResponse.java | 4 +++- .../api/response/TeamEvolveResponse.java | 2 ++ .../api/response/TeamFeedResponse.java | 2 ++ .../api/response/TeamInfosResponse.java | 4 +++- .../api/response/TeamRenameResponse.java | 2 ++ .../api/response/YakadexAllInfosResponse.java | 4 +++- .../presentation/rest/PlayerResource.java | 6 ++--- 14 files changed, 65 insertions(+), 11 deletions(-) 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 5b307d3..6faef97 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,7 +1,9 @@ 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 97461d1..885e164 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,7 +1,9 @@ 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 8d094b0..5c9fbfa 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,8 +1,10 @@ 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 bceb7e2..db76322 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,8 +1,10 @@ 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 8b4a708..3a1cf7e 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,21 +2,37 @@ 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; + } } - List items; + public 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 499002b..9ca2b4d 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,7 +1,9 @@ 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 1ac932c..200336f 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,20 +3,36 @@ 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 { - ItemType type; - String value; + public ItemType type; + public String value; + + public Collectible() {} + + public Collectible(ItemType type, String value) { + this.type = type; + this.value = value; + } } - TerrainType terrainType; - Collectible collectible; + public TerrainType terrainType; + public Collectible collectible; + + public TileType() {} + + public TileType(TerrainType terrainType, Collectible collectible) { + this.terrainType = terrainType; + this.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 7773e89..c4fa464 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,7 +1,9 @@ package fr.epita.assistants.yakamon.presentation.api.response; import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +@NoArgsConstructor @AllArgsConstructor public class PlayerInfosResponse { @@ -10,7 +12,7 @@ public class PlayerInfosResponse { public Integer posX; public Integer posY; public String lastMove; - public String lastCatch; public String lastCollect; + public String lastCatch; 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 5347429..7b97656 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,7 +1,9 @@ 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 d13d43b..d8b024b 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,7 +1,9 @@ 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 e2444ea..cc56a45 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,9 +2,11 @@ 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 { - YakamonAction[] yakamons; + public 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 a1b7f28..2c46caf 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,7 +1,9 @@ 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 0302209..5409a5e 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,9 +2,11 @@ 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 { - YakadexEntry[] entries; + public YakadexEntry[] entries; } 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 fdfd8e4..174f90e 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.lastCatch != null - ? player.lastCatch.format(formatter) - : null, player.lastCollect != null ? player.lastCollect.format(formatter) : null, + player.lastCatch != null + ? player.lastCatch.format(formatter) + : null, player.lastFeed != null ? player.lastFeed.format(formatter) : null From c58c8725e8fe25204272b5b116da107f26a872cb Mon Sep 17 00:00:00 2001 From: guillm Date: Fri, 24 Apr 2026 21:03:48 +0200 Subject: [PATCH 3/3] Added README --- README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..bb23564 --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +# 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. +