diff --git a/src/main/java/eu/sshopencloud/marketplace/model/items/ItemExternalId.java b/src/main/java/eu/sshopencloud/marketplace/model/items/ItemExternalId.java index 50362e2340b901ed4ce7a036bfa0e967f20b4145..6d221f00723271ca3374fd4debc7098f5d7b3af7 100644 --- a/src/main/java/eu/sshopencloud/marketplace/model/items/ItemExternalId.java +++ b/src/main/java/eu/sshopencloud/marketplace/model/items/ItemExternalId.java @@ -31,7 +31,7 @@ public class ItemExternalId { @Column(nullable = false, length = 2048) private String identifier; - @ManyToOne + @ManyToOne(cascade = CascadeType.REFRESH) @JoinColumn(nullable = false) private Item item; diff --git a/src/main/java/eu/sshopencloud/marketplace/repositories/items/DraftItemRepository.java b/src/main/java/eu/sshopencloud/marketplace/repositories/items/DraftItemRepository.java index 8a38bac3d4347bce34cba7f3946e9ac3141f8310..7bfa1be2ae8a956b189ffa171dc963cf05b172d3 100644 --- a/src/main/java/eu/sshopencloud/marketplace/repositories/items/DraftItemRepository.java +++ b/src/main/java/eu/sshopencloud/marketplace/repositories/items/DraftItemRepository.java @@ -5,6 +5,8 @@ import eu.sshopencloud.marketplace.model.items.DraftItem; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.Optional; @@ -17,6 +19,9 @@ public interface DraftItemRepository extends JpaRepository { Page findByOwner(User owner, Pageable pageable); - void deleteByItemId(long itemId); + boolean deleteByItemId(long itemId); + + @Query(value = "DELETE FROM draft_items WHERE id = :draftId", nativeQuery = true) + void deleteDraft(@Param("draftId") long draftId); } diff --git a/src/main/java/eu/sshopencloud/marketplace/validators/items/ItemExternalIdFactory.java b/src/main/java/eu/sshopencloud/marketplace/validators/items/ItemExternalIdFactory.java index 72b62ce04560c910442f1e69fc9bdd2758a3c43f..393b1bfbe01a70f1d041c0d55fde273a7c956d42 100644 --- a/src/main/java/eu/sshopencloud/marketplace/validators/items/ItemExternalIdFactory.java +++ b/src/main/java/eu/sshopencloud/marketplace/validators/items/ItemExternalIdFactory.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Component; import org.springframework.validation.Errors; import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; @Component @@ -23,6 +24,9 @@ public class ItemExternalIdFactory { List itemExternalIds = new ArrayList<>(); Set processedExternalIds = new HashSet<>(); + if(!item.getExternalIds().isEmpty()) + itemExternalIds.addAll(item.getExternalIds()); + if (externalIds == null) return itemExternalIds; @@ -33,9 +37,17 @@ public class ItemExternalIdFactory { ItemExternalId externalId = create(externalIds.get(i), item, errors); if (externalId != null) { - if (!processedExternalIds.contains(externalId)) { - itemExternalIds.add(externalId); - processedExternalIds.add(externalId); + if (!processedExternalIds.contains(externalId) ) { + + if(ifContains(itemExternalIds, externalId)) { + processedExternalIds.add(externalId); + if (externalIds.size() == i + 1) + return itemExternalIds; + } + else { + itemExternalIds.add(externalId); + processedExternalIds.add(externalId); + } } else { errors.popNestedPath(); @@ -71,4 +83,17 @@ public class ItemExternalIdFactory { return new ItemExternalId(itemSource.get(), externalId.getIdentifier(), item); } + + public boolean ifContains(List itemExternalIds,ItemExternalId newExternalId){ + AtomicBoolean contains = new AtomicBoolean(false); + itemExternalIds.forEach( + itemExternalId ->{ + if(itemExternalId.getItem().getId().equals(newExternalId.getItem().getId()) && itemExternalId.getItem().getPersistentId().equals(newExternalId.getItem().getPersistentId()) + && itemExternalId.getIdentifier().equals(newExternalId.getIdentifier()) && itemExternalId.getIdentifierService().equals(newExternalId.getIdentifierService())) + contains.set(true); + } + ); + + return contains.get(); + } }