summaryrefslogtreecommitdiff
path: root/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data
diff options
context:
space:
mode:
Diffstat (limited to 'jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data')
-rw-r--r--jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/GameModel.java19
-rw-r--r--jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/ItemModel.java28
-rw-r--r--jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/PlayerModel.java37
-rw-r--r--jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/GameRepository.java59
-rw-r--r--jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/ItemRepository.java50
-rw-r--r--jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/PlayerRepository.java62
6 files changed, 255 insertions, 0 deletions
diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/GameModel.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/GameModel.java
new file mode 100644
index 0000000..7cca88c
--- /dev/null
+++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/GameModel.java
@@ -0,0 +1,19 @@
+package fr.epita.assistants.item_producer.data.model;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Setter
+@Table(name = "game")
+public class GameModel {
+ @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
+ Long id;
+ String map;
+}
diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/ItemModel.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/ItemModel.java
new file mode 100644
index 0000000..68d765a
--- /dev/null
+++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/ItemModel.java
@@ -0,0 +1,28 @@
+package fr.epita.assistants.item_producer.data.model;
+
+import fr.epita.assistants.common.aggregate.ItemAggregate;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Setter
+@Table(name = "item")
+public class ItemModel {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ Long id;
+ @Enumerated(value = EnumType.STRING)
+ ItemAggregate.ResourceType type;
+ Float quantity;
+
+ public ItemModel(float quantity, ItemAggregate.ResourceType type) {
+ this.quantity = quantity;
+ this.type = type;
+ }
+}
diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/PlayerModel.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/PlayerModel.java
new file mode 100644
index 0000000..943b5a3
--- /dev/null
+++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/model/PlayerModel.java
@@ -0,0 +1,37 @@
+package fr.epita.assistants.item_producer.data.model;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+@Getter
+@Setter
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "player")
+public class PlayerModel {
+ Float collectRateMultiplier;
+ Float moveSpeedMultiplier;
+ Integer posX;
+ Integer posY;
+ Float staminaMultiplier;
+ LocalDateTime lastCollect;
+ LocalDateTime lastMove;
+ @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
+ Long id;
+
+ public PlayerModel(float collectRateMultiplier, float moveSpeedMultiplier, int posX, int posY, float staminaMultiplier, LocalDateTime lastCollect, LocalDateTime lastMove) {
+ this.collectRateMultiplier = collectRateMultiplier;
+ this.moveSpeedMultiplier = moveSpeedMultiplier;
+ this.posX = posX;
+ this.posY = posY;
+ this.staminaMultiplier = staminaMultiplier;
+ this.lastCollect = lastCollect;
+ this.lastMove = lastMove;
+ }
+}
diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/GameRepository.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/GameRepository.java
new file mode 100644
index 0000000..e48f844
--- /dev/null
+++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/GameRepository.java
@@ -0,0 +1,59 @@
+package fr.epita.assistants.item_producer.data.repository;
+
+import fr.epita.assistants.common.aggregate.ItemAggregate;
+import fr.epita.assistants.item_producer.converter.ItemProducerConverter;
+import fr.epita.assistants.item_producer.data.model.GameModel;
+import io.quarkus.hibernate.orm.panache.PanacheRepository;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.transaction.Transactional;
+
+import java.util.List;
+
+@ApplicationScoped
+public class GameRepository implements PanacheRepository<GameModel> {
+ @Transactional
+ public String getMap() {
+ return getGame().getMap();
+ }
+
+ private GameModel getGame() {
+ return findAll().firstResult();
+ }
+
+ @Transactional
+ public boolean isEmpty() {
+ return count() == 0;
+ }
+
+ @Transactional
+ public void clearDB() {
+ deleteAll();
+ }
+
+ @Transactional
+ public void addEntry(String rle) {
+ GameModel game = new GameModel();
+ game.setMap(rle);
+ persist(game);
+ }
+
+ @Transactional
+ public boolean isValidCollect(int x, int y) {
+ List<List<String>> map = ItemProducerConverter.RLEtoMap(getMap());
+ return ItemAggregate.ResourceType.valueOf(map.get(y).get(x)).getItemInfo().isCollectable();
+ }
+
+ @Transactional
+ public void setToGround(int x, int y) {
+ List<List<String>> map = ItemProducerConverter.RLEtoMap(getMap());
+ map.get(y).set(x, ItemAggregate.ResourceType.GROUND.toString());
+ String rle = ItemProducerConverter.MapToRLE(map);
+ update("map = ?1 where id = ?2", rle, getGame().getId());
+ }
+
+ @Transactional
+ public String collectResource(int posX, int posY) {
+ List<List<String>> map = ItemProducerConverter.RLEtoMap(getMap());
+ return map.get(posY).get(posX);
+ }
+}
diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/ItemRepository.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/ItemRepository.java
new file mode 100644
index 0000000..b46311f
--- /dev/null
+++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/ItemRepository.java
@@ -0,0 +1,50 @@
+package fr.epita.assistants.item_producer.data.repository;
+
+import fr.epita.assistants.common.aggregate.ItemAggregate;
+import fr.epita.assistants.item_producer.data.model.ItemModel;
+import io.quarkus.hibernate.orm.panache.PanacheRepository;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.transaction.Transactional;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+@ApplicationScoped
+public class ItemRepository implements PanacheRepository<ItemModel> {
+ @Transactional
+ public void deleteItems(Map<ItemAggregate.ResourceType, Float> toDelete) {
+ for (ItemAggregate.ResourceType type : toDelete.keySet()) {
+ ItemModel item = find("type = ?1", type).firstResult();
+ if (item != null)
+ update("quantity = ?1 where type = ?2", item.getQuantity() - toDelete.get(type), type);
+ }
+ }
+
+ @Transactional
+ public List<ItemModel> getItems() {
+ return find("where quantity > 0").stream().toList();
+ }
+
+ @Transactional
+ public Optional<ItemModel> exists(ItemAggregate.ResourceType type) {
+ return find("type = ?1", type).firstResultOptional();
+ }
+
+ @Transactional
+ public void addItem(ItemAggregate.ResourceType type, Float amount) {
+ ItemModel res = new ItemModel(amount, type);
+ persist(res);
+ }
+
+ // amount should already be the updated amount
+ @Transactional
+ public void fillInventory(ItemAggregate.ResourceType type, Float amount) {
+ update("quantity = ?1 where type = ?2", amount, type);
+ }
+
+ @Transactional
+ public List<ItemModel> getMoney() {
+ return find("where type = ?1", ItemAggregate.ResourceType.MONEY).stream().toList();
+ }
+}
diff --git a/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/PlayerRepository.java b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/PlayerRepository.java
new file mode 100644
index 0000000..b5bcde7
--- /dev/null
+++ b/jws/epibazaar/item-producer/src/main/java/fr/epita/assistants/item_producer/data/repository/PlayerRepository.java
@@ -0,0 +1,62 @@
+package fr.epita.assistants.item_producer.data.repository;
+
+import fr.epita.assistants.common.aggregate.ItemAggregate;
+import fr.epita.assistants.common.utils.Direction;
+import fr.epita.assistants.item_producer.converter.ItemProducerConverter;
+import fr.epita.assistants.item_producer.data.model.PlayerModel;
+import io.quarkus.hibernate.orm.panache.PanacheRepository;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.transaction.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@ApplicationScoped
+public class PlayerRepository implements PanacheRepository<PlayerModel> {
+ @Transactional
+ public void clearDB() {
+ deleteAll();
+ }
+
+ @Transactional
+ public void addEntry() {
+ PlayerModel player = new PlayerModel(1, 1, 0, 0, 1, null, null);
+ persist(player);
+ }
+
+ @Transactional
+ public PlayerModel getFirstPlayer() {
+ return findAll().firstResult();
+ }
+
+ @Transactional
+ public boolean isValidMove(Direction direction, String rle) {
+ PlayerModel playerModel = getFirstPlayer();
+ int x = playerModel.getPosX() + direction.getPoint().getPosX();
+ int y = playerModel.getPosY() + direction.getPoint().getPosY();
+ List<List<String>> map = ItemProducerConverter.RLEtoMap(rle);
+ return y >= 0 && x >= 0 && x < map.getFirst().size() && y < map.getFirst().size() && ItemAggregate.ResourceType.valueOf(map.get(y).get(x)).getItemInfo().isWalkable();
+ }
+
+ @Transactional
+ public void movePlayer(Direction direction) {
+ PlayerModel player = getFirstPlayer();
+ update("posX = ?1, posY = ?2, lastMove = ?3 where id = ?4", player.getPosX() + direction.getPoint().getPosX()
+ , player.getPosY() + direction.getPoint().getPosY(), LocalDateTime.now(), player.getId());
+ }
+
+ public void updateMoveSpeed(Float newSpeed) {
+ PlayerModel player = getFirstPlayer();
+ update("moveSpeedMultiplier = ?1 where id = ?2", newSpeed, player.getId());
+ }
+
+ public void updateCollectRate(Float newRate) {
+ PlayerModel player = getFirstPlayer();
+ update("collectRateMultiplier = ?1 where id = ?2", newRate, player.getId());
+ }
+
+ public void updateStamina(Float newStamina) {
+ PlayerModel player = getFirstPlayer();
+ update("staminaMultiplier = ?1 where id = ?2", newStamina, player.getId());
+ }
+}