refactor: use many to many relation for lootboxes and rewards
This commit is contained in:
parent
084d478cd9
commit
e4bcd9d791
4 changed files with 81 additions and 8 deletions
|
@ -1,10 +1,19 @@
|
||||||
package de.szut.casino;
|
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.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class CasinoApplication {
|
public class CasinoApplication {
|
||||||
|
|
||||||
|
@ -16,4 +25,64 @@ public class CasinoApplication {
|
||||||
public static RestTemplate restTemplate() {
|
public static RestTemplate restTemplate() {
|
||||||
return new 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");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,11 @@ public class LootBoxEntity {
|
||||||
@Column(precision = 19, scale = 2)
|
@Column(precision = 19, scale = 2)
|
||||||
private BigDecimal price;
|
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<RewardEntity> rewards = new ArrayList<>();
|
private List<RewardEntity> rewards = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package de.szut.casino.lootboxes;
|
package de.szut.casino.lootboxes;
|
||||||
|
|
||||||
import de.szut.casino.blackjack.BlackJackGameEntity;
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
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 de.szut.casino.blackjack.BlackJackGameEntity;
|
|
||||||
import jakarta.persistence.*;
|
import jakarta.persistence.*;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
@Entity
|
@Entity
|
||||||
public class RewardEntity {
|
public class RewardEntity {
|
||||||
@Id
|
@Id
|
||||||
|
@ -21,8 +23,6 @@ public class RewardEntity {
|
||||||
@Column(precision = 5, scale = 2)
|
@Column(precision = 5, scale = 2)
|
||||||
private BigDecimal probability;
|
private BigDecimal probability;
|
||||||
|
|
||||||
@ManyToOne
|
@ManyToMany(mappedBy = "rewards")
|
||||||
@JoinColumn(name = "lootBox_id", nullable = false)
|
private List<LootBoxEntity> lootBoxes = new ArrayList<>();
|
||||||
@JsonBackReference
|
|
||||||
private LootBoxEntity lootBox;
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue