diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/converter/DtoToEntityConverter.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/converter/DtoToEntityConverter.java new file mode 100644 index 0000000..45534db --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/converter/DtoToEntityConverter.java @@ -0,0 +1,78 @@ +package fr.epita.assistants.yakamon.converter; + +import fr.epita.assistants.yakamon.domain.entity.GameEntity; +import fr.epita.assistants.yakamon.domain.entity.YakadexEntryEntity; +import fr.epita.assistants.yakamon.domain.entity.YakamonEntity; +import fr.epita.assistants.yakamon.presentation.api.YakadexEntry; +import fr.epita.assistants.yakamon.presentation.api.YakamonAction; +import fr.epita.assistants.yakamon.presentation.api.request.StartGameRequest; +import fr.epita.assistants.yakamon.utils.ElementType; +import java.time.LocalDateTime; +import java.util.UUID; + +public final class DtoToEntityConverter { + + public static YakamonEntity toYakamonEntity(YakamonAction dto) { + if (dto == null) return null; + + YakamonEntity entity = new YakamonEntity(); + // may be null / invalid + if (dto.uuid != null) { + try { + entity.uuid = UUID.fromString(dto.uuid); + } catch (IllegalArgumentException ignored) { + entity.uuid = null; + } + } else { + entity.uuid = null; + } + + entity.nickname = dto.nickname; + entity.yakadexId = dto.yakadexId; + entity.energyPoints = dto.energyPoints; + return entity; + } + + public static YakadexEntryEntity toYakadexEntryEntity(YakadexEntry dto) { + if (dto == null) return null; + + YakadexEntryEntity e = new YakadexEntryEntity(); + e.id = dto.id; + e.name = dto.name; + e.description = dto.description; + e.evolveThreshold = dto.evolveThreshold; + e.evolutionId = dto.evolutionId; + e.caught = dto.caught; + + // map element type strings to enum + if (dto.firstType != null) { + try { + e.firstType = ElementType.valueOf(dto.firstType); + } catch (IllegalArgumentException ex) { + e.firstType = null; + } + } else { + e.firstType = null; + } + + if (dto.secondType != null) { + try { + e.secondType = ElementType.valueOf(dto.secondType); + } catch (IllegalArgumentException ex) { + e.secondType = null; + } + } else { + e.secondType = null; + } + + return e; + } + + public static GameEntity toGameEntity(StartGameRequest request) { + if (request == null) return null; + GameEntity g = new GameEntity(); + g.mapPath = request.mapPath; + g.start(LocalDateTime.now()); + return g; + } +} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/converter/EntityToDtoConverter.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/converter/EntityToDtoConverter.java new file mode 100644 index 0000000..c64ee8d --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/converter/EntityToDtoConverter.java @@ -0,0 +1,71 @@ +package fr.epita.assistants.yakamon.converter; + +import fr.epita.assistants.yakamon.domain.entity.YakadexEntryEntity; +import fr.epita.assistants.yakamon.domain.entity.YakamonEntity; +import fr.epita.assistants.yakamon.presentation.api.YakadexEntry; +import fr.epita.assistants.yakamon.presentation.api.YakamonAction; +import java.util.ArrayList; +import java.util.List; + +public final class EntityToDtoConverter { + + public static YakamonAction toYakamonAction(YakamonEntity e) { + if (e == null) return null; + String uuid = null; + if (e.uuid != null) { + uuid = e.uuid.toString(); + } + return new YakamonAction(uuid, e.nickname, e.yakadexId, e.energyPoints); + } + + public static YakadexEntry toYakadexEntry(YakadexEntryEntity e) { + if (e == null) return null; + + String firstType = null; + if (e.firstType != null) { + firstType = e.firstType.name(); + } + + String secondType = null; + if (e.secondType != null) { + secondType = e.secondType.name(); + } + + Integer evolutionId = e.evolutionId; + + return new YakadexEntry( + e.id, + e.name, + firstType, + secondType, + e.evolveThreshold, + evolutionId, + e.caught, + e.description + ); + } + + public static List toYakadexEntries( + List entries + ) { + List out = new ArrayList<>(); + if (entries == null || entries.isEmpty()) return out; + for (YakadexEntryEntity e : entries) { + YakadexEntry dto = toYakadexEntry(e); + if (dto != null) out.add(dto); + } + return out; + } + + public static List toYakamonActions( + List yakamons + ) { + List out = new ArrayList<>(); + if (yakamons == null || yakamons.isEmpty()) return out; + for (YakamonEntity y : yakamons) { + YakamonAction a = toYakamonAction(y); + if (a != null) out.add(a); + } + return out; + } +} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/converter/EntityToModelConverter.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/converter/EntityToModelConverter.java new file mode 100644 index 0000000..7e84bd4 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/converter/EntityToModelConverter.java @@ -0,0 +1,67 @@ +package fr.epita.assistants.yakamon.converter; + +import fr.epita.assistants.yakamon.data.model.GameModel; +import fr.epita.assistants.yakamon.data.model.PlayerModel; +import fr.epita.assistants.yakamon.data.model.YakadexEntryModel; +import fr.epita.assistants.yakamon.data.model.YakamonModel; +import fr.epita.assistants.yakamon.domain.entity.GameEntity; +import fr.epita.assistants.yakamon.domain.entity.PlayerEntity; +import fr.epita.assistants.yakamon.domain.entity.YakadexEntryEntity; +import fr.epita.assistants.yakamon.domain.entity.YakamonEntity; +import java.time.LocalDateTime; + +public final class EntityToModelConverter { + + public static GameModel toGameModel(GameEntity e) { + if (e == null) return null; + GameModel m = new GameModel(); + m.map = e.mapPath; + m.started = e.started; + m.startTime = e.startTime; + return m; + } + + public static PlayerModel toPlayerModel(PlayerEntity e) { + if (e == null) return null; + PlayerModel m = new PlayerModel(); + m.name = e.name; + m.posX = e.posX; + m.posY = e.posY; + m.lastMove = e.lastMove; + m.lastCatch = e.lastCatch; + m.lastCollect = e.lastCollect; + m.lastFeed = e.lastFeed; + return m; + } + + public static YakamonModel toYakamonModel(YakamonEntity e) { + if (e == null) return null; + YakamonModel m = new YakamonModel(); + m.nickname = e.nickname; + m.energyPoints = e.energyPoints; + if (e.yakadexId != null) { + YakadexEntryModel yakadex = new YakadexEntryModel(); + yakadex.name = null; + yakadex.caught = null; + yakadex.firstType = null; + yakadex.secondType = null; + yakadex.description = null; + yakadex.evolveThreshold = null; + m.yakadexEntryId = yakadex; + } + return m; + } + + public static YakadexEntryModel toYakadexEntryModel(YakadexEntryEntity e) { + if (e == null) return null; + YakadexEntryModel m = new YakadexEntryModel(); + m.name = e.name; + m.caught = e.caught; + m.firstType = e.firstType; + m.secondType = e.secondType; + m.description = e.description; + m.evolveThreshold = e.evolveThreshold; + m.evolutionId = null; // don't know yet + return m; + } +} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/GameModel.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/GameModel.java index c2f3caa..2180c6e 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/GameModel.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/GameModel.java @@ -1,10 +1,17 @@ package fr.epita.assistants.yakamon.data.model; import jakarta.persistence.*; +import java.time.LocalDateTime; -@Entity @Table(name="game") +@Entity +@Table(name = "game") public class GameModel { + @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) protected Long id; + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Long id; + public String map; + public boolean started; + public LocalDateTime startTime; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/PlayerModel.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/PlayerModel.java index 67b121d..272971f 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/PlayerModel.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/PlayerModel.java @@ -1,19 +1,22 @@ package fr.epita.assistants.yakamon.data.model; import jakarta.persistence.*; - -import java.sql.Timestamp; +import java.time.LocalDateTime; import java.util.UUID; @Entity -@Table(name="player") +@Table(name = "player") public class PlayerModel { - @Id @GeneratedValue(strategy = GenerationType.UUID) protected UUID id; + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + public UUID id; + public String name; public Integer posX; public Integer posY; - public Timestamp lastMove; - public Timestamp lastCatch; - public Timestamp lastCollect; - public Timestamp lastFeed; + public LocalDateTime lastMove; + public LocalDateTime lastCatch; + public LocalDateTime lastCollect; + public LocalDateTime lastFeed; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/YakadexEntryModel.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/YakadexEntryModel.java index 292e2cf..0977be4 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/YakadexEntryModel.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/model/YakadexEntryModel.java @@ -1,20 +1,25 @@ package fr.epita.assistants.yakamon.data.model; - import fr.epita.assistants.yakamon.utils.ElementType; import jakarta.persistence.*; @Entity -@Table(name="yakadex_entry") +@Table(name = "yakadex_entry") public class YakadexEntryModel { + @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) protected Integer id; + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer id; public String name; public Boolean caught; public ElementType firstType; public ElementType secondType; public String description; - @OneToOne @JoinColumn(name="evolution_id") public YakadexEntryModel evolutionId; + + @OneToOne + @JoinColumn(name = "evolution_id") + public YakadexEntryModel evolutionId; + public Integer evolveThreshold; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/.gitkeep b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/GameRepository.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/GameRepository.java new file mode 100644 index 0000000..0f81567 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/GameRepository.java @@ -0,0 +1,3 @@ +package fr.epita.assistants.yakamon.data.repository; + +public class GameRepository {} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/PlayerRepository.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/PlayerRepository.java new file mode 100644 index 0000000..8b12f13 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/PlayerRepository.java @@ -0,0 +1,3 @@ +package fr.epita.assistants.yakamon.data.repository; + +public class PlayerRepository {} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/TeamRepository.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/TeamRepository.java new file mode 100644 index 0000000..f45b646 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/TeamRepository.java @@ -0,0 +1,3 @@ +package fr.epita.assistants.yakamon.data.repository; + +public class TeamRepository {} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/YakadexRepository.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/YakadexRepository.java new file mode 100644 index 0000000..26a32fe --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/data/repository/YakadexRepository.java @@ -0,0 +1,3 @@ +package fr.epita.assistants.yakamon.data.repository; + +public class YakadexRepository {} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/.gitkeep b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/GameEntity.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/GameEntity.java new file mode 100644 index 0000000..75bb0e9 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/GameEntity.java @@ -0,0 +1,38 @@ +package fr.epita.assistants.yakamon.domain.entity; + +import java.time.LocalDateTime; + +public class GameEntity { + + public Long id; + public String mapPath; + public boolean started; + public LocalDateTime startTime; + + public GameEntity() {} + + public GameEntity( + Long id, + String mapPath, + boolean started, + LocalDateTime startTime + ) { + this.id = id; + this.mapPath = mapPath; + this.started = started; + this.startTime = startTime; + } + + public GameEntity start(LocalDateTime startTime) { + // TODO + startTime = startTime == null ? LocalDateTime.now() : startTime; + started = true; + return this; + } + + public GameEntity stop() { + this.started = false; + this.startTime = null; + return this; + } +} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/ItemEntity.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/ItemEntity.java new file mode 100644 index 0000000..5114916 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/ItemEntity.java @@ -0,0 +1,31 @@ +package fr.epita.assistants.yakamon.domain.entity; + +import fr.epita.assistants.yakamon.utils.tile.ItemType; +import java.util.Objects; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class ItemEntity { + + public Integer id; + public ItemType type; + public Integer quantity; + + public ItemEntity(Integer id, ItemType type, Integer quantity) { + this.id = id; + if (type == null) { + System.err.println( + "Warning: attempted to pass null item type, using default 'NONE'" + ); + type = ItemType.NONE; + } + this.type = Objects.requireNonNull(type, "type must not be null"); + this.quantity = quantity != null ? quantity : 0; + } + + // public ItemEntity addQuantity(int amount) { + // int current = this.quantity != null ? this.quantity : 0; + // this.quantity = current + amount; + // return this; + // } +} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/YakadexEntryEntity.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/YakadexEntryEntity.java new file mode 100644 index 0000000..30a0873 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/YakadexEntryEntity.java @@ -0,0 +1,19 @@ +package fr.epita.assistants.yakamon.domain.entity; + +import fr.epita.assistants.yakamon.utils.ElementType; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +@AllArgsConstructor +public class YakadexEntryEntity { + + public Integer id; + public String name; + public ElementType firstType; + public ElementType secondType; + public Integer evolveThreshold; + public Integer evolutionId; + public Boolean caught; + public String description; +} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/YakamonEntity.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/YakamonEntity.java new file mode 100644 index 0000000..d7627a5 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/entity/YakamonEntity.java @@ -0,0 +1,15 @@ +package fr.epita.assistants.yakamon.domain.entity; + +import java.util.UUID; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +@AllArgsConstructor +public class YakamonEntity { + + public UUID uuid; + public String nickname; + public Integer yakadexId; + public Integer energyPoints; +} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/.gitkeep b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/.gitkeep deleted file mode 100644 index e69de29..0000000 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 new file mode 100644 index 0000000..4f0fc8b --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/GameService.java @@ -0,0 +1,37 @@ +package fr.epita.assistants.yakamon.domain.service; + +import fr.epita.assistants.yakamon.domain.entity.GameEntity; +import java.time.LocalDateTime; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class GameService { + + public static GameEntity game = new GameEntity(); + public static final GameService INSTANCE = new GameService(); // TODO ? + + public GameEntity startGame(String mapPath) { + if (mapPath == null) { + throw new RuntimeException( + "Could not start game with null mapPath" + ); + } + if (game == null) { + game = new GameEntity(); + } + + game.start(LocalDateTime.now()); + return game; + } + + public boolean isStarted() { + return game != null && game.started; + } + + public void stopGame() { + if (game == null) { + game = new GameEntity(); + } + game.stop(); + } +} 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 new file mode 100644 index 0000000..57edfb4 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/PlayerService.java @@ -0,0 +1,3 @@ +package fr.epita.assistants.yakamon.domain.service; + +public class PlayerService {} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/TeamService.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/TeamService.java new file mode 100644 index 0000000..3f12a02 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/TeamService.java @@ -0,0 +1,3 @@ +package fr.epita.assistants.yakamon.domain.service; + +public class TeamService {} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/YakadexService.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/YakadexService.java new file mode 100644 index 0000000..97881ae --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/domain/service/YakadexService.java @@ -0,0 +1,3 @@ +package fr.epita.assistants.yakamon.domain.service; + +public class YakadexService {} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/YakadexEntry.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/YakadexEntry.java new file mode 100644 index 0000000..0720df5 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/YakadexEntry.java @@ -0,0 +1,16 @@ +package fr.epita.assistants.yakamon.presentation.api; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public class YakadexEntry { + + public Integer id; + public String name; + public String firstType; + public String secondType; + public Integer evolveThreshold; + public Integer evolutionId; + public Boolean caught; + public String description; +} 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 new file mode 100644 index 0000000..5b307d3 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/YakamonAction.java @@ -0,0 +1,12 @@ +package fr.epita.assistants.yakamon.presentation.api; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public class YakamonAction { + + public String uuid; + public String nickname; + public Integer yakadexId; + public Integer energyPoints; +} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/GetInventoryRequest.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/GetInventoryRequest.java deleted file mode 100644 index 40c1ee4..0000000 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/GetInventoryRequest.java +++ /dev/null @@ -1,7 +0,0 @@ -package fr.epita.assistants.yakamon.presentation.api.request; - -import java.util.List; - -public class GetInventoryRequest { - -} \ No newline at end of file diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/PlayerCatchRequest.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/PlayerCatchRequest.java deleted file mode 100644 index dbb9f43..0000000 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/PlayerCatchRequest.java +++ /dev/null @@ -1,5 +0,0 @@ -package fr.epita.assistants.yakamon.presentation.api.request; - -public class PlayerCatchRequest { - -} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/PlayerCollectRequest.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/PlayerCollectRequest.java deleted file mode 100644 index bbc9584..0000000 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/PlayerCollectRequest.java +++ /dev/null @@ -1,7 +0,0 @@ -package fr.epita.assistants.yakamon.presentation.api.request; - -import fr.epita.assistants.yakamon.utils.tile.ItemType; -import fr.epita.assistants.yakamon.utils.tile.TerrainType; - -public class PlayerCollectRequest { -} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/PlayerInfosRequest.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/PlayerInfosRequest.java deleted file mode 100644 index 98c1f6b..0000000 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/PlayerInfosRequest.java +++ /dev/null @@ -1,4 +0,0 @@ -package fr.epita.assistants.yakamon.presentation.api.request; - -public class PlayerInfosRequest { -} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/PlayerMoveRequest.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/PlayerMoveRequest.java index 0cf8f5d..e5228b6 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/PlayerMoveRequest.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/PlayerMoveRequest.java @@ -1,7 +1,10 @@ package fr.epita.assistants.yakamon.presentation.api.request; import fr.epita.assistants.yakamon.utils.Direction; +import lombok.AllArgsConstructor; +@AllArgsConstructor public class PlayerMoveRequest { + Direction direction; } 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 9102914..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,6 +1,10 @@ package fr.epita.assistants.yakamon.presentation.api.request; +import lombok.AllArgsConstructor; + +@AllArgsConstructor public class StartGameRequest { + public String mapPath; public String playerName; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamEvolveRequest.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamEvolveRequest.java deleted file mode 100644 index 2210ffa..0000000 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamEvolveRequest.java +++ /dev/null @@ -1,4 +0,0 @@ -package fr.epita.assistants.yakamon.presentation.api.request; - -public class TeamEvolveRequest { -} 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 df041f0..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,5 +1,9 @@ package fr.epita.assistants.yakamon.presentation.api.request; +import lombok.AllArgsConstructor; + +@AllArgsConstructor public class TeamFeedRequest { + public Integer quantity; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamInfosRequest.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamInfosRequest.java deleted file mode 100644 index 925e29c..0000000 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamInfosRequest.java +++ /dev/null @@ -1,4 +0,0 @@ -package fr.epita.assistants.yakamon.presentation.api.request; - -public class TeamInfosRequest { -} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamReleaseRequest.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamReleaseRequest.java deleted file mode 100644 index a241449..0000000 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/TeamReleaseRequest.java +++ /dev/null @@ -1,4 +0,0 @@ -package fr.epita.assistants.yakamon.presentation.api.request; - -public class TeamReleaseRequest { -} 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 43bc114..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,4 +1,9 @@ package fr.epita.assistants.yakamon.presentation.api.request; +import lombok.AllArgsConstructor; + +@AllArgsConstructor public class TeamRenameRequest { + + public String newNickname; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/YakadexAllInfosRequest.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/YakadexAllInfosRequest.java deleted file mode 100644 index d5e9467..0000000 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/YakadexAllInfosRequest.java +++ /dev/null @@ -1,4 +0,0 @@ -package fr.epita.assistants.yakamon.presentation.api.request; - -public class YakadexAllInfosRequest { -} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/YakadexInfosRequest.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/YakadexInfosRequest.java deleted file mode 100644 index 3a2648d..0000000 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/request/YakadexInfosRequest.java +++ /dev/null @@ -1,4 +0,0 @@ -package fr.epita.assistants.yakamon.presentation.api.request; - -public class YakadexInfosRequest { -} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/ErrorResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/ErrorResponse.java new file mode 100644 index 0000000..0abf4ae --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/ErrorResponse.java @@ -0,0 +1,9 @@ +package fr.epita.assistants.yakamon.presentation.api.response; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public class ErrorResponse { + + public String message; +} 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 a4c630c..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 @@ -1,15 +1,19 @@ package fr.epita.assistants.yakamon.presentation.api.response; import java.util.List; +import lombok.AllArgsConstructor; +@AllArgsConstructor public class GetInventoryResponse { public class ItemType { + public String type; public String value; } public class Items { + public ItemType itemType; public Integer quantity; } 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 2752c1c..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,8 +1,15 @@ package fr.epita.assistants.yakamon.presentation.api.response; -public class PlayerCatchResponse { - public String uuid; - public String nickname; - public Integer yakadexId; - public Integer energyPoints; +import fr.epita.assistants.yakamon.presentation.api.YakamonAction; + +public class PlayerCatchResponse extends YakamonAction { + + public PlayerCatchResponse( + String uuid, + String nickname, + Integer yakadexId, + Integer energyPoints + ) { + super(uuid, nickname, yakadexId, energyPoints); + } } 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 f1111f0..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 @@ -2,12 +2,15 @@ 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; +@AllArgsConstructor public class PlayerCollectResponse { public class TileType { public class Collectible { + ItemType type; String value; } 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 e980b92..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,6 +1,16 @@ package fr.epita.assistants.yakamon.presentation.api.response; +import lombok.AllArgsConstructor; + +@AllArgsConstructor public class PlayerInfosResponse { - //TODO - // Player model + + public String uuid; + public String name; + public Integer posX; + public Integer posY; + public String lastMove; + public String lastCatch; + public String lastCollect; + public String lastFeed; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerMoveResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerMoveResponse.java index 4ac3735..bbd29d4 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerMoveResponse.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/PlayerMoveResponse.java @@ -1,6 +1,10 @@ package fr.epita.assistants.yakamon.presentation.api.response; +import lombok.AllArgsConstructor; + +@AllArgsConstructor public class PlayerMoveResponse { + public Integer posX; public Integer posY; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/StartGameResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/StartGameResponse.java index 822fd96..f4b1ba4 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/StartGameResponse.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/StartGameResponse.java @@ -1,4 +1,21 @@ package fr.epita.assistants.yakamon.presentation.api.response; +import lombok.AllArgsConstructor; + +@AllArgsConstructor public class StartGameResponse { + + public class Collectible { + + public String item; + public String value; + } + + public class Tile { + + String terrainType; + Collectible collectible; + } + + Tile[][] tiles; } 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 ead3165..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,4 +1,15 @@ package fr.epita.assistants.yakamon.presentation.api.response; -public class TeamEvolveResponse { +import fr.epita.assistants.yakamon.presentation.api.YakamonAction; + +public class TeamEvolveResponse extends YakamonAction { + + public TeamEvolveResponse( + String uuid, + String nickname, + Integer yakadexId, + Integer energyPoints + ) { + super(uuid, nickname, yakadexId, energyPoints); + } } 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 47f93af..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,4 +1,15 @@ package fr.epita.assistants.yakamon.presentation.api.response; -public class TeamFeedResponse { +import fr.epita.assistants.yakamon.presentation.api.YakamonAction; + +public class TeamFeedResponse extends YakamonAction { + + public TeamFeedResponse( + String uuid, + String nickname, + Integer yakadexId, + Integer energyPoints + ) { + super(uuid, nickname, yakadexId, energyPoints); + } } 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 4d061f9..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 @@ -1,4 +1,10 @@ package fr.epita.assistants.yakamon.presentation.api.response; +import fr.epita.assistants.yakamon.presentation.api.YakamonAction; +import lombok.AllArgsConstructor; + +@AllArgsConstructor public class TeamInfosResponse { + + YakamonAction[] yakamons; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamReleaseResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamReleaseResponse.java deleted file mode 100644 index 5b5aa0a..0000000 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/TeamReleaseResponse.java +++ /dev/null @@ -1,4 +0,0 @@ -package fr.epita.assistants.yakamon.presentation.api.response; - -public class TeamReleaseResponse { -} 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 19d9300..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,4 +1,15 @@ package fr.epita.assistants.yakamon.presentation.api.response; -public class TeamRenameResponse { +import fr.epita.assistants.yakamon.presentation.api.YakamonAction; + +public class TeamRenameResponse extends YakamonAction { + + public TeamRenameResponse( + String uuid, + String nickname, + Integer yakadexId, + Integer energyPoints + ) { + super(uuid, nickname, yakadexId, energyPoints); + } } 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 765c60c..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 @@ -1,4 +1,10 @@ package fr.epita.assistants.yakamon.presentation.api.response; +import fr.epita.assistants.yakamon.presentation.api.YakadexEntry; +import lombok.AllArgsConstructor; + +@AllArgsConstructor public class YakadexAllInfosResponse { + + YakadexEntry[] entries; } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/YakadexInfosResponse.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/YakadexInfosResponse.java index aee0b54..cfe73f3 100644 --- a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/YakadexInfosResponse.java +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/api/response/YakadexInfosResponse.java @@ -1,4 +1,28 @@ package fr.epita.assistants.yakamon.presentation.api.response; -public class YakadexInfosResponse { +import fr.epita.assistants.yakamon.presentation.api.YakadexEntry; + +public class YakadexInfosResponse extends YakadexEntry { + + public YakadexInfosResponse( + Integer id, + String name, + String firstType, + String secondType, + Integer evolveThreshold, + Integer evolutionId, + Boolean caught, + String description + ) { + super( + id, + name, + firstType, + secondType, + evolveThreshold, + evolutionId, + caught, + description + ); + } } diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/GameResource.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/GameResource.java new file mode 100644 index 0000000..a35c84a --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/GameResource.java @@ -0,0 +1,62 @@ +package fr.epita.assistants.yakamon.presentation.rest; + +import fr.epita.assistants.yakamon.domain.entity.GameEntity; +import fr.epita.assistants.yakamon.domain.service.GameService; +import fr.epita.assistants.yakamon.presentation.api.request.StartGameRequest; +import fr.epita.assistants.yakamon.presentation.api.response.StartGameResponse; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import java.util.logging.Logger; + +@Path("/start") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public class GameResource { + + private static final Logger LOGGER = Logger.getLogger( + GameResource.class.getName() + ); + + @POST + @Path("/") + public Response start(StartGameRequest request) { + if ( + request == null || + request.mapPath == null || + request.mapPath.isBlank() || + request.playerName == null || + request.playerName.isBlank() + ) { + LOGGER.warning( + "Invalid start request: missing mapPath or playerName" + ); + return Response.status(Response.Status.BAD_REQUEST) + .entity("Invalid mapPath or playerName") + .build(); + } + + LOGGER.info( + "Starting game for player='" + + request.playerName + + "' with map='" + + request.mapPath + + "'" + ); + + GameService gameService = new GameService(); + GameEntity startedGame = gameService.startGame(request.mapPath); + + LOGGER.info( + "Game started at: " + + (startedGame != null ? startedGame.startTime : "unknown") + ); + + // StartGameResponse response = new StartGameResponse(); + // return Response.ok(response).build(); + return Response.ok().build(); + } +} 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 new file mode 100644 index 0000000..6aab3fc --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/InventoryResource.java @@ -0,0 +1,22 @@ +package fr.epita.assistants.yakamon.presentation.rest; + +import fr.epita.assistants.yakamon.presentation.api.response.GetInventoryResponse; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +@Path("/inventory") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public class InventoryResource { + + @GET + public Response getInventory() { + // GetInventoryResponse response = new GetInventoryResponse(); + // return Response.ok(response).build(); + return Response.ok().build(); + } +} 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 new file mode 100644 index 0000000..a9f76b3 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/PlayerResource.java @@ -0,0 +1,96 @@ +package fr.epita.assistants.yakamon.presentation.rest; + +import fr.epita.assistants.yakamon.domain.service.GameService; +import fr.epita.assistants.yakamon.presentation.api.request.PlayerMoveRequest; +import fr.epita.assistants.yakamon.presentation.api.response.GetInventoryResponse; +import fr.epita.assistants.yakamon.presentation.api.response.PlayerCatchResponse; +import fr.epita.assistants.yakamon.presentation.api.response.PlayerCollectResponse; +import fr.epita.assistants.yakamon.presentation.api.response.PlayerInfosResponse; +import fr.epita.assistants.yakamon.presentation.api.response.PlayerMoveResponse; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +@Path("/") +@Consumes(MediaType.APPLICATION_JSON) +@Produces(MediaType.APPLICATION_JSON) +public class PlayerResource { + + private final GameService gameService = new GameService(); + + @POST + @Path("/catch") + public Response catchYakamon() { + if (!gameService.isStarted()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Game not started") + .build(); + } + // TODO service + return Response.status(Response.Status.NOT_IMPLEMENTED).build(); + } + + @POST + @Path("/collect") + public Response collect() { + if (!gameService.isStarted()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Game not started") + .build(); + } + // TODO service + return Response.status(Response.Status.NOT_IMPLEMENTED).build(); + } + + @GET + @Path("/inventory") + public Response getInventory() { + if (!gameService.isStarted()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Game not started") + .build(); + } + // TODO service + // GetInventoryResponse response = inventoryService.getInventory(); + // return Response.ok(response).build(); + return Response.status(Response.Status.NOT_IMPLEMENTED).build(); + } + + @POST + @Path("/move") + public Response move(PlayerMoveRequest request) { + if (!gameService.isStarted()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Game not started") + .build(); + } + if (request == null) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Request body is required") + .build(); + } + + // if (request.direction == null) { + // return Response.status(Response.Status.BAD_REQUEST) + // .entity("Direction is required") + // .build(); + // } + // TODO service + return Response.status(Response.Status.NOT_IMPLEMENTED).build(); + } + + @GET + @Path("/player") + public Response getPlayerInfos() { + if (!gameService.isStarted()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Game not started") + .build(); + } + + // TODO service + // PlayerInfosResponse response = playerService.getInfos(...); + // return Response.ok(response).build(); + return Response.status(Response.Status.NOT_IMPLEMENTED).build(); + } +} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/TeamResource.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/TeamResource.java new file mode 100644 index 0000000..9f429b5 --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/TeamResource.java @@ -0,0 +1,130 @@ +package fr.epita.assistants.yakamon.presentation.rest; + +import fr.epita.assistants.yakamon.domain.service.GameService; +import fr.epita.assistants.yakamon.presentation.api.request.TeamFeedRequest; +import fr.epita.assistants.yakamon.presentation.api.request.TeamRenameRequest; +import fr.epita.assistants.yakamon.presentation.api.response.TeamEvolveResponse; +import fr.epita.assistants.yakamon.presentation.api.response.TeamFeedResponse; +import fr.epita.assistants.yakamon.presentation.api.response.TeamInfosResponse; +import fr.epita.assistants.yakamon.presentation.api.response.TeamRenameResponse; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +@Path("/team") +@Consumes(MediaType.APPLICATION_JSON) +@Produces(MediaType.APPLICATION_JSON) +public class TeamResource { + + private final GameService gameService = new GameService(); + + @GET + public Response getTeam() { + if (!gameService.isStarted()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Game not started") + .build(); + } + // TODO service + // TeamInfosResponse response = new TeamInfosResponse(); + // return Response.ok(response).build(); + return Response.ok().build(); + } + + @POST + @Path("/{uuid}/evolve") + public Response evolve(@PathParam("uuid") String uuid) { + if (!gameService.isStarted()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Game not started") + .build(); + } + if (uuid == null || uuid.isBlank()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Missing or invalid uuid") + .build(); + } + + // TODO service + // TeamEvolveResponse response = new TeamEvolveResponse(); + // return Response.ok(response).build(); + return Response.ok().build(); + } + + @POST + @Path("/{uuid}/feed") + public Response feed( + @PathParam("uuid") String uuid, + TeamFeedRequest request + ) { + if (!gameService.isStarted()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Game not started") + .build(); + } + if (uuid == null || uuid.isBlank()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Missing or invalid uuid") + .build(); + } + if ( + request == null || request.quantity == null || request.quantity <= 0 + ) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Invalid quantity") + .build(); + } + + // TODO service + // TeamFeedResponse response = new TeamFeedResponse(); + // return Response.ok(response).build(); + return Response.ok().build(); + } + + @DELETE + @Path("/{uuid}/release") + public Response release(@PathParam("uuid") String uuid) { + if (!gameService.isStarted()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Game not started") + .build(); + } + if (uuid == null || uuid.isBlank()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Missing or invalid uuid") + .build(); + } + + // TODO service + // return 204 (No Content) to match the subject + return Response.noContent().build(); + } + + @PATCH + @Path("/{uuid}/rename") + public Response rename( + @PathParam("uuid") String uuid, + TeamRenameRequest request + ) { + if (!gameService.isStarted()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Game not started") + .build(); + } + if (uuid == null || uuid.isBlank()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Missing or invalid uuid") + .build(); + } + if (request == null) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Missing request body") + .build(); + } + + // TODO service + // TeamRenameResponse response = new TeamRenameResponse(); + // return Response.ok(response).build(); + return Response.ok().build(); + } +} diff --git a/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/YakadexResource.java b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/YakadexResource.java new file mode 100644 index 0000000..d3e51dd --- /dev/null +++ b/yakamon/src/main/java/fr/epita/assistants/yakamon/presentation/rest/YakadexResource.java @@ -0,0 +1,49 @@ +package fr.epita.assistants.yakamon.presentation.rest; + +import fr.epita.assistants.yakamon.domain.service.GameService; +import fr.epita.assistants.yakamon.presentation.api.response.YakadexAllInfosResponse; +import fr.epita.assistants.yakamon.presentation.api.response.YakadexInfosResponse; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +@Path("/yakadex") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public class YakadexResource { + + private final GameService gameService = new GameService(); + + @GET + public Response getYakadex( + @QueryParam("only_missing") Boolean onlyMissing + ) { + if (!gameService.isStarted()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Game is not running") + .build(); + } + + // YakadexAllInfosResponse response = new YakadexAllInfosResponse(); + // return Response.ok(response).build(); + return Response.ok().build(); + } + + @GET + @Path("/{id}") + public Response getYakadexById(@PathParam("id") Integer id) { + if (!gameService.isStarted()) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Game is not running") + .build(); + } + + if (id == null || id < 0) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + + // YakadexInfosResponse response = new YakadexInfosResponse(); + // return Response.ok(response).build(); + return Response.ok().build(); + } +}