diff --git a/src/main/java/com/sasiedzi/event/domain/Transaction.java b/src/main/java/com/sasiedzi/event/domain/Transaction.java index a174fb8..b642716 100644 --- a/src/main/java/com/sasiedzi/event/domain/Transaction.java +++ b/src/main/java/com/sasiedzi/event/domain/Transaction.java @@ -43,7 +43,7 @@ public class Transaction implements Serializable { @OneToMany(fetch = FetchType.LAZY, mappedBy = "transaction", cascade = CascadeType.ALL, orphanRemoval = true) @JsonIgnoreProperties(value = { "transaction", "event", "registration" }, allowSetters = true) @SortComparator(TransactionItemComparator.class) - private List transactionItems = Transaction.getEmptyTransactionItemSet(); + private SortedSet transactionItems = Transaction.getEmptyTransactionItemSet(); @Transient private UserAccount beneficiary; @@ -152,11 +152,11 @@ public class Transaction implements Serializable { return this; } - public List getTransactionItems() { + public SortedSet getTransactionItems() { return this.transactionItems; } - public void setTransactionItems(List transactionItems) { + public void setTransactionItems(SortedSet transactionItems) { if (this.transactionItems != null) { this.transactionItems.forEach(i -> i.setTransaction(null)); } @@ -166,7 +166,7 @@ public class Transaction implements Serializable { this.transactionItems = transactionItems; } - public Transaction transactionItems(List transactionItems) { + public Transaction transactionItems(SortedSet transactionItems) { this.setTransactionItems(transactionItems); return this; } @@ -213,7 +213,7 @@ public class Transaction implements Serializable { "}"; } - public static List getEmptyTransactionItemSet() { - return new ArrayList(); + public static SortedSet getEmptyTransactionItemSet() { + return new TreeSet<>(new TransactionItemComparator()); } } diff --git a/src/main/java/com/sasiedzi/event/domain/TransactionItemComparator.java b/src/main/java/com/sasiedzi/event/domain/TransactionItemComparator.java index 7938a34..cb587a5 100644 --- a/src/main/java/com/sasiedzi/event/domain/TransactionItemComparator.java +++ b/src/main/java/com/sasiedzi/event/domain/TransactionItemComparator.java @@ -19,6 +19,21 @@ public class TransactionItemComparator implements Comparator { private int compareUserAccounts(UserAccount ua1, UserAccount ua2) { // Używamy naszego komparatora UserAccount - return userAccountComparator.compare(ua1, ua2); + int compare = userAccountComparator.compare(ua1, ua2); + if (compare == 0) { + // Porównanie id, uwzględniając null + if (ua1.getId() == null && ua2.getId() == null) { + return -1; // Jeśli oba id są null, to nie są równe, ale nie wiemy jak je uporządkować, więc zwracamy -1 (lub 1, zależnie od preferencji) + } else if (ua1.getId() == null) { + return -1; // Pusty ID jest "mniejszy" niż niepusty + } else if (ua2.getId() == null) { + return 1; // Pusty ID jest "mniejszy" niż niepusty + } else { + // Oba ID nie są null, więc porównujemy je normalnie + return ua1.getId().compareTo(ua2.getId()); + } + } else { + return compare; + } } } diff --git a/src/main/java/com/sasiedzi/event/service/TransactionService.java b/src/main/java/com/sasiedzi/event/service/TransactionService.java index 3b74b5e..cb1d220 100644 --- a/src/main/java/com/sasiedzi/event/service/TransactionService.java +++ b/src/main/java/com/sasiedzi/event/service/TransactionService.java @@ -32,7 +32,7 @@ public class TransactionService { private EventService eventService; public Transaction save(Transaction transaction) { - List items = transaction.getTransactionItems(); + SortedSet items = transaction.getTransactionItems(); String beneficiaryAccountName = transaction.getBeneficiary() == null ? Account.Skarbiec.toString() : transaction.getBeneficiary().getName();