diff --git a/modules/restserver/src/main/scala/docspell/restserver/http4s/QueryParam.scala b/modules/restserver/src/main/scala/docspell/restserver/http4s/QueryParam.scala index 5b7c180d..4e8198ea 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/http4s/QueryParam.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/http4s/QueryParam.scala @@ -17,6 +17,12 @@ object QueryParam { QueryParamDecoder[String].map(s => QueryString(s.trim.toLowerCase)) + // implicit val booleanDecoder: QueryParamDecoder[Boolean] = + // QueryParamDecoder.fromUnsafeCast(qp => Option(qp.value).exists(_.equalsIgnoreCase("true")))( + // "Boolean" + // ) + + object FullOpt extends OptionalQueryParamDecoderMatcher[Boolean]("full") object ContactKindOpt extends OptionalQueryParamDecoderMatcher[ContactKind]("kind") diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/EquipmentRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/EquipmentRoutes.scala index eec9431f..9404b10a 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/EquipmentRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/EquipmentRoutes.scala @@ -2,15 +2,17 @@ package docspell.restserver.routes import cats.effect._ import cats.implicits._ +import org.http4s.HttpRoutes +import org.http4s.circe.CirceEntityDecoder._ +import org.http4s.circe.CirceEntityEncoder._ +import org.http4s.dsl.Http4sDsl + import docspell.backend.BackendApp import docspell.backend.auth.AuthToken import docspell.common.Ident import docspell.restapi.model._ import docspell.restserver.conv.Conversions._ -import org.http4s.HttpRoutes -import org.http4s.circe.CirceEntityDecoder._ -import org.http4s.circe.CirceEntityEncoder._ -import org.http4s.dsl.Http4sDsl +import docspell.restserver.http4s.QueryParam object EquipmentRoutes { @@ -19,10 +21,9 @@ object EquipmentRoutes { import dsl._ HttpRoutes.of { - case req @ GET -> Root => - val q = req.params.get("q").map(_.trim).filter(_.nonEmpty) + case GET -> Root :? QueryParam.QueryOpt(q) => for { - data <- backend.equipment.findAll(user.account, q) + data <- backend.equipment.findAll(user.account, q.map(_.q)) resp <- Ok(EquipmentList(data.map(mkEquipment).toList)) } yield resp diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/MailSettingsRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/MailSettingsRoutes.scala index ffb26b49..3586e9f0 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/MailSettingsRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/MailSettingsRoutes.scala @@ -17,6 +17,7 @@ import docspell.restapi.model._ import docspell.store.records.RUserEmail import docspell.store.EmilUtil import docspell.restserver.conv.Conversions +import docspell.restserver.http4s.QueryParam object MailSettingsRoutes { @@ -25,10 +26,9 @@ object MailSettingsRoutes { import dsl._ HttpRoutes.of { - case req @ GET -> Root => - val q = req.params.get("q").map(_.trim).filter(_.nonEmpty) + case GET -> Root :? QueryParam.QueryOpt(q) => for { - list <- backend.mail.getSettings(user.account, q) + list <- backend.mail.getSettings(user.account, q.map(_.q)) res = list.map(convert) resp <- Ok(EmailSettingsList(res.toList)) } yield resp diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/OrganizationRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/OrganizationRoutes.scala index 1ce3a882..98362f7d 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/OrganizationRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/OrganizationRoutes.scala @@ -7,7 +7,7 @@ import docspell.backend.auth.AuthToken import docspell.common.Ident import docspell.restapi.model._ import docspell.restserver.conv.Conversions._ -import docspell.restserver.routes.ParamDecoder._ +import docspell.restserver.http4s.QueryParam import org.http4s.HttpRoutes import org.http4s.circe.CirceEntityDecoder._ import org.http4s.circe.CirceEntityEncoder._ @@ -20,16 +20,15 @@ object OrganizationRoutes { import dsl._ HttpRoutes.of { - case req @ GET -> Root :? FullQueryParamMatcher(full) => - val q = req.params.get("q").map(_.trim).filter(_.nonEmpty) + case GET -> Root :? QueryParam.FullOpt(full) +& QueryParam.QueryOpt(q) => if (full.getOrElse(false)) { for { - data <- backend.organization.findAllOrg(user.account, q) + data <- backend.organization.findAllOrg(user.account, q.map(_.q)) resp <- Ok(OrganizationList(data.map(mkOrg).toList)) } yield resp } else { for { - data <- backend.organization.findAllOrgRefs(user.account, q) + data <- backend.organization.findAllOrgRefs(user.account, q.map(_.q)) resp <- Ok(ReferenceList(data.map(mkIdName).toList)) } yield resp } diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ParamDecoder.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ParamDecoder.scala deleted file mode 100644 index 3fe1aac7..00000000 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ParamDecoder.scala +++ /dev/null @@ -1,15 +0,0 @@ -package docspell.restserver.routes - -import org.http4s.QueryParamDecoder -import org.http4s.dsl.impl.OptionalQueryParamDecoderMatcher - -object ParamDecoder { - - implicit val booleanDecoder: QueryParamDecoder[Boolean] = - QueryParamDecoder.fromUnsafeCast(qp => Option(qp.value).exists(_.equalsIgnoreCase("true")))( - "Boolean" - ) - - object FullQueryParamMatcher extends OptionalQueryParamDecoderMatcher[Boolean]("full") - -} diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/PersonRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/PersonRoutes.scala index 71d1926f..d0c438ae 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/PersonRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/PersonRoutes.scala @@ -8,7 +8,7 @@ import docspell.common.Ident import docspell.common.syntax.all._ import docspell.restapi.model._ import docspell.restserver.conv.Conversions._ -import docspell.restserver.routes.ParamDecoder._ +import docspell.restserver.http4s.QueryParam import org.http4s.HttpRoutes import org.http4s.circe.CirceEntityDecoder._ import org.http4s.circe.CirceEntityEncoder._ @@ -23,16 +23,15 @@ object PersonRoutes { import dsl._ HttpRoutes.of { - case req @ GET -> Root :? FullQueryParamMatcher(full) => - val q = req.params.get("q").map(_.trim).filter(_.nonEmpty) + case GET -> Root :? QueryParam.FullOpt(full) +& QueryParam.QueryOpt(q) => if (full.getOrElse(false)) { for { - data <- backend.organization.findAllPerson(user.account, q) + data <- backend.organization.findAllPerson(user.account, q.map(_.q)) resp <- Ok(PersonList(data.map(mkPerson).toList)) } yield resp } else { for { - data <- backend.organization.findAllPersonRefs(user.account, q) + data <- backend.organization.findAllPersonRefs(user.account, q.map(_.q)) resp <- Ok(ReferenceList(data.map(mkIdName).toList)) } yield resp } diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/TagRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/TagRoutes.scala index 5a9fdd8e..0980b579 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/TagRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/TagRoutes.scala @@ -7,7 +7,7 @@ import docspell.backend.auth.AuthToken import docspell.common.Ident import docspell.restapi.model._ import docspell.restserver.conv.Conversions._ -import docspell.restserver.http4s.ResponseGenerator +import docspell.restserver.http4s._ import org.http4s.HttpRoutes import org.http4s.circe.CirceEntityDecoder._ import org.http4s.circe.CirceEntityEncoder._ @@ -20,10 +20,9 @@ object TagRoutes { import dsl._ HttpRoutes.of { - case req @ GET -> Root => - val q = req.params.get("q").map(_.trim).filter(_.nonEmpty) + case GET -> Root :? QueryParam.QueryOpt(q) => for { - all <- backend.tag.findAll(user.account, q) + all <- backend.tag.findAll(user.account, q.map(_.q)) resp <- Ok(TagList(all.size, all.map(mkTag).toList)) } yield resp