mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Use an enum instead of a boolean to differentiate search
It's not very likely to have more modes of search besides normal and trashed, but got surprised in that way quite often and it's nicer this way anyways.
This commit is contained in:
@ -7,6 +7,7 @@
|
||||
package docspell.restserver.http4s
|
||||
|
||||
import docspell.common.ContactKind
|
||||
import docspell.common.SearchMode
|
||||
|
||||
import org.http4s.ParseFailure
|
||||
import org.http4s.QueryParamDecoder
|
||||
@ -23,6 +24,11 @@ object QueryParam {
|
||||
implicit val queryStringDecoder: QueryParamDecoder[QueryString] =
|
||||
QueryParamDecoder[String].map(s => QueryString(s.trim.toLowerCase))
|
||||
|
||||
implicit val searchModeDecoder: QueryParamDecoder[SearchMode] =
|
||||
QueryParamDecoder[String].emap(str =>
|
||||
SearchMode.fromString(str).left.map(s => ParseFailure(str, s))
|
||||
)
|
||||
|
||||
object FullOpt extends OptionalQueryParamDecoderMatcher[Boolean]("full")
|
||||
|
||||
object OwningOpt extends OptionalQueryParamDecoderMatcher[Boolean]("owning")
|
||||
@ -35,7 +41,7 @@ object QueryParam {
|
||||
object Limit extends OptionalQueryParamDecoderMatcher[Int]("limit")
|
||||
object Offset extends OptionalQueryParamDecoderMatcher[Int]("offset")
|
||||
object WithDetails extends OptionalQueryParamDecoderMatcher[Boolean]("withDetails")
|
||||
object Deleted extends OptionalQueryParamDecoderMatcher[Boolean]("deleted")
|
||||
object SearchKind extends OptionalQueryParamDecoderMatcher[SearchMode]("searchMode")
|
||||
|
||||
object WithFallback extends OptionalQueryParamDecoderMatcher[Boolean]("withFallback")
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ object ItemRoutes {
|
||||
HttpRoutes.of {
|
||||
case GET -> Root / "search" :? QP.Query(q) :? QP.Limit(limit) :? QP.Offset(
|
||||
offset
|
||||
) :? QP.WithDetails(detailFlag) :? QP.Deleted(deletedFlag) =>
|
||||
) :? QP.WithDetails(detailFlag) :? QP.SearchKind(searchMode) =>
|
||||
val batch = Batch(offset.getOrElse(0), limit.getOrElse(cfg.maxItemPageSize))
|
||||
.restrictLimitTo(cfg.maxItemPageSize)
|
||||
val itemQuery = ItemQueryString(q)
|
||||
@ -58,17 +58,17 @@ object ItemRoutes {
|
||||
cfg.fullTextSearch.enabled,
|
||||
detailFlag.getOrElse(false),
|
||||
cfg.maxNoteLength,
|
||||
deletedFlag.getOrElse(false)
|
||||
searchMode.getOrElse(SearchMode.Normal)
|
||||
)
|
||||
val fixQuery = Query.Fix(user.account, None, None)
|
||||
searchItems(backend, dsl)(settings, fixQuery, itemQuery)
|
||||
|
||||
case GET -> Root / "searchStats" :? QP.Query(q) :? QP.Deleted(deletedFlag) =>
|
||||
case GET -> Root / "searchStats" :? QP.Query(q) :? QP.SearchKind(searchMode) =>
|
||||
val itemQuery = ItemQueryString(q)
|
||||
val fixQuery = Query.Fix(user.account, None, None)
|
||||
val settings = OSimpleSearch.StatsSettings(
|
||||
useFTS = cfg.fullTextSearch.enabled,
|
||||
deleted = deletedFlag.getOrElse(false)
|
||||
searchMode = searchMode.getOrElse(SearchMode.Normal)
|
||||
)
|
||||
searchItemStats(backend, dsl)(settings, fixQuery, itemQuery)
|
||||
|
||||
@ -87,7 +87,7 @@ object ItemRoutes {
|
||||
cfg.fullTextSearch.enabled,
|
||||
userQuery.withDetails.getOrElse(false),
|
||||
cfg.maxNoteLength,
|
||||
deleted = userQuery.deleted.getOrElse(false)
|
||||
searchMode = userQuery.searchMode.getOrElse(SearchMode.Normal)
|
||||
)
|
||||
fixQuery = Query.Fix(user.account, None, None)
|
||||
resp <- searchItems(backend, dsl)(settings, fixQuery, itemQuery)
|
||||
@ -100,7 +100,7 @@ object ItemRoutes {
|
||||
fixQuery = Query.Fix(user.account, None, None)
|
||||
settings = OSimpleSearch.StatsSettings(
|
||||
useFTS = cfg.fullTextSearch.enabled,
|
||||
deleted = userQuery.deleted.getOrElse(false)
|
||||
searchMode = userQuery.searchMode.getOrElse(SearchMode.Normal)
|
||||
)
|
||||
resp <- searchItemStats(backend, dsl)(settings, fixQuery, itemQuery)
|
||||
} yield resp
|
||||
|
Reference in New Issue
Block a user