Changed SQL and expanded to multi key search/filter

This commit is contained in:
Brage Skjønborg 2026-01-29 07:28:14 +01:00
parent 1ca711a3e2
commit 76fa917104
5 changed files with 25 additions and 13 deletions

View File

@ -13,12 +13,12 @@ data class EventQuery(
override val order: Sort = Sort.DESC, override val order: Sort = Sort.DESC,
override val page: Int = 0, override val page: Int = 0,
override val pageSize: Int = 50, override val pageSize: Int = 50,
override val key: String? override val key: List<String>?
) : PagedQuery { ) : PagedQuery {
fun toQueryParams(): MultiValueMap<String, String> { fun toQueryParams(): MultiValueMap<String, String> {
val params = LinkedMultiValueMap<String, String>() val params = LinkedMultiValueMap<String, String>()
key?.let { params.add("key", it) } key?.forEach { params.add("key", it) }
referenceId?.let { params.add("referenceId", it) } referenceId?.let { params.add("referenceId", it) }
eventId?.let { params.add("eventId", it) } eventId?.let { params.add("eventId", it) }
from?.let { params.add("from", it.toString()) } from?.let { params.add("from", it.toString()) }

View File

@ -5,5 +5,5 @@ interface PagedQuery {
val pageSize: Int val pageSize: Int
val sort: String val sort: String
val order: Sort val order: Sort
val key: String? val key: List<String>?
} }

View File

@ -15,12 +15,12 @@ data class TaskQuery(
override val order: Sort = Sort.DESC, override val order: Sort = Sort.DESC,
override val page: Int = 0, override val page: Int = 0,
override val pageSize: Int = 50, override val pageSize: Int = 50,
override val key: String? = null override val key: List<String>? = null
): PagedQuery { ): PagedQuery {
fun toQueryParams(): MultiValueMap<String, String> { fun toQueryParams(): MultiValueMap<String, String> {
val params = LinkedMultiValueMap<String, String>() val params = LinkedMultiValueMap<String, String>()
key?.let { params.add("key", it) } key?.forEach { params.add("key", it) }
status?.forEach { params.add("status", it) } status?.forEach { params.add("status", it) }
claimed?.let { params.add("claimed", it.toString()) } claimed?.let { params.add("claimed", it.toString()) }
consumed?.let { params.add("consumed", it.toString()) } consumed?.let { params.add("consumed", it.toString()) }

View File

@ -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.queries.pagedQuery
import no.iktdev.mediaprocessing.shared.database.tables.EventsTable import no.iktdev.mediaprocessing.shared.database.tables.EventsTable
import no.iktdev.mediaprocessing.shared.database.withTransaction import no.iktdev.mediaprocessing.shared.database.withTransaction
import org.jetbrains.exposed.sql.Op
import org.jetbrains.exposed.sql.insert import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.or
import org.jetbrains.exposed.sql.selectAll import org.jetbrains.exposed.sql.selectAll
import java.time.Instant import java.time.Instant
import java.util.* import java.util.*
@ -37,8 +39,14 @@ object EventStore: EventStore {
where { EventsTable.eventId like "%$id%" } where { EventsTable.eventId like "%$id%" }
} }
query.key?.let { ev -> query.key?.let { keys ->
where { EventsTable.event like "%$ev%" } if (keys.isNotEmpty()) {
where {
keys
.map { key -> EventsTable.event like "%$key%" }
.reduce(Op<Boolean>::or)
}
}
} }
query.from?.let { from -> query.from?.let { from ->

View File

@ -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.queries.pagedQuery
import no.iktdev.mediaprocessing.shared.database.tables.TasksTable import no.iktdev.mediaprocessing.shared.database.tables.TasksTable
import no.iktdev.mediaprocessing.shared.database.withTransaction import no.iktdev.mediaprocessing.shared.database.withTransaction
import org.jetbrains.exposed.sql.and import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.update
import java.time.Duration import java.time.Duration
import java.util.* import java.util.*
@ -36,9 +33,16 @@ object TaskStore: TaskStore {
val enums = statuses.map { TaskStatus.valueOf(it) } val enums = statuses.map { TaskStatus.valueOf(it) }
where { TasksTable.status inList enums } where { TasksTable.status inList enums }
} }
query.key?.let { k -> query.key?.let { keys ->
where { TasksTable.task like "%$k%" } if (keys.isNotEmpty()) {
where {
keys
.map { key -> TasksTable.task like "%$key%" }
.reduce(Op<Boolean>::or)
} }
}
}
query.claimed?.let { where { TasksTable.claimed eq it } } query.claimed?.let { where { TasksTable.claimed eq it } }
query.consumed?.let { where { TasksTable.consumed eq it } } query.consumed?.let { where { TasksTable.consumed eq it } }
query.referenceId?.let { where { TasksTable.referenceId like "%$it%" } } query.referenceId?.let { where { TasksTable.referenceId like "%$it%" } }