From 2b2c0c120eef29cc318f618fce4b904b985a0652 Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Tue, 17 May 2022 16:14:56 +0200 Subject: [PATCH 1/2] Refactoring statuses for contributed items endpoint. --- .../repositories/items/ItemRepository.java | 15 +++++++-------- .../services/items/ItemsService.java | 17 +++++------------ .../items/exception/BasicItemsComparator.java | 16 ---------------- .../items/exception/ItemsComparator.java | 15 +++++++++++++++ 4 files changed, 27 insertions(+), 36 deletions(-) delete mode 100644 src/main/java/eu/sshopencloud/marketplace/services/items/exception/BasicItemsComparator.java create mode 100644 src/main/java/eu/sshopencloud/marketplace/services/items/exception/ItemsComparator.java diff --git a/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java b/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java index 0f7cd8da..807b7f16 100644 --- a/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java +++ b/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java @@ -1,11 +1,8 @@ package eu.sshopencloud.marketplace.repositories.items; -import eu.sshopencloud.marketplace.model.auth.User; -import eu.sshopencloud.marketplace.model.items.DraftItem; import eu.sshopencloud.marketplace.model.items.Item; +import eu.sshopencloud.marketplace.model.items.ItemStatus; import eu.sshopencloud.marketplace.model.vocabularies.Concept; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @@ -100,10 +97,12 @@ public interface ItemRepository extends ItemVersionRepository { " AND v.status = 'DELETED' AND i.category != 'STEP'", nativeQuery = true) List getDeletedItemsIds(); - @Query(value = "SELECT DISTINCT (v.curr_ver_id) FROM items i\n" + - " INNER JOIN versioned_items v \n" + - " ON v.id = i.persistent_id\n" + - " WHERE i.info_contributor_id = :contributorId ", nativeQuery = true) + @Query(value = " SELECT DISTINCT(v.curr_ver_id) FROM items i" + + " INNER JOIN versioned_items v " + + " ON v.id = i.persistent_id" + + " WHERE i.info_contributor_id = :contributorId", nativeQuery = true) List getContributedItemsIds(Long contributorId); + @Query("select i from Item i where i.id in :idList AND i.status in :itemStatusList ") + List findByIdInAndStatusIsIn(@Param("idList") List idList, @Param("itemStatusList") List itemStatusList); } diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsService.java b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsService.java index 5ce61733..1927699f 100644 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsService.java +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/ItemsService.java @@ -9,17 +9,14 @@ import eu.sshopencloud.marketplace.mappers.items.ItemConverter; import eu.sshopencloud.marketplace.model.actors.Actor; import eu.sshopencloud.marketplace.model.actors.ActorRole; import eu.sshopencloud.marketplace.model.auth.User; -import eu.sshopencloud.marketplace.model.items.DraftItem; -import eu.sshopencloud.marketplace.model.items.Item; -import eu.sshopencloud.marketplace.model.items.ItemCategory; -import eu.sshopencloud.marketplace.model.items.ItemContributor; +import eu.sshopencloud.marketplace.model.items.*; import eu.sshopencloud.marketplace.model.search.IndexItem; import eu.sshopencloud.marketplace.model.sources.Source; import eu.sshopencloud.marketplace.repositories.items.*; import eu.sshopencloud.marketplace.repositories.search.SearchItemRepository; import eu.sshopencloud.marketplace.repositories.sources.SourceRepository; import eu.sshopencloud.marketplace.services.auth.LoggedInUserHolder; -import eu.sshopencloud.marketplace.services.items.exception.BasicItemsComparator; +import eu.sshopencloud.marketplace.services.items.exception.ItemsComparator; import eu.sshopencloud.marketplace.services.search.SearchConverter; import org.apache.commons.lang3.StringUtils; import org.springframework.context.annotation.Lazy; @@ -271,25 +268,21 @@ public class ItemsService extends ItemVersionService { public PaginatedItemsBasic getContributedItems(ItemOrder order, PageCoords pageCoords) { - BasicItemsComparator comparator = new BasicItemsComparator(); User currentUser = LoggedInUserHolder.getLoggedInUser(); - if (currentUser == null ) return null; if (order == null) order = ItemOrder.MODIFIED_ON; - List list = itemRepository.getContributedItemsIds(currentUser.getId()).stream().map(id -> itemRepository.findById(id).get()).collect(Collectors.toList()); + List list = itemRepository.findByIdInAndStatusIsIn(itemRepository.getContributedItemsIds(currentUser.getId()), List.of(ItemStatus.APPROVED, ItemStatus.INGESTED, ItemStatus.SUGGESTED)); Page pages = new PageImpl<>(list, PageRequest.of(pageCoords.getPage() - 1, pageCoords.getPerpage(), Sort.by(getSortOrderByItemOrder(order))), list.size()); - List items = pages.stream().map(ItemConverter::convertItem).collect(Collectors.toList()); - if(order != ItemOrder.MODIFIED_ON) - items.sort(comparator); + list.sort(new ItemsComparator()); - return PaginatedItemsBasic.builder().items(items) + return PaginatedItemsBasic.builder().items(ItemConverter.convertItem(list)) .count(pages.getContent().size()).hits(pages.getTotalElements()) .page(pageCoords.getPage()).perpage(pageCoords.getPerpage()) .pages(pages.getTotalPages()) diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/exception/BasicItemsComparator.java b/src/main/java/eu/sshopencloud/marketplace/services/items/exception/BasicItemsComparator.java deleted file mode 100644 index c96eaa47..00000000 --- a/src/main/java/eu/sshopencloud/marketplace/services/items/exception/BasicItemsComparator.java +++ /dev/null @@ -1,16 +0,0 @@ -package eu.sshopencloud.marketplace.services.items.exception; - -import eu.sshopencloud.marketplace.dto.items.ItemBasicDto; -import lombok.experimental.UtilityClass; -import org.apache.commons.lang3.StringUtils; - -import java.util.Comparator; - - -public class BasicItemsComparator implements Comparator { - - @Override - public int compare(ItemBasicDto firstPlayer, ItemBasicDto secondPlayer) { - return StringUtils.compare(firstPlayer.getLabel(), secondPlayer.getLabel()); - } -} \ No newline at end of file diff --git a/src/main/java/eu/sshopencloud/marketplace/services/items/exception/ItemsComparator.java b/src/main/java/eu/sshopencloud/marketplace/services/items/exception/ItemsComparator.java new file mode 100644 index 00000000..5348f0da --- /dev/null +++ b/src/main/java/eu/sshopencloud/marketplace/services/items/exception/ItemsComparator.java @@ -0,0 +1,15 @@ +package eu.sshopencloud.marketplace.services.items.exception; + +import eu.sshopencloud.marketplace.model.items.Item; +import org.apache.commons.lang3.StringUtils; + +import java.util.Comparator; + + +public class ItemsComparator implements Comparator { + + @Override + public int compare(Item firstPlayer, Item secondPlayer) { + return StringUtils.compare(firstPlayer.getLabel(), secondPlayer.getLabel()); + } +} \ No newline at end of file -- GitLab From b18315ace6c1160f148fa20fe8202feff701506b Mon Sep 17 00:00:00 2001 From: Eliza Kalata Date: Tue, 17 May 2022 16:34:08 +0200 Subject: [PATCH 2/2] Excluding steps. --- .../marketplace/repositories/items/ItemRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java b/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java index 807b7f16..52bf28b6 100644 --- a/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java +++ b/src/main/java/eu/sshopencloud/marketplace/repositories/items/ItemRepository.java @@ -103,6 +103,6 @@ public interface ItemRepository extends ItemVersionRepository { " WHERE i.info_contributor_id = :contributorId", nativeQuery = true) List getContributedItemsIds(Long contributorId); - @Query("select i from Item i where i.id in :idList AND i.status in :itemStatusList ") + @Query("select i from Item i where i.id in :idList AND i.status in :itemStatusList AND i.category <> 'STEP' ") List findByIdInAndStatusIsIn(@Param("idList") List idList, @Param("itemStatusList") List itemStatusList); } -- GitLab