From cc0d88b7a48afbcbf6badda07c15cd2de8bfe5c5 Mon Sep 17 00:00:00 2001 From: Jonathan Wilkinson Date: Wed, 15 Oct 2025 16:16:59 +0100 Subject: [PATCH 1/2] fix: rename filterOptions to filters for consistency --- .../com/ctrlhub/core/assets/equipment/EquipmentRouter.kt | 4 ++-- .../assets/equipment/exposures/EquipmentExposuresRouter.kt | 4 ++-- .../com/ctrlhub/core/assets/vehicles/VehiclesRouter.kt | 4 ++-- .../ctrlhub/core/projects/operations/OperationsRouter.kt | 4 ++-- .../com/ctrlhub/core/projects/schemes/SchemesRouter.kt | 4 ++-- .../com/ctrlhub/core/router/request/RequestParameters.kt | 4 ++-- .../com/ctrlhub/core/settings/timebands/TimeBandsRouter.kt | 4 ++-- .../core/router/request/RequestParametersFiltersTest.kt | 6 +++--- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/main/kotlin/com/ctrlhub/core/assets/equipment/EquipmentRouter.kt b/src/main/kotlin/com/ctrlhub/core/assets/equipment/EquipmentRouter.kt index c686135..f7c67c6 100644 --- a/src/main/kotlin/com/ctrlhub/core/assets/equipment/EquipmentRouter.kt +++ b/src/main/kotlin/com/ctrlhub/core/assets/equipment/EquipmentRouter.kt @@ -28,9 +28,9 @@ enum class EquipmentIncludes(val value: String) : JsonApiIncludes { class EquipmentRequestParameters( offset: Int = 0, limit: Int = 100, - filterOptions: List = emptyList(), + filters: List = emptyList(), includes: List = emptyList() -) : RequestParametersWithIncludes(offset, limit, filterOptions, includes) +) : RequestParametersWithIncludes(offset, limit, filters, includes) enum class EquipmentSort(val value: String) { Name("name"); diff --git a/src/main/kotlin/com/ctrlhub/core/assets/equipment/exposures/EquipmentExposuresRouter.kt b/src/main/kotlin/com/ctrlhub/core/assets/equipment/exposures/EquipmentExposuresRouter.kt index 1914714..f7783d1 100644 --- a/src/main/kotlin/com/ctrlhub/core/assets/equipment/exposures/EquipmentExposuresRouter.kt +++ b/src/main/kotlin/com/ctrlhub/core/assets/equipment/exposures/EquipmentExposuresRouter.kt @@ -25,9 +25,9 @@ enum class EquipmentExposureIncludes(val value: String) : JsonApiIncludes { class EquipmentExposureRequestParameters( offset: Int = 0, limit: Int = 100, - filterOptions: List = emptyList(), + filters: List = emptyList(), includes: List = emptyList() -) : RequestParametersWithIncludes(offset, limit, filterOptions, includes) +) : RequestParametersWithIncludes(offset, limit, filters, includes) /** * An equipment exposure router that deals with the exposures realm of the Ctrl Hub API diff --git a/src/main/kotlin/com/ctrlhub/core/assets/vehicles/VehiclesRouter.kt b/src/main/kotlin/com/ctrlhub/core/assets/vehicles/VehiclesRouter.kt index 3b77f17..021bc15 100644 --- a/src/main/kotlin/com/ctrlhub/core/assets/vehicles/VehiclesRouter.kt +++ b/src/main/kotlin/com/ctrlhub/core/assets/vehicles/VehiclesRouter.kt @@ -32,9 +32,9 @@ enum class VehicleIncludes(val value: String) : JsonApiIncludes { class VehicleRequestParameters( offset: Int = 0, limit: Int = 100, - filterOptions: List = emptyList(), + filters: List = emptyList(), includes: List = emptyList() -) : RequestParametersWithIncludes(offset, limit, filterOptions, includes) +) : RequestParametersWithIncludes(offset, limit, filters, includes) /** * A vehicles router that deals with the vehicles realm of the Ctrl Hub API diff --git a/src/main/kotlin/com/ctrlhub/core/projects/operations/OperationsRouter.kt b/src/main/kotlin/com/ctrlhub/core/projects/operations/OperationsRouter.kt index 9fdb9c5..dc9077e 100644 --- a/src/main/kotlin/com/ctrlhub/core/projects/operations/OperationsRouter.kt +++ b/src/main/kotlin/com/ctrlhub/core/projects/operations/OperationsRouter.kt @@ -27,9 +27,9 @@ enum class OperationIncludes(val value: String) : JsonApiIncludes { class OperationRequestParameters( offset: Int = 0, limit: Int = 100, - filterOptions: List = emptyList(), + filters: List = emptyList(), includes: List = emptyList() -) : RequestParametersWithIncludes(offset, limit, filterOptions, includes) +) : RequestParametersWithIncludes(offset, limit, filters, includes) class OperationsRouter(httpClient: HttpClient) : Router(httpClient) { diff --git a/src/main/kotlin/com/ctrlhub/core/projects/schemes/SchemesRouter.kt b/src/main/kotlin/com/ctrlhub/core/projects/schemes/SchemesRouter.kt index 4c20480..8e82cd9 100644 --- a/src/main/kotlin/com/ctrlhub/core/projects/schemes/SchemesRouter.kt +++ b/src/main/kotlin/com/ctrlhub/core/projects/schemes/SchemesRouter.kt @@ -23,9 +23,9 @@ enum class SchemeIncludes(val value: String): JsonApiIncludes { class SchemeRequestParameters( offset: Int = 0, limit: Int = 100, - filterOptions: List = emptyList(), + filters: List = emptyList(), includes: List = emptyList() -) : RequestParametersWithIncludes(offset, limit, filterOptions, includes) +) : RequestParametersWithIncludes(offset, limit, filters, includes) class SchemesRouter(httpClient: HttpClient) : Router(httpClient) { diff --git a/src/main/kotlin/com/ctrlhub/core/router/request/RequestParameters.kt b/src/main/kotlin/com/ctrlhub/core/router/request/RequestParameters.kt index a42f170..74fdbdd 100644 --- a/src/main/kotlin/com/ctrlhub/core/router/request/RequestParameters.kt +++ b/src/main/kotlin/com/ctrlhub/core/router/request/RequestParameters.kt @@ -27,8 +27,8 @@ abstract class AbstractRequestParameters( class RequestParameters( offset: Int? = null, limit: Int? = null, - filterOptions: List = emptyList() -) : AbstractRequestParameters(offset, limit, filterOptions) + filters: List = emptyList() +) : AbstractRequestParameters(offset, limit, filters) open class RequestParametersWithIncludes( offset: Int? = null, diff --git a/src/main/kotlin/com/ctrlhub/core/settings/timebands/TimeBandsRouter.kt b/src/main/kotlin/com/ctrlhub/core/settings/timebands/TimeBandsRouter.kt index a8469c5..56f4e2f 100644 --- a/src/main/kotlin/com/ctrlhub/core/settings/timebands/TimeBandsRouter.kt +++ b/src/main/kotlin/com/ctrlhub/core/settings/timebands/TimeBandsRouter.kt @@ -10,8 +10,8 @@ import io.ktor.client.HttpClient class TimeBandsRequestParameters( offset: Int? = 0, limit: Int? = 100, - filterOptions: List = emptyList() -) : AbstractRequestParameters(offset, limit, filterOptions) + filters: List = emptyList() +) : AbstractRequestParameters(offset, limit, filters) class TimeBandsRouter(httpClient: HttpClient) : Router(httpClient) { /** diff --git a/src/test/kotlin/com/ctrlhub/core/router/request/RequestParametersFiltersTest.kt b/src/test/kotlin/com/ctrlhub/core/router/request/RequestParametersFiltersTest.kt index c283971..ede5163 100644 --- a/src/test/kotlin/com/ctrlhub/core/router/request/RequestParametersFiltersTest.kt +++ b/src/test/kotlin/com/ctrlhub/core/router/request/RequestParametersFiltersTest.kt @@ -14,7 +14,7 @@ class RequestParametersFiltersTest { ) ) - val params = RequestParameters(filterOptions = listOf(expr)) + val params = RequestParameters(filters = listOf(expr)) val map = params.toMap() assertEquals("and(status('open'),category('news'))", map["filter"]) @@ -29,7 +29,7 @@ class RequestParametersFiltersTest { ) ) - val params = RequestParameters(filterOptions = listOf(expr)) + val params = RequestParameters(filters = listOf(expr)) val map = params.toMap() assertEquals("and(is_latest(),no_start())", map["filter"]) @@ -44,7 +44,7 @@ class RequestParametersFiltersTest { ) ) - val params = RequestParameters(filterOptions = listOf(expr)) + val params = RequestParameters(filters = listOf(expr)) val map = params.toMap() assertEquals("and(status('active'),is_latest())", map["filter"]) From c50d6c6ac7eaf62924e2d63a756958b3171b3430 Mon Sep 17 00:00:00 2001 From: Jonathan Wilkinson Date: Wed, 15 Oct 2025 16:20:08 +0100 Subject: [PATCH 2/2] fix: use singular value, not a list for field filter expressions --- .../com/ctrlhub/core/router/request/FilterExpression.kt | 7 ++----- .../core/router/request/RequestParametersFiltersTest.kt | 6 +++--- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/com/ctrlhub/core/router/request/FilterExpression.kt b/src/main/kotlin/com/ctrlhub/core/router/request/FilterExpression.kt index 7269d51..a70ed0f 100644 --- a/src/main/kotlin/com/ctrlhub/core/router/request/FilterExpression.kt +++ b/src/main/kotlin/com/ctrlhub/core/router/request/FilterExpression.kt @@ -4,11 +4,8 @@ sealed interface FilterOption { fun format(): String } -class FieldFilterExpression(val field: String, val values: List) : FilterOption { - override fun format(): String { - val quoted = values.joinToString(",") { "'${it}'" } - return "${field}($quoted)" - } +class FieldFilterExpression(val field: String, val value: String) : FilterOption { + override fun format(): String = "${field}('$value')" } class ValueFilterExpression(val value: String) : FilterOption { diff --git a/src/test/kotlin/com/ctrlhub/core/router/request/RequestParametersFiltersTest.kt b/src/test/kotlin/com/ctrlhub/core/router/request/RequestParametersFiltersTest.kt index ede5163..e0b94ef 100644 --- a/src/test/kotlin/com/ctrlhub/core/router/request/RequestParametersFiltersTest.kt +++ b/src/test/kotlin/com/ctrlhub/core/router/request/RequestParametersFiltersTest.kt @@ -9,8 +9,8 @@ class RequestParametersFiltersTest { fun `and of two field expressions formats correctly`() { val expr = AndExpression( listOf( - FieldFilterExpression("status", listOf("open")), - FieldFilterExpression("category", listOf("news")) + FieldFilterExpression("status", "open"), + FieldFilterExpression("category", "news") ) ) @@ -39,7 +39,7 @@ class RequestParametersFiltersTest { fun `mixed and expression with field and function`() { val expr = AndExpression( listOf( - FieldFilterExpression("status", listOf("active")), + FieldFilterExpression("status", "active"), ValueFilterExpression("is_latest()") ) )