diff --git a/backend/src/main/java/de/szut/casino/CasinoApplication.java b/backend/src/main/java/de/szut/casino/CasinoApplication.java index 8c99f02..cc22e2c 100644 --- a/backend/src/main/java/de/szut/casino/CasinoApplication.java +++ b/backend/src/main/java/de/szut/casino/CasinoApplication.java @@ -1,10 +1,19 @@ package de.szut.casino; +import de.szut.casino.lootboxes.LootBoxEntity; +import de.szut.casino.lootboxes.LootBoxRepository; +import de.szut.casino.lootboxes.RewardEntity; +import de.szut.casino.lootboxes.RewardRepository; +import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; + @SpringBootApplication public class CasinoApplication { @@ -16,4 +25,64 @@ public class CasinoApplication { public static RestTemplate restTemplate() { return new RestTemplate(); } + + @Bean + 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")); + + // Create premium LootBox + LootBoxEntity premiumLootBox = new LootBoxEntity(); + premiumLootBox.setName("Premium LootBox"); + premiumLootBox.setPrice(new BigDecimal("4.99")); + + // Save LootBoxes first to get IDs + 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)); + + rewardRepository.saveAll(Arrays.asList( + commonReward, rareReward, epicReward, + premiumCommon, premiumRare, legendaryReward + )); + 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/LootBoxEntity.java b/backend/src/main/java/de/szut/casino/lootboxes/LootBoxEntity.java index 7138bf3..bd6c588 100644 --- a/backend/src/main/java/de/szut/casino/lootboxes/LootBoxEntity.java +++ b/backend/src/main/java/de/szut/casino/lootboxes/LootBoxEntity.java @@ -29,6 +29,11 @@ public class LootBoxEntity { @Column(precision = 19, scale = 2) private BigDecimal price; - @OneToMany(mappedBy = "lootBox", cascade = CascadeType.ALL, orphanRemoval = true) + @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) + @JoinTable( + name = "lootbox_reward", + joinColumns = @JoinColumn(name = "lootbox_id"), + inverseJoinColumns = @JoinColumn(name = "reward_id") + ) private List rewards = new ArrayList<>(); } diff --git a/backend/src/main/java/de/szut/casino/lootboxes/LootBoxRepository.java b/backend/src/main/java/de/szut/casino/lootboxes/LootBoxRepository.java index 96ba188..472388e 100644 --- a/backend/src/main/java/de/szut/casino/lootboxes/LootBoxRepository.java +++ b/backend/src/main/java/de/szut/casino/lootboxes/LootBoxRepository.java @@ -1,6 +1,5 @@ package de.szut.casino.lootboxes; -import de.szut.casino.blackjack.BlackJackGameEntity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; 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 0c1d21d..97ad6d1 100644 --- a/backend/src/main/java/de/szut/casino/lootboxes/RewardEntity.java +++ b/backend/src/main/java/de/szut/casino/lootboxes/RewardEntity.java @@ -1,14 +1,16 @@ package de.szut.casino.lootboxes; import com.fasterxml.jackson.annotation.JsonBackReference; -import com.fasterxml.jackson.annotation.JsonManagedReference; -import de.szut.casino.blackjack.BlackJackGameEntity; import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +@Getter +@Setter @Entity public class RewardEntity { @Id @@ -21,8 +23,6 @@ public class RewardEntity { @Column(precision = 5, scale = 2) private BigDecimal probability; - @ManyToOne - @JoinColumn(name = "lootBox_id", nullable = false) - @JsonBackReference - private LootBoxEntity lootBox; + @ManyToMany(mappedBy = "rewards") + private List lootBoxes = new ArrayList<>(); }