feat: add route to get all lootboxes

This commit is contained in:
Phan Huy Tran 2025-04-02 10:18:51 +02:00
parent e4bcd9d791
commit 8a6bc95c92
5 changed files with 45 additions and 11 deletions

View file

@ -0,0 +1,4 @@
GET http://localhost:8080/lootboxes
Authorization: Bearer {{token}}
Content-Type: application/json

View file

@ -11,6 +11,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -30,55 +31,61 @@ public class CasinoApplication {
public CommandLineRunner initData(LootBoxRepository lootBoxRepository, RewardRepository rewardRepository) { public CommandLineRunner initData(LootBoxRepository lootBoxRepository, RewardRepository rewardRepository) {
return _ -> { return _ -> {
if (lootBoxRepository.count() == 0) { if (lootBoxRepository.count() == 0) {
// Create basic LootBox
LootBoxEntity basicLootBox = new LootBoxEntity(); LootBoxEntity basicLootBox = new LootBoxEntity();
basicLootBox.setName("Basic LootBox"); basicLootBox.setName("Basic LootBox");
basicLootBox.setPrice(new BigDecimal("1.99")); basicLootBox.setPrice(new BigDecimal("1.99"));
basicLootBox.setRewards(new ArrayList<>()); // Initialize the list
// Create premium LootBox
LootBoxEntity premiumLootBox = new LootBoxEntity(); LootBoxEntity premiumLootBox = new LootBoxEntity();
premiumLootBox.setName("Premium LootBox"); premiumLootBox.setName("Premium LootBox");
premiumLootBox.setPrice(new BigDecimal("4.99")); 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)); lootBoxRepository.saveAll(Arrays.asList(basicLootBox, premiumLootBox));
// Create rewards for basic LootBox
RewardEntity commonReward = new RewardEntity(); RewardEntity commonReward = new RewardEntity();
commonReward.setValue(new BigDecimal("0.50")); commonReward.setValue(new BigDecimal("0.50"));
commonReward.setProbability(new BigDecimal("70.00")); commonReward.setProbability(new BigDecimal("70.00"));
commonReward.setLootBoxes(List.of(premiumLootBox));
RewardEntity rareReward = new RewardEntity(); RewardEntity rareReward = new RewardEntity();
rareReward.setValue(new BigDecimal("2.00")); rareReward.setValue(new BigDecimal("2.00"));
rareReward.setProbability(new BigDecimal("25.00")); rareReward.setProbability(new BigDecimal("25.00"));
rareReward.setLootBoxes(List.of(basicLootBox));
RewardEntity epicReward = new RewardEntity(); RewardEntity epicReward = new RewardEntity();
epicReward.setValue(new BigDecimal("5.00")); epicReward.setValue(new BigDecimal("5.00"));
epicReward.setProbability(new BigDecimal("5.00")); epicReward.setProbability(new BigDecimal("5.00"));
epicReward.setLootBoxes(List.of(basicLootBox));
// Create rewards for premium LootBox
RewardEntity premiumCommon = new RewardEntity(); RewardEntity premiumCommon = new RewardEntity();
premiumCommon.setValue(new BigDecimal("2.00")); premiumCommon.setValue(new BigDecimal("2.00"));
premiumCommon.setProbability(new BigDecimal("60.00")); premiumCommon.setProbability(new BigDecimal("60.00"));
premiumCommon.setLootBoxes(List.of(premiumLootBox));
RewardEntity premiumRare = new RewardEntity(); RewardEntity premiumRare = new RewardEntity();
premiumRare.setValue(new BigDecimal("5.00")); premiumRare.setValue(new BigDecimal("5.00"));
premiumRare.setProbability(new BigDecimal("30.00")); premiumRare.setProbability(new BigDecimal("30.00"));
premiumRare.setLootBoxes(List.of(premiumLootBox));
RewardEntity legendaryReward = new RewardEntity(); RewardEntity legendaryReward = new RewardEntity();
legendaryReward.setValue(new BigDecimal("15.00")); legendaryReward.setValue(new BigDecimal("15.00"));
legendaryReward.setProbability(new BigDecimal("10.00")); legendaryReward.setProbability(new BigDecimal("10.00"));
legendaryReward.setLootBoxes(List.of(premiumLootBox));
// Save all rewards
rewardRepository.saveAll(Arrays.asList( rewardRepository.saveAll(Arrays.asList(
commonReward, rareReward, epicReward, commonReward, rareReward, epicReward,
premiumCommon, premiumRare, legendaryReward 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"); System.out.println("Initial LootBoxes and rewards created successfully");
} else { } else {
System.out.println("LootBoxes already exist, skipping initialization"); System.out.println("LootBoxes already exist, skipping initialization");

View file

@ -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<LootBoxEntity> getAllLootBoxes() {
return lootBoxRepository.findAll();
}
}

View file

@ -2,6 +2,7 @@ package de.szut.casino.lootboxes;
import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import de.szut.casino.blackjack.CardEntity; import de.szut.casino.blackjack.CardEntity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View file

@ -1,6 +1,7 @@
package de.szut.casino.lootboxes; package de.szut.casino.lootboxes;
import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@ -24,5 +25,6 @@ public class RewardEntity {
private BigDecimal probability; private BigDecimal probability;
@ManyToMany(mappedBy = "rewards") @ManyToMany(mappedBy = "rewards")
@JsonBackReference
private List<LootBoxEntity> lootBoxes = new ArrayList<>(); private List<LootBoxEntity> lootBoxes = new ArrayList<>();
} }