From f37a73e8d2733748b3f74e10eb3348adf6c35535 Mon Sep 17 00:00:00 2001
From: LinusCS <linus.schulze@hsnet.de>
Date: Sat, 25 Jan 2020 14:30:53 +0100
Subject: [PATCH] Added moderation and publish status to listings

Signed-off-by: LinusCS <linus.schulze@hsnet.de>
---
 .gitignore                                    |  3 +-
 .../marketplace/dto/Listing.java              | 32 ++++++++++++++++++-
 .../marketplace/dto/codecs/ListingCodec.java  |  4 +++
 .../marketplace/dto/filter/ListingFilter.java | 19 +++++++++--
 .../namespace/DatabaseFieldNames.java         |  2 ++
 .../namespace/UrlParameterNames.java          |  2 ++
 6 files changed, 57 insertions(+), 5 deletions(-)

diff --git a/.gitignore b/.gitignore
index b942f44..413a834 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,4 +40,5 @@ secret.properties
 config/*.crt
 
 #NodeJS
-node_modules/
\ No newline at end of file
+node_modules/
+/bin/
diff --git a/src/main/java/org/eclipsefoundation/marketplace/dto/Listing.java b/src/main/java/org/eclipsefoundation/marketplace/dto/Listing.java
index a6c93d3..7595cba 100644
--- a/src/main/java/org/eclipsefoundation/marketplace/dto/Listing.java
+++ b/src/main/java/org/eclipsefoundation/marketplace/dto/Listing.java
@@ -63,6 +63,8 @@ public class Listing extends NodeBase {
 	private List<Author> authors;
 	private List<Tag> tags;
 	private List<ListingVersion> versions;
+	private String publishStatus;
+	private String moderationStatus;
 
 	/**
 	 * Default constructor, sets lists to empty lists to stop null pointers
@@ -380,7 +382,35 @@ public class Listing extends NodeBase {
 		Objects.requireNonNull(versions);
 		this.versions = new ArrayList<>(versions);
 	}
-
+	
+	/**
+	 * @return publishStatus
+	 */
+	public String getPublishStatus() {
+		return publishStatus;
+	}
+	
+	/**
+	 * @param publishStatus
+	 */
+	public void setPublishStatus(String publishStatus) {
+		this.publishStatus = publishStatus;
+	}
+	
+	/**
+	 * @param moderationStatus
+	 */
+	public String getModerationStatus() {
+		return moderationStatus;
+	}
+	
+	/**
+	 * @param moderationStatus
+	 */
+	public void setModerationStatus(String moderationStatus) {
+		this.moderationStatus = moderationStatus;
+	}
+	
 	@Override
 	public boolean validate() {
 		return super.validate() && license != null && !authors.isEmpty() && !categoryIds.isEmpty()
diff --git a/src/main/java/org/eclipsefoundation/marketplace/dto/codecs/ListingCodec.java b/src/main/java/org/eclipsefoundation/marketplace/dto/codecs/ListingCodec.java
index ef2c707..5743748 100644
--- a/src/main/java/org/eclipsefoundation/marketplace/dto/codecs/ListingCodec.java
+++ b/src/main/java/org/eclipsefoundation/marketplace/dto/codecs/ListingCodec.java
@@ -80,6 +80,8 @@ public class ListingCodec implements CollectibleCodec<Listing> {
 		doc.put(DatabaseFieldNames.CATEGORY_IDS, value.getCategoryIds());
 		doc.put(DatabaseFieldNames.SCREENSHOTS, value.getScreenshots());
 		doc.put(DatabaseFieldNames.MARKET_IDS, value.getMarketIds());
+		doc.put(DatabaseFieldNames.PUBLISH_STATUS, value.getPublishStatus());
+		doc.put(DatabaseFieldNames.MODERATION_STATUS, value.getModerationStatus());
 		
 		// for nested document types, use the converters to safely transform into BSON
 		// documents
@@ -118,6 +120,8 @@ public class ListingCodec implements CollectibleCodec<Listing> {
 		out.setCategoryIds(document.getList(DatabaseFieldNames.CATEGORY_IDS, String.class));
 		out.setMarketIds(document.getList(DatabaseFieldNames.MARKET_IDS, String.class));
 		out.setScreenshots(document.getList(DatabaseFieldNames.SCREENSHOTS, String.class));
+		out.setPublishStatus(document.getString(DatabaseFieldNames.PUBLISH_STATUS));
+		out.setModerationStatus(document.getString(DatabaseFieldNames.MODERATION_STATUS));
 
 		// for nested document types, use the converters to safely transform into POJO
 		out.setAuthors(document.getList(DatabaseFieldNames.LISTING_AUTHORS, Document.class).stream()
diff --git a/src/main/java/org/eclipsefoundation/marketplace/dto/filter/ListingFilter.java b/src/main/java/org/eclipsefoundation/marketplace/dto/filter/ListingFilter.java
index 9aadaa4..b949e42 100644
--- a/src/main/java/org/eclipsefoundation/marketplace/dto/filter/ListingFilter.java
+++ b/src/main/java/org/eclipsefoundation/marketplace/dto/filter/ListingFilter.java
@@ -37,7 +37,7 @@ public class ListingFilter implements DtoFilter<Listing> {
 
 	@Inject
 	DtoFilter<ListingVersion> listingVersionFilter;
-	
+
 	@Override
 	public List<Bson> getFilters(RequestWrapper wrap, String root) {
 		List<Bson> filters = new ArrayList<>();
@@ -73,6 +73,19 @@ public class ListingFilter implements DtoFilter<Listing> {
 		if (text.isPresent()) {
 			filters.add(Filters.text(text.get()));
 		}
+
+		// Listing publish status check
+		Optional<String> publishStatus = wrap.getFirstParam(UrlParameterNames.PUBLISH_STATUS);
+		if (publishStatus.isPresent()) {
+			filters.add(Filters.eq(DatabaseFieldNames.PUBLISH_STATUS, publishStatus.get()));
+		}
+
+		// Listing moderation status check
+		Optional<String> moderationStatus = wrap.getFirstParam(UrlParameterNames.MODERATION_STATUS);
+		if (moderationStatus.isPresent()) {
+			filters.add(Filters.eq(DatabaseFieldNames.MODERATION_STATUS, moderationStatus.get()));
+		}
+
 		return filters;
 	}
 
@@ -80,8 +93,8 @@ public class ListingFilter implements DtoFilter<Listing> {
 	public List<Bson> getAggregates(RequestWrapper wrap) {
 		List<Bson> aggs = new ArrayList<>();
 		// adds a $lookup aggregate, joining categories on categoryIDS as "categories"
-		aggs.add(Aggregates.lookup(DtoTableNames.LISTING_VERSION.getTableName(), DatabaseFieldNames.DOCID, DatabaseFieldNames.LISTING_ID,
-				DatabaseFieldNames.LISTING_VERSIONS));
+		aggs.add(Aggregates.lookup(DtoTableNames.LISTING_VERSION.getTableName(), DatabaseFieldNames.DOCID,
+				DatabaseFieldNames.LISTING_ID, DatabaseFieldNames.LISTING_VERSIONS));
 		Bson filters = listingVersionFilter.wrapFiltersToAggregate(wrap, DatabaseFieldNames.LISTING_VERSIONS);
 		if (filters != null) {
 			aggs.add(filters);
diff --git a/src/main/java/org/eclipsefoundation/marketplace/namespace/DatabaseFieldNames.java b/src/main/java/org/eclipsefoundation/marketplace/namespace/DatabaseFieldNames.java
index f3d5f57..eec5a76 100644
--- a/src/main/java/org/eclipsefoundation/marketplace/namespace/DatabaseFieldNames.java
+++ b/src/main/java/org/eclipsefoundation/marketplace/namespace/DatabaseFieldNames.java
@@ -49,6 +49,8 @@ public final class DatabaseFieldNames {
 	public static final String FEATURE_ID = "feature_id";
 	public static final String INSTALL_STATE = "install_state";
 	public static final String SCREENSHOTS = "screenshots";
+	public static final String PUBLISH_STATUS = "publish_status";
+	public static final String MODERATION_STATUS = "moderation_status";
 
 	// catalog fields
 	public static final String CATALOG_TABS = "tabs";
diff --git a/src/main/java/org/eclipsefoundation/marketplace/namespace/UrlParameterNames.java b/src/main/java/org/eclipsefoundation/marketplace/namespace/UrlParameterNames.java
index 9404591..13b1b38 100644
--- a/src/main/java/org/eclipsefoundation/marketplace/namespace/UrlParameterNames.java
+++ b/src/main/java/org/eclipsefoundation/marketplace/namespace/UrlParameterNames.java
@@ -34,6 +34,8 @@ public final class UrlParameterNames {
 	public static final String DATE_FROM = "from";
 	public static final String END = "end";
 	public static final String START = "start";
+	public static final String PUBLISH_STATUS = "publish_status";
+	public static final String MODERATION_STATUS = "moderation_status";
 	
 	private UrlParameterNames() {
 	}
-- 
GitLab