diff --git a/.gitignore b/.gitignore index b942f440715c29abc9a536a330c4181518c235c7..413a834f4457afcde0c58daa0811dabd4085c881 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 a6c93d3badc9da38f09e263ccfc937a236bd16f9..7595cba6a2044119345f3ebbf71f14fda2f26ac0 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 ef2c7070044c8152877d7af86c23fee119e060b3..57437481eb37a68e804644637392370c38e438aa 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 9aadaa4e0d7ff710be10a06ef3468bf0c22b7ac1..b949e425f246c04322379e0bc778c56bf921e315 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 f3d5f575d09a909a509a13979c8389951f126c53..eec5a767ea9a34059125b51003a01a065f52c5ca 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 94045917d1f52f458542dee941d48ba7b40f8bc6..13b1b3804f54247c60b78ba2505b8ad756799d69 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() { }