Skip to content

Commit

Permalink
Merge branch 'master' into dev/#218
Browse files Browse the repository at this point in the history
# Conflicts:
#	backend/src/main/java/org/sc/data/repository/PlaceDAO.java
#	backend/src/main/java/org/sc/service/TrailService.kt
  • Loading branch information
loreV committed Jun 29, 2022
2 parents 4e6f097 + a6af13b commit b09c0b2
Show file tree
Hide file tree
Showing 13 changed files with 128 additions and 47 deletions.
4 changes: 2 additions & 2 deletions backend/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -185,8 +185,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>8</source>
<target>8</target>
<source>11</source>
<target>11</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
Expand Down
6 changes: 5 additions & 1 deletion backend/src/main/java/org/sc/controller/TrailController.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.sc.service.TrailImporterService;
import org.sc.manager.TrailManager;
import org.sc.processor.TrailSimplifierLevel;
import org.sc.service.TrailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

Expand All @@ -35,20 +36,23 @@ public class TrailController {
protected final TrailImporterService trailManagementManager;
protected final AuthFacade authenticationProvider;
private final ControllerPagination controllerPagination;
private final TrailService trailService;

@Autowired
public TrailController(final TrailManager trailManager,
final GeneralValidator generalValidator,
final TrailResponseHelper trailResponseHelper,
final TrailImporterService trailManagementManager,
final AuthFacade authFacade,
final ControllerPagination controllerPagination) {
final ControllerPagination controllerPagination,
final TrailService trailService) {
this.trailManager = trailManager;
this.generalValidator = generalValidator;
this.trailResponseHelper = trailResponseHelper;
this.trailManagementManager = trailManagementManager;
this.authenticationProvider = authFacade;
this.controllerPagination = controllerPagination;
this.trailService = trailService;
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@
import org.sc.controller.response.ControllerPagination;
import org.sc.controller.response.TrailPreviewResponseHelper;
import org.sc.manager.TrailPreviewManager;
import org.sc.processor.TrailSimplifierLevel;
import org.sc.service.TrailPreviewService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Collections;

import static java.util.Collections.emptySet;
import static org.sc.configuration.AppBoundaries.MAX_DOCS_ON_READ;
import static org.sc.configuration.AppBoundaries.MIN_DOCS_ON_READ;
Expand All @@ -22,14 +26,17 @@ public class TrailPreviewController {

private final TrailPreviewManager trailManager;
private final TrailPreviewResponseHelper trailPreviewResponseHelper;
private final TrailPreviewService trailPreviewService;
private final ControllerPagination controllerPagination;

@Autowired
public TrailPreviewController(final TrailPreviewManager trailManager,
final TrailPreviewResponseHelper trailPreviewResponseHelper,
final TrailPreviewService trailPreviewService,
final ControllerPagination controllerPagination) {
this.trailManager = trailManager;
this.trailPreviewResponseHelper = trailPreviewResponseHelper;
this.trailPreviewService = trailPreviewService;
this.controllerPagination = controllerPagination;
}

Expand Down Expand Up @@ -89,4 +96,21 @@ public TrailPreviewResponse findByTrailCode(@PathVariable String code,
.constructResponse(emptySet(), trailManager.findPreviewsByCode(code, skip, limit, realm, isDraftTrailVisible),
trailManager.countFindingByCode(realm, code, isDraftTrailVisible), skip, limit);
}

@Operation(summary = "Retrieve trails by location name or trail name")
@GetMapping("/find/name/{name}")
public TrailPreviewResponse findByLocationOrTrailNames(@PathVariable String name,
@RequestParam(required = false, defaultValue = NO_FILTERING_TOKEN) String realm,
@RequestParam(defaultValue = "LOW") TrailSimplifierLevel level,
@RequestParam(required = false, defaultValue = MIN_DOCS_ON_READ) int skip,
@RequestParam(required = false, defaultValue = MAX_DOCS_ON_READ) int limit,
@RequestParam(defaultValue = "false") boolean isDraftTrailVisible) {
return trailPreviewResponseHelper
.constructResponse(Collections.emptySet(),
trailPreviewService.searchByLocationNameOrName(
name, realm, isDraftTrailVisible, skip, limit),
trailManager.countFindingByNameOrLocationName(name, realm, isDraftTrailVisible),
Constants.ONE, Constants.ONE);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -59,15 +59,15 @@ public List<AccessibilityNotification> getUnresolvedByTrailId(final String id, f
public List<AccessibilityNotification> getResolvedByTrailId(final String id, final int skip, final int limit, String realm) {
return toNotificationList(collection.find(
new Document(AccessibilityNotification.TRAIL_ID, id)
.append(AccessibilityNotification.RESOLUTION, new Document($NOT_EQUAL, null)))
.append(AccessibilityNotification.RESOLUTION, new Document($_NOT_EQUAL, null)))
.skip(skip).limit(limit));
}

public List<AccessibilityNotification> getSolved(final int skip,
final int limit, String realm) {
return toNotificationList(collection.find(
MongoUtils.getRealmConditionalFilter(realm, COLLECTION_REALM_STRUCTURE)
.append(AccessibilityNotification.RESOLUTION, new Document($NOT_EQUAL, "")))
.append(AccessibilityNotification.RESOLUTION, new Document($_NOT_EQUAL, "")))
.skip(skip).limit(limit));
}

Expand Down Expand Up @@ -129,7 +129,7 @@ public long countAccessibility(String realm) {

public long countSolved() {
return collection.countDocuments(new Document(AccessibilityNotification.RESOLUTION,
new Document($NOT_EQUAL, null)));
new Document($_NOT_EQUAL, null)));
}

public long countNotSolved(String realm) {
Expand All @@ -140,11 +140,11 @@ public long countNotSolved(String realm) {

public long countSolvedForTrailId(final String trailId) {
return collection.countDocuments(new Document(AccessibilityNotification.TRAIL_ID, trailId)
.append(AccessibilityNotification.RESOLUTION, new Document($NOT_EQUAL, null)));
.append(AccessibilityNotification.RESOLUTION, new Document($_NOT_EQUAL, null)));
}

public long countNotSolvedForTrailId(final String trailId) {
return collection.countDocuments(new Document(AccessibilityNotification.TRAIL_ID, trailId)
.append(AccessibilityNotification.RESOLUTION, new Document($NOT_EQUAL, false)));
.append(AccessibilityNotification.RESOLUTION, new Document($_NOT_EQUAL, false)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

import static java.util.stream.Collectors.toList;
import static org.apache.logging.log4j.LogManager.getLogger;
import static org.sc.data.repository.MongoUtils.$NOT_EQUAL;
import static org.sc.data.repository.MongoUtils.$_NOT_EQUAL;
import static org.sc.data.repository.MongoUtils.DOT;

@Repository
Expand Down Expand Up @@ -129,7 +129,7 @@ public List<AccessibilityReport> getUpgradedByRealm(final String realm,
final int limit) {
return toNotificationList(collection.find(
new Document(COLLECTION_REALM_STRUCT, realm)
.append(AccessibilityReport.ISSUE_ID, new Document($NOT_EQUAL, "")))
.append(AccessibilityReport.ISSUE_ID, new Document($_NOT_EQUAL, "")))
.sort(new Document(AccessibilityReport.REPORT_DATE, MongoUtils.ASCENDING_ORDER))
.skip(skip)
.limit(limit)
Expand Down Expand Up @@ -161,7 +161,7 @@ public long countUnapgraded(final String realm) {
public long countUpgraded(final String realm) {
return collection.countDocuments(
new Document(COLLECTION_REALM_STRUCT, realm)
.append(AccessibilityReport.ISSUE_ID, new Document($NOT_EQUAL, "")));
.append(AccessibilityReport.ISSUE_ID, new Document($_NOT_EQUAL, "")));
}

public List<AccessibilityReport> validate(final String validationId) {
Expand Down
14 changes: 8 additions & 6 deletions backend/src/main/java/org/sc/data/repository/MongoUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,19 @@ public class MongoUtils {
public static final String EXISTS_PARAM = "$exists";
public static final String DOLLAR = "$";
public static final String DOT = ".";
public static final String OR = "$or";
public static final String $NOT_EQUAL = "$ne";
public static final String $_OR = "$or";
public static final String $_NOT_EQUAL = "$ne";
public static final String $_NEAR_OPERATOR = "$near";
public static final String $_GEOMETRY = "$geometry";
public static final String NEAR_OPERATOR = "near";
public static final String $_SET = "$set";
public static final String $_IN = "$in";
public static final String NEAR_OPERATOR = "near";
public static final String LIMIT = "$limit";
public static final String SKIP = "$skip";
public static final String $PULL = "$pull";
public static final String $PUSH = "$push";
public static final String $ADD_TO_SET = "$addToSet";
public static final String RESOLVED_COORDINATES = "coordinates";
public static final String $_MAX_M_DISTANCE_FILTER = "$maxDistance";
public static final String $_MIN_DISTANCE_FILTER = "$minDistance";
public static final String $_GEO_NEAR_OPERATOR = "$geoNear";
public static final String $_GEO_WITHIN = "$geoWithin";
public static final String $_GEO_INTERSECT = "$geoIntersects";
Expand Down Expand Up @@ -71,12 +69,16 @@ public static Document getRealmConditionalFilter(final String realm, final Strin
getRealmFilter(realm, dbRealmStructureSelector);
}

public static Pattern getAnyMatchingPattern(final String name) {
return Pattern.compile(".*" + name + ".*", Pattern.CASE_INSENSITIVE);
}

private static Document getRealmFilter(final String realm, final String dbRealmStructureSelector) {
return new Document(dbRealmStructureSelector, realm);
}

private static Document getNoFilter(final String dbRealmStructureSelector) {
return new Document(dbRealmStructureSelector, new Document($NOT_EQUAL, ""));
return new Document(dbRealmStructureSelector, new Document($_NOT_EQUAL, ""));
}

@NotNull
Expand Down
6 changes: 3 additions & 3 deletions backend/src/main/java/org/sc/data/repository/PlaceDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,9 @@ public List<Place> getLikeName(final String name, int page, int count, String re

private Bson getLikeNameFilter(String name, String realm) {
return MongoUtils.getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR)
.append(MongoUtils.OR, Arrays.asList(
new Document(NAME, getStartNameMatchPattern(name)),
new Document(TAGS, getStartNameMatchPattern(name))));
.append(MongoUtils.$_OR, Arrays.asList(
new Document(Place.NAME, getStartNameMatchPattern(name)),
new Document(Place.TAGS, getStartNameMatchPattern(name))));
}

@NotNull
Expand Down
51 changes: 43 additions & 8 deletions backend/src/main/java/org/sc/data/repository/TrailDAO.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.sc.data.repository;

import com.mongodb.client.AggregateIterable;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Aggregates;
Expand All @@ -8,6 +9,7 @@
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.sc.configuration.DataSource;
import org.sc.data.entity.mapper.*;
import org.sc.data.geo.CoordinatesRectangle;
Expand Down Expand Up @@ -85,7 +87,7 @@ public List<Trail> getTrails(int skip, int limit,
final TrailSimplifierLevel trailSimplifierLevel,
final String realm,
final boolean isDraftTrailVisible) {
final Document realmFilter = MongoUtils.getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR);
final Document realmFilter = getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR);
return toTrailsList(collection.find(
realmFilter.append(Trail.STATUS,
statusFilterHelper.getInFilterBson(isDraftTrailVisible)))
Expand All @@ -97,7 +99,7 @@ public List<Trail> getTrails(int skip, int limit,
public List<TrailMapping> getTrailsMappings(int skip, int limit,
final String realm,
boolean isDraftTrailVisible) {
final Document realmFilter = MongoUtils.getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR);
final Document realmFilter = getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR);
return toTrailsMappingList(collection.find(realmFilter
.append(Trail.STATUS, statusFilterHelper.getInFilterBson(isDraftTrailVisible)))
.projection(new Document(Trail.ID, ONE)
Expand Down Expand Up @@ -155,7 +157,7 @@ public List<Trail> upsert(final Trail trailRequest) {
public List<TrailPreview> getTrailPreviews(final int skip, final int limit,
final String realm, boolean isDraftTrailVisible) {
final Bson statusFilter = getBsonAggregateStatusInFilter(isDraftTrailVisible);
final Document filter = MongoUtils.getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR);
final Document filter = getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR);
final Bson project = getTrailPreviewProjection();

final Bson aLimit = Aggregates.limit(limit);
Expand All @@ -174,7 +176,7 @@ public List<TrailPreview> findPreviewsByCode(final String code, final int skip,
final boolean isDraftTrailVisible) {
final Bson statusFilter = getBsonAggregateStatusInFilter(isDraftTrailVisible);
final Document codeFilter = new Document(Trail.CODE, getStartNameMatchPattern(code));
final Document realmFilter = MongoUtils.getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR);
final Document realmFilter = getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR);
final Bson project = getTrailPreviewProjection();
final Bson aLimit = Aggregates.limit(limit);
final Bson aSkip = Aggregates.skip(skip);
Expand Down Expand Up @@ -296,14 +298,37 @@ public void updatePlacesRefsByTrailId(final String trailId,
.collect(Collectors.toList()))));
}

public List<TrailPreview> searchByLocationOrTrailName(
String name,
String realm,
boolean isDraftTrailVisible,
int skip, int limit) {
final Document realmFilter = getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR);
final Bson statusFilter = getBsonAggregateStatusInFilter(isDraftTrailVisible);
final Bson aLimit = Aggregates.limit(limit);
final Bson aSkip = Aggregates.skip(skip);
final Document filter = new Document($_OR, Arrays.asList(
new Document("locations.name", getAnyMatchingPattern(name)),
new Document("name", getAnyMatchingPattern(name))
));
final AggregateIterable<Document> foundTrails = collection.aggregate(
Arrays.asList(
match(filter),
match(statusFilter),
match(realmFilter),
aLimit, aSkip));
return toTrailsPreviewList(foundTrails);
}


public long countTrail() {
return collection.countDocuments();
}

public long countTrailByRealm(final String realm, boolean isDraftTrailVisible) {
return collection.countDocuments(
MongoUtils.getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR)
.append(Trail.STATUS, statusFilterHelper.getInFilterBson(isDraftTrailVisible)));
getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR)
.append(Trail.STATUS, statusFilterHelper.getInFilterBson(isDraftTrailVisible)));
}

private List<TrailPreview> toTrailsPreviewList(final Iterable<Document> documents) {
Expand Down Expand Up @@ -437,7 +462,7 @@ public List<TrailMapping> getByStartEndPoint(final double startLatitude, final d

public long countTotalByCode(final String realm, final String code, boolean isDraftTrailVisible) {
return collection.countDocuments(
MongoUtils.getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR)
getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR)
.append(Trail.CODE, getStartNameMatchPattern(code))
.append(Trail.STATUS, statusFilterHelper.getInFilterBson(isDraftTrailVisible)));
}
Expand All @@ -447,5 +472,15 @@ private List<Double> resolveVertex(Coordinates2D bottomLeft, Coordinates2D topRi
topRight.getLatitude());
}


public long countFindingByNameOrLocationName(@Nullable String name, @NotNull String realm,
boolean draftTrailVisible) {
final Document realmFilter = getRealmConditionalFilter(realm, DB_REALM_STRUCTURE_SELECTOR);
final Bson statusFilter = getBsonAggregateStatusInFilter(draftTrailVisible);
return collection.countDocuments(
new Document($_OR, Arrays.asList(
new Document("locations.name", getAnyMatchingPattern(name)),
new Document("name", getAnyMatchingPattern(name)),
realmFilter, statusFilter
)));
}
}
3 changes: 2 additions & 1 deletion backend/src/main/java/org/sc/manager/TrailManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class TrailManager @Autowired constructor(
private val trailDAO: TrailDAO,
private val placeDAO: PlaceDAO,
private val trailMapper: TrailMapper,
private val trailPreviewMapper: TrailPreviewMapper,
private val linkedMediaMapper: LinkedMediaMapper,
private val placeRefMapper: PlaceRefMapper,
private val trailIntersectionMapper: TrailIntersectionMapper,
Expand Down Expand Up @@ -204,7 +205,7 @@ class TrailManager @Autowired constructor(
}

private fun getPreviewById(id: String): List<TrailPreview> =
trailDAO.getTrailPreviewById(id);
trailDAO.getTrailPreviewById(id)


}
Expand Down
Loading

0 comments on commit b09c0b2

Please sign in to comment.