feat(search): extend SearchRequest with attributeFilters (legacy ctor preserved)
This commit is contained in:
@@ -54,7 +54,8 @@ public record SearchRequest(
|
|||||||
String sortField,
|
String sortField,
|
||||||
String sortDir,
|
String sortDir,
|
||||||
String afterExecutionId,
|
String afterExecutionId,
|
||||||
String environment
|
String environment,
|
||||||
|
List<AttributeFilter> attributeFilters
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private static final int DEFAULT_LIMIT = 50;
|
private static final int DEFAULT_LIMIT = 50;
|
||||||
@@ -83,6 +84,24 @@ public record SearchRequest(
|
|||||||
if (offset < 0) offset = 0;
|
if (offset < 0) offset = 0;
|
||||||
if (sortField == null || !ALLOWED_SORT_FIELDS.contains(sortField)) sortField = "startTime";
|
if (sortField == null || !ALLOWED_SORT_FIELDS.contains(sortField)) sortField = "startTime";
|
||||||
if (!"asc".equalsIgnoreCase(sortDir)) sortDir = "desc";
|
if (!"asc".equalsIgnoreCase(sortDir)) sortDir = "desc";
|
||||||
|
if (attributeFilters == null) attributeFilters = List.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Legacy 21-arg constructor preserved for existing call sites — defaults attributeFilters to empty. */
|
||||||
|
public SearchRequest(
|
||||||
|
String status, Instant timeFrom, Instant timeTo,
|
||||||
|
Long durationMin, Long durationMax, String correlationId,
|
||||||
|
String text, String textInBody, String textInHeaders, String textInErrors,
|
||||||
|
String routeId, String instanceId, String processorType,
|
||||||
|
String applicationId, List<String> instanceIds,
|
||||||
|
int offset, int limit, String sortField, String sortDir,
|
||||||
|
String afterExecutionId, String environment
|
||||||
|
) {
|
||||||
|
this(status, timeFrom, timeTo, durationMin, durationMax, correlationId,
|
||||||
|
text, textInBody, textInHeaders, textInErrors,
|
||||||
|
routeId, instanceId, processorType, applicationId, instanceIds,
|
||||||
|
offset, limit, sortField, sortDir, afterExecutionId, environment,
|
||||||
|
List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the snake_case column name for ORDER BY. */
|
/** Returns the snake_case column name for ORDER BY. */
|
||||||
@@ -96,7 +115,8 @@ public record SearchRequest(
|
|||||||
status, timeFrom, timeTo, durationMin, durationMax, correlationId,
|
status, timeFrom, timeTo, durationMin, durationMax, correlationId,
|
||||||
text, textInBody, textInHeaders, textInErrors,
|
text, textInBody, textInHeaders, textInErrors,
|
||||||
routeId, instanceId, processorType, applicationId, resolvedInstanceIds,
|
routeId, instanceId, processorType, applicationId, resolvedInstanceIds,
|
||||||
offset, limit, sortField, sortDir, afterExecutionId, environment
|
offset, limit, sortField, sortDir, afterExecutionId, environment,
|
||||||
|
attributeFilters
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,7 +126,8 @@ public record SearchRequest(
|
|||||||
status, timeFrom, timeTo, durationMin, durationMax, correlationId,
|
status, timeFrom, timeTo, durationMin, durationMax, correlationId,
|
||||||
text, textInBody, textInHeaders, textInErrors,
|
text, textInBody, textInHeaders, textInErrors,
|
||||||
routeId, instanceId, processorType, applicationId, instanceIds,
|
routeId, instanceId, processorType, applicationId, instanceIds,
|
||||||
offset, limit, sortField, sortDir, afterExecutionId, env
|
offset, limit, sortField, sortDir, afterExecutionId, env,
|
||||||
|
attributeFilters
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,7 +143,8 @@ public record SearchRequest(
|
|||||||
status, ts, timeTo, durationMin, durationMax, correlationId,
|
status, ts, timeTo, durationMin, durationMax, correlationId,
|
||||||
text, textInBody, textInHeaders, textInErrors,
|
text, textInBody, textInHeaders, textInErrors,
|
||||||
routeId, instanceId, processorType, applicationId, instanceIds,
|
routeId, instanceId, processorType, applicationId, instanceIds,
|
||||||
offset, limit, sortField, sortDir, afterExecutionId, environment
|
offset, limit, sortField, sortDir, afterExecutionId, environment,
|
||||||
|
attributeFilters
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,4 +58,31 @@ class AttributeFilterTest {
|
|||||||
AttributeFilter f = new AttributeFilter("order", "47");
|
AttributeFilter f = new AttributeFilter("order", "47");
|
||||||
assertThat(f.toLikePattern()).isNull();
|
assertThat(f.toLikePattern()).isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void searchRequest_canonicalCtor_acceptsAttributeFilters() {
|
||||||
|
SearchRequest r = new SearchRequest(
|
||||||
|
null, null, null, null, null, null, null, null, null, null,
|
||||||
|
null, null, null, null, null, 0, 50, null, null, null, null,
|
||||||
|
java.util.List.of(new AttributeFilter("order", "47")));
|
||||||
|
assertThat(r.attributeFilters()).hasSize(1);
|
||||||
|
assertThat(r.attributeFilters().get(0).key()).isEqualTo("order");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void searchRequest_legacyCtor_defaultsAttributeFiltersToEmpty() {
|
||||||
|
SearchRequest r = new SearchRequest(
|
||||||
|
null, null, null, null, null, null, null, null, null, null,
|
||||||
|
null, null, null, null, null, 0, 50, null, null, null, null);
|
||||||
|
assertThat(r.attributeFilters()).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void searchRequest_compactCtor_normalizesNullAttributeFilters() {
|
||||||
|
SearchRequest r = new SearchRequest(
|
||||||
|
null, null, null, null, null, null, null, null, null, null,
|
||||||
|
null, null, null, null, null, 0, 50, null, null, null, null,
|
||||||
|
null);
|
||||||
|
assertThat(r.attributeFilters()).isNotNull().isEmpty();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user