From 76fa9171048cbd937fe20859985e9d85f9d1377f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brage=20Skj=C3=B8nborg?= Date: Thu, 29 Jan 2026 07:28:14 +0100 Subject: [PATCH] Changed SQL and expanded to multi key search/filter --- .../shared/common/dto/EventQuery.kt | 4 ++-- .../shared/common/dto/PagedQuery.kt | 2 +- .../shared/common/dto/TaskQuery.kt | 4 ++-- .../shared/database/stores/EventStore.kt | 12 ++++++++++-- .../shared/database/stores/TaskStore.kt | 16 ++++++++++------ 5 files changed, 25 insertions(+), 13 deletions(-) diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/dto/EventQuery.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/dto/EventQuery.kt index cce797ae..3d5a751f 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/dto/EventQuery.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/dto/EventQuery.kt @@ -13,12 +13,12 @@ data class EventQuery( override val order: Sort = Sort.DESC, override val page: Int = 0, override val pageSize: Int = 50, - override val key: String? + override val key: List? ) : PagedQuery { fun toQueryParams(): MultiValueMap { val params = LinkedMultiValueMap() - key?.let { params.add("key", it) } + key?.forEach { params.add("key", it) } referenceId?.let { params.add("referenceId", it) } eventId?.let { params.add("eventId", it) } from?.let { params.add("from", it.toString()) } diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/dto/PagedQuery.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/dto/PagedQuery.kt index 037f3ca2..6a7131c3 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/dto/PagedQuery.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/dto/PagedQuery.kt @@ -5,5 +5,5 @@ interface PagedQuery { val pageSize: Int val sort: String val order: Sort - val key: String? + val key: List? } diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/dto/TaskQuery.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/dto/TaskQuery.kt index 51dce0e1..7fda53e0 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/dto/TaskQuery.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/dto/TaskQuery.kt @@ -15,12 +15,12 @@ data class TaskQuery( override val order: Sort = Sort.DESC, override val page: Int = 0, override val pageSize: Int = 50, - override val key: String? = null + override val key: List? = null ): PagedQuery { fun toQueryParams(): MultiValueMap { val params = LinkedMultiValueMap() - key?.let { params.add("key", it) } + key?.forEach { params.add("key", it) } status?.forEach { params.add("status", it) } claimed?.let { params.add("claimed", it.toString()) } consumed?.let { params.add("consumed", it.toString()) } diff --git a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/EventStore.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/EventStore.kt index 416e05b3..9e77e6a0 100644 --- a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/EventStore.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/EventStore.kt @@ -10,7 +10,9 @@ import no.iktdev.mediaprocessing.shared.common.dto.Paginated import no.iktdev.mediaprocessing.shared.database.queries.pagedQuery import no.iktdev.mediaprocessing.shared.database.tables.EventsTable import no.iktdev.mediaprocessing.shared.database.withTransaction +import org.jetbrains.exposed.sql.Op import org.jetbrains.exposed.sql.insert +import org.jetbrains.exposed.sql.or import org.jetbrains.exposed.sql.selectAll import java.time.Instant import java.util.* @@ -37,8 +39,14 @@ object EventStore: EventStore { where { EventsTable.eventId like "%$id%" } } - query.key?.let { ev -> - where { EventsTable.event like "%$ev%" } + query.key?.let { keys -> + if (keys.isNotEmpty()) { + where { + keys + .map { key -> EventsTable.event like "%$key%" } + .reduce(Op::or) + } + } } query.from?.let { from -> diff --git a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/TaskStore.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/TaskStore.kt index 1bf06af8..7623d734 100644 --- a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/TaskStore.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/TaskStore.kt @@ -11,10 +11,7 @@ import no.iktdev.mediaprocessing.shared.common.dto.TaskQuery import no.iktdev.mediaprocessing.shared.database.queries.pagedQuery import no.iktdev.mediaprocessing.shared.database.tables.TasksTable import no.iktdev.mediaprocessing.shared.database.withTransaction -import org.jetbrains.exposed.sql.and -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.selectAll -import org.jetbrains.exposed.sql.update +import org.jetbrains.exposed.sql.* import java.time.Duration import java.util.* @@ -36,9 +33,16 @@ object TaskStore: TaskStore { val enums = statuses.map { TaskStatus.valueOf(it) } where { TasksTable.status inList enums } } - query.key?.let { k -> - where { TasksTable.task like "%$k%" } + query.key?.let { keys -> + if (keys.isNotEmpty()) { + where { + keys + .map { key -> TasksTable.task like "%$key%" } + .reduce(Op::or) + } + } } + query.claimed?.let { where { TasksTable.claimed eq it } } query.consumed?.let { where { TasksTable.consumed eq it } } query.referenceId?.let { where { TasksTable.referenceId like "%$it%" } }