From 389018af85360f72b1392720d8d7945ed8b80ecf Mon Sep 17 00:00:00 2001
From: Phan Huy Tran
Date: Wed, 23 Apr 2025 11:09:14 +0200
Subject: [PATCH] feat: add create and delete routes for lootboxes, remove
initial creation of lootboxes
---
.../de/szut/casino/CasinoApplication.java | 61 -------------------
.../casino/lootboxes/CreateLootBoxDto.java | 30 +++++++++
.../casino/lootboxes/CreateRewardDto.java | 26 ++++++++
.../casino/lootboxes/LootBoxController.java | 39 ++++++++++--
.../szut/casino/lootboxes/LootBoxEntity.java | 8 ++-
.../szut/casino/lootboxes/RewardEntity.java | 8 +++
6 files changed, 106 insertions(+), 66 deletions(-)
create mode 100644 backend/src/main/java/de/szut/casino/lootboxes/CreateLootBoxDto.java
create mode 100644 backend/src/main/java/de/szut/casino/lootboxes/CreateRewardDto.java
diff --git a/backend/src/main/java/de/szut/casino/CasinoApplication.java b/backend/src/main/java/de/szut/casino/CasinoApplication.java
index 1d7e861..68e2ebe 100644
--- a/backend/src/main/java/de/szut/casino/CasinoApplication.java
+++ b/backend/src/main/java/de/szut/casino/CasinoApplication.java
@@ -26,65 +26,4 @@ public class CasinoApplication {
public static RestTemplate restTemplate() {
return new RestTemplate();
}
-
- @Bean
- public CommandLineRunner initData(LootBoxRepository lootBoxRepository, RewardRepository rewardRepository) {
- return _ -> {
- if (lootBoxRepository.count() == 0) {
- LootBoxEntity basicLootBox = new LootBoxEntity();
- basicLootBox.setName("Basic LootBox");
- basicLootBox.setPrice(new BigDecimal("2"));
- basicLootBox.setRewards(new ArrayList<>()); // Initialize the list
-
- LootBoxEntity premiumLootBox = new LootBoxEntity();
- premiumLootBox.setName("Premium LootBox");
- premiumLootBox.setPrice(new BigDecimal("5"));
- premiumLootBox.setRewards(new ArrayList<>()); // Initialize the list
-
- lootBoxRepository.saveAll(Arrays.asList(basicLootBox, premiumLootBox));
-
- RewardEntity commonReward = new RewardEntity();
- commonReward.setValue(new BigDecimal("0.50"));
- commonReward.setProbability(new BigDecimal("0.7"));
-
- RewardEntity rareReward = new RewardEntity();
- rareReward.setValue(new BigDecimal("2.00"));
- rareReward.setProbability(new BigDecimal("0.25"));
-
- RewardEntity epicReward = new RewardEntity();
- epicReward.setValue(new BigDecimal("5.00"));
- epicReward.setProbability(new BigDecimal("0.5"));
-
- RewardEntity premiumCommon = new RewardEntity();
- premiumCommon.setValue(new BigDecimal("2.00"));
- premiumCommon.setProbability(new BigDecimal("0.6"));
-
- RewardEntity premiumRare = new RewardEntity();
- premiumRare.setValue(new BigDecimal("5.00"));
- premiumRare.setProbability(new BigDecimal("0.3"));
-
- RewardEntity legendaryReward = new RewardEntity();
- legendaryReward.setValue(new BigDecimal("15.00"));
- legendaryReward.setProbability(new BigDecimal("0.10"));
-
- rewardRepository.saveAll(Arrays.asList(
- commonReward, rareReward, epicReward,
- premiumCommon, premiumRare, legendaryReward
- ));
-
- basicLootBox.getRewards().add(commonReward);
- basicLootBox.getRewards().add(premiumRare);
-
- premiumLootBox.getRewards().add(premiumCommon);
- premiumLootBox.getRewards().add(premiumRare);
- premiumLootBox.getRewards().add(legendaryReward);
-
- 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/CreateLootBoxDto.java b/backend/src/main/java/de/szut/casino/lootboxes/CreateLootBoxDto.java
new file mode 100644
index 0000000..10e1b4e
--- /dev/null
+++ b/backend/src/main/java/de/szut/casino/lootboxes/CreateLootBoxDto.java
@@ -0,0 +1,30 @@
+package de.szut.casino.lootboxes;
+
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateLootBoxDto {
+ @NotEmpty(message = "Loot box name cannot be empty")
+ @Size(min = 3, max = 50, message = "Loot box name must be between 3 and 50 characters")
+ private String name;
+
+ @NotNull(message = "Price cannot be null")
+ @DecimalMin(value = "0.01", message = "Price must be greater than 0")
+ private BigDecimal price;
+
+ private List rewards = new ArrayList<>();
+}
diff --git a/backend/src/main/java/de/szut/casino/lootboxes/CreateRewardDto.java b/backend/src/main/java/de/szut/casino/lootboxes/CreateRewardDto.java
new file mode 100644
index 0000000..0dbe819
--- /dev/null
+++ b/backend/src/main/java/de/szut/casino/lootboxes/CreateRewardDto.java
@@ -0,0 +1,26 @@
+package de.szut.casino.lootboxes;
+
+import jakarta.validation.constraints.DecimalMax;
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateRewardDto {
+ @NotNull(message = "Reward value cannot be null")
+ @DecimalMin(value = "0.00", message = "Reward value must be positive")
+ private BigDecimal value;
+
+ @NotNull(message = "Probability cannot be null")
+ @DecimalMin(value = "0.0", message = "Probability must be at least 0.0")
+ @DecimalMax(value = "1.0", message = "Probability must be at most 1.0")
+ private BigDecimal probability;
+}
diff --git a/backend/src/main/java/de/szut/casino/lootboxes/LootBoxController.java b/backend/src/main/java/de/szut/casino/lootboxes/LootBoxController.java
index 51a17e1..2d4309d 100644
--- a/backend/src/main/java/de/szut/casino/lootboxes/LootBoxController.java
+++ b/backend/src/main/java/de/szut/casino/lootboxes/LootBoxController.java
@@ -3,13 +3,11 @@ package de.szut.casino.lootboxes;
import de.szut.casino.user.UserEntity;
import de.szut.casino.user.UserRepository;
import de.szut.casino.user.UserService;
+import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
@RestController
public class LootBoxController {
@@ -55,4 +53,37 @@ public class LootBoxController {
return ResponseEntity.ok(reward);
}
+
+ @PostMapping("/lootboxes")
+ public ResponseEntity