diff --git a/builder-api/src/main/java/org/acme/controller/ScreenerResource.java b/builder-api/src/main/java/org/acme/controller/ScreenerResource.java index 8ab5d697..2f4bfc48 100644 --- a/builder-api/src/main/java/org/acme/controller/ScreenerResource.java +++ b/builder-api/src/main/java/org/acme/controller/ScreenerResource.java @@ -285,7 +285,7 @@ public Response getScreenerFormPaths(@Context SecurityIdentity identity, try { List benefits = screenerRepository.getBenefitsInScreener(screener); - List paths = new ArrayList<>(inputSchemaService.extractAllInputPaths(benefits)); + List paths = new ArrayList<>(inputSchemaService.extractUniqueInputPaths(benefits)); Collections.sort(paths, new Comparator() { public int compare(FormPath fp1, FormPath fp2) { // compare two instance of `Score` and return `int` as result. diff --git a/builder-api/src/main/java/org/acme/service/InputSchemaService.java b/builder-api/src/main/java/org/acme/service/InputSchemaService.java index 2cf52e25..ad091387 100644 --- a/builder-api/src/main/java/org/acme/service/InputSchemaService.java +++ b/builder-api/src/main/java/org/acme/service/InputSchemaService.java @@ -23,10 +23,10 @@ public class InputSchemaService { * Extracts all unique input paths from all benefits in a screener. * * @param benefits List of benefits containing checks with inputDefinitions - * @return Set of unique dot-separated paths (e.g., "people.applicant.dateOfBirth") + * @return List of unique FormPath objects */ - public Set extractAllInputPaths(List benefits) { - Set pathSet = new HashSet<>(); + public List extractUniqueInputPaths(List benefits) { + Map pathTypeMap = new HashMap<>(); for (Benefit benefit : benefits) { List checks = benefit.getChecks(); @@ -34,12 +34,18 @@ public Set extractAllInputPaths(List benefits) { for (CheckConfig check : checks) { JsonNode transformedSchema = transformInputDefinitionSchema(check); - List paths = extractJsonSchemaPaths(transformedSchema); - pathSet.addAll(paths); + List checkFormPaths = extractJsonSchemaPaths(transformedSchema); + for (FormPath checkFormPath : checkFormPaths) { + // If the same path exists with different types, keep the first one found + pathTypeMap.putIfAbsent(checkFormPath.getPath(), checkFormPath.getType()); + } } } - return pathSet; + // Convert to sorted list of FormPath objects + return pathTypeMap.entrySet().stream() + .map(entry -> new FormPath(entry.getKey(), entry.getValue())) + .toList(); } /**