From a18ac17f0c31a31bc5fa0306ed74a4b583ed7b50 Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Tue, 24 Nov 2020 21:29:51 +0100 Subject: [PATCH] Search with wildcards for custom fields --- .../docspell/backend/ops/OCustomFields.scala | 4 +++- .../docspell/backend/ops/WildcardString.scala | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 modules/backend/src/main/scala/docspell/backend/ops/WildcardString.scala diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OCustomFields.scala b/modules/backend/src/main/scala/docspell/backend/ops/OCustomFields.scala index bdec0212..8d47ed0b 100644 --- a/modules/backend/src/main/scala/docspell/backend/ops/OCustomFields.scala +++ b/modules/backend/src/main/scala/docspell/backend/ops/OCustomFields.scala @@ -95,7 +95,9 @@ object OCustomFields { private[this] val logger = Logger.log4s[ConnectionIO](getLogger) def findAll(coll: Ident, nameQuery: Option[String]): F[Vector[CustomFieldData]] = - store.transact(QCustomField.findAllLike(coll, nameQuery.filter(_.nonEmpty))) + store.transact( + QCustomField.findAllLike(coll, nameQuery.map(WildcardString.apply).map(_.both)) + ) def findById(coll: Ident, field: Ident): F[Option[CustomFieldData]] = store.transact(QCustomField.findById(field, coll)) diff --git a/modules/backend/src/main/scala/docspell/backend/ops/WildcardString.scala b/modules/backend/src/main/scala/docspell/backend/ops/WildcardString.scala new file mode 100644 index 00000000..7fb0fec3 --- /dev/null +++ b/modules/backend/src/main/scala/docspell/backend/ops/WildcardString.scala @@ -0,0 +1,16 @@ +package docspell.backend.ops + +final class WildcardString private (str: String) { + + def both: String = + if (str.startsWith("\"") && str.endsWith("\"")) str.drop(1).dropRight(1) + else if (str.startsWith("*") || str.endsWith("*")) str + else s"*$str*" + +} +object WildcardString { + + def apply(in: String): WildcardString = + new WildcardString(in.trim) + +}