From 1851b12e9627eb7c78e9b378c83bf897ff187394 Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Fri, 22 Apr 2022 12:04:38 +0200 Subject: [PATCH] Fixing issue with externalIds for draft items. --- .../model/items/ItemExternalId.java | 2 +- .../items/DraftItemRepository.java | 7 ++++- .../items/ItemExternalIdFactory.java | 31 +++++++++++++++++-- 3 files changed, 35 insertions(+), 5 deletions(-) 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 50362e23..6d221f00 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 8a38bac3..7bfa1be2 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 72b62ce0..393b1bfb 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(); + } } -- GitLab