From 8a6bc95c920a197011d0ff488da178856f068bf2 Mon Sep 17 00:00:00 2001
From: Phan Huy Tran
Date: Wed, 2 Apr 2025 10:18:51 +0200
Subject: [PATCH] feat: add route to get all lootboxes
---
backend/requests/lootboxes.http | 4 +++
.../de/szut/casino/CasinoApplication.java | 29 ++++++++++++-------
.../casino/lootboxes/LootBoxController.java | 20 +++++++++++++
.../szut/casino/lootboxes/LootBoxEntity.java | 1 +
.../szut/casino/lootboxes/RewardEntity.java | 2 ++
5 files changed, 45 insertions(+), 11 deletions(-)
create mode 100644 backend/requests/lootboxes.http
create mode 100644 backend/src/main/java/de/szut/casino/lootboxes/LootBoxController.java
diff --git a/backend/requests/lootboxes.http b/backend/requests/lootboxes.http
new file mode 100644
index 0000000..2c7fe2e
--- /dev/null
+++ b/backend/requests/lootboxes.http
@@ -0,0 +1,4 @@
+GET http://localhost:8080/lootboxes
+Authorization: Bearer {{token}}
+Content-Type: application/json
+
diff --git a/backend/src/main/java/de/szut/casino/CasinoApplication.java b/backend/src/main/java/de/szut/casino/CasinoApplication.java
index cc22e2c..2499781 100644
--- a/backend/src/main/java/de/szut/casino/CasinoApplication.java
+++ b/backend/src/main/java/de/szut/casino/CasinoApplication.java
@@ -11,6 +11,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -30,55 +31,61 @@ public class CasinoApplication {
public CommandLineRunner initData(LootBoxRepository lootBoxRepository, RewardRepository rewardRepository) {
return _ -> {
if (lootBoxRepository.count() == 0) {
- // Create basic LootBox
LootBoxEntity basicLootBox = new LootBoxEntity();
basicLootBox.setName("Basic LootBox");
basicLootBox.setPrice(new BigDecimal("1.99"));
+ basicLootBox.setRewards(new ArrayList<>()); // Initialize the list
- // Create premium LootBox
LootBoxEntity premiumLootBox = new LootBoxEntity();
premiumLootBox.setName("Premium LootBox");
premiumLootBox.setPrice(new BigDecimal("4.99"));
+ premiumLootBox.setRewards(new ArrayList<>()); // Initialize the list
- // Save LootBoxes first to get IDs
+ // Save the loot boxes first
lootBoxRepository.saveAll(Arrays.asList(basicLootBox, premiumLootBox));
- // Create rewards for basic LootBox
RewardEntity commonReward = new RewardEntity();
commonReward.setValue(new BigDecimal("0.50"));
commonReward.setProbability(new BigDecimal("70.00"));
- commonReward.setLootBoxes(List.of(premiumLootBox));
RewardEntity rareReward = new RewardEntity();
rareReward.setValue(new BigDecimal("2.00"));
rareReward.setProbability(new BigDecimal("25.00"));
- rareReward.setLootBoxes(List.of(basicLootBox));
RewardEntity epicReward = new RewardEntity();
epicReward.setValue(new BigDecimal("5.00"));
epicReward.setProbability(new BigDecimal("5.00"));
- epicReward.setLootBoxes(List.of(basicLootBox));
- // Create rewards for premium LootBox
RewardEntity premiumCommon = new RewardEntity();
premiumCommon.setValue(new BigDecimal("2.00"));
premiumCommon.setProbability(new BigDecimal("60.00"));
- premiumCommon.setLootBoxes(List.of(premiumLootBox));
RewardEntity premiumRare = new RewardEntity();
premiumRare.setValue(new BigDecimal("5.00"));
premiumRare.setProbability(new BigDecimal("30.00"));
- premiumRare.setLootBoxes(List.of(premiumLootBox));
RewardEntity legendaryReward = new RewardEntity();
legendaryReward.setValue(new BigDecimal("15.00"));
legendaryReward.setProbability(new BigDecimal("10.00"));
- legendaryReward.setLootBoxes(List.of(premiumLootBox));
+ // Save all rewards
rewardRepository.saveAll(Arrays.asList(
commonReward, rareReward, epicReward,
premiumCommon, premiumRare, legendaryReward
));
+
+ // Add relationships from the owning side (LootBox)
+ basicLootBox.getRewards().add(rareReward);
+ basicLootBox.getRewards().add(epicReward);
+
+ premiumLootBox.getRewards().add(commonReward);
+ premiumLootBox.getRewards().add(premiumCommon);
+ premiumLootBox.getRewards().add(premiumRare);
+ premiumLootBox.getRewards().add(legendaryReward);
+
+ // Update the loot boxes to save the relationships
+ lootBoxRepository.saveAll(Arrays.asList(basicLootBox, premiumLootBox));
+
System.out.println("Initial LootBoxes and rewards created successfully");
} else {
System.out.println("LootBoxes already exist, skipping initialization");
diff --git a/backend/src/main/java/de/szut/casino/lootboxes/LootBoxController.java b/backend/src/main/java/de/szut/casino/lootboxes/LootBoxController.java
new file mode 100644
index 0000000..c885b5d
--- /dev/null
+++ b/backend/src/main/java/de/szut/casino/lootboxes/LootBoxController.java
@@ -0,0 +1,20 @@
+package de.szut.casino.lootboxes;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+public class LootBoxController {
+ private final LootBoxRepository lootBoxRepository;
+
+ public LootBoxController(LootBoxRepository lootBoxRepository) {
+ this.lootBoxRepository = lootBoxRepository;
+ }
+
+ @GetMapping("/lootboxes")
+ public List getAllLootBoxes() {
+ return lootBoxRepository.findAll();
+ }
+}
diff --git a/backend/src/main/java/de/szut/casino/lootboxes/LootBoxEntity.java b/backend/src/main/java/de/szut/casino/lootboxes/LootBoxEntity.java
index bd6c588..49eb532 100644
--- a/backend/src/main/java/de/szut/casino/lootboxes/LootBoxEntity.java
+++ b/backend/src/main/java/de/szut/casino/lootboxes/LootBoxEntity.java
@@ -2,6 +2,7 @@ package de.szut.casino.lootboxes;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
import de.szut.casino.blackjack.CardEntity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
diff --git a/backend/src/main/java/de/szut/casino/lootboxes/RewardEntity.java b/backend/src/main/java/de/szut/casino/lootboxes/RewardEntity.java
index 97ad6d1..ce0c155 100644
--- a/backend/src/main/java/de/szut/casino/lootboxes/RewardEntity.java
+++ b/backend/src/main/java/de/szut/casino/lootboxes/RewardEntity.java
@@ -1,6 +1,7 @@
package de.szut.casino.lootboxes;
import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
@@ -24,5 +25,6 @@ public class RewardEntity {
private BigDecimal probability;
@ManyToMany(mappedBy = "rewards")
+ @JsonBackReference
private List lootBoxes = new ArrayList<>();
}