mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-05-31 20:42:51 +00:00
Allow to only return owning spaces
This commit is contained in:
parent
6c304b4e7a
commit
ea4ab11195
@ -9,7 +9,11 @@ import docspell.store.queries.QSpace
|
||||
|
||||
trait OSpace[F[_]] {
|
||||
|
||||
def findAll(collective: Ident, nameQuery: Option[String]): F[Vector[OSpace.SpaceItem]]
|
||||
def findAll(
|
||||
collective: Ident,
|
||||
ownerLogin: Option[Ident],
|
||||
nameQuery: Option[String]
|
||||
): F[Vector[OSpace.SpaceItem]]
|
||||
|
||||
def findById(id: Ident, collective: Ident): F[Option[OSpace.SpaceDetail]]
|
||||
|
||||
@ -55,9 +59,10 @@ object OSpace {
|
||||
Resource.pure[F, OSpace[F]](new OSpace[F] {
|
||||
def findAll(
|
||||
collective: Ident,
|
||||
ownerLogin: Option[Ident],
|
||||
nameQuery: Option[String]
|
||||
): F[Vector[SpaceItem]] =
|
||||
store.transact(QSpace.findAll(collective, None, nameQuery))
|
||||
store.transact(QSpace.findAll(collective, None, ownerLogin, nameQuery))
|
||||
|
||||
def findById(id: Ident, collective: Ident): F[Option[SpaceDetail]] =
|
||||
store.transact(QSpace.findById(id, collective))
|
||||
|
@ -811,6 +811,7 @@ paths:
|
||||
- authTokenHeader: []
|
||||
parameters:
|
||||
- $ref: "#/components/parameters/q"
|
||||
- $ref: "#/components/parameters/owning"
|
||||
responses:
|
||||
200:
|
||||
description: Ok
|
||||
@ -3983,6 +3984,13 @@ components:
|
||||
required: false
|
||||
schema:
|
||||
type: boolean
|
||||
owning:
|
||||
name: full
|
||||
in: query
|
||||
description: Whether to get owning spaces
|
||||
required: false
|
||||
schema:
|
||||
type: boolean
|
||||
checksum:
|
||||
name: checksum
|
||||
in: path
|
||||
|
@ -24,6 +24,8 @@ object QueryParam {
|
||||
|
||||
object FullOpt extends OptionalQueryParamDecoderMatcher[Boolean]("full")
|
||||
|
||||
object OwningOpt extends OptionalQueryParamDecoderMatcher[Boolean]("owning")
|
||||
|
||||
object ContactKindOpt extends OptionalQueryParamDecoderMatcher[ContactKind]("kind")
|
||||
|
||||
object QueryOpt extends OptionalQueryParamDecoderMatcher[QueryString]("q")
|
||||
|
@ -25,9 +25,11 @@ object SpaceRoutes {
|
||||
import dsl._
|
||||
|
||||
HttpRoutes.of {
|
||||
case GET -> Root :? QueryParam.QueryOpt(q) =>
|
||||
case GET -> Root :? QueryParam.QueryOpt(q) :? QueryParam.OwningOpt(owning) =>
|
||||
val login =
|
||||
owning.filter(identity).map(_ => user.account.user)
|
||||
for {
|
||||
all <- backend.space.findAll(user.account.collective, q.map(_.q))
|
||||
all <- backend.space.findAll(user.account.collective, login, q.map(_.q))
|
||||
resp <- Ok(SpaceList(all.map(mkSpace).toList))
|
||||
} yield resp
|
||||
|
||||
|
@ -149,7 +149,7 @@ object QSpace {
|
||||
).query[IdRef].to[Vector]
|
||||
|
||||
(for {
|
||||
space <- OptionT(findAll(collective, Some(id), None).map(_.headOption))
|
||||
space <- OptionT(findAll(collective, Some(id), None, None).map(_.headOption))
|
||||
memb <- OptionT.liftF(memberQ)
|
||||
} yield space.withMembers(memb.toList)).value
|
||||
}
|
||||
@ -157,9 +157,11 @@ object QSpace {
|
||||
def findAll(
|
||||
collective: Ident,
|
||||
idQ: Option[Ident],
|
||||
ownerLogin: Option[Ident],
|
||||
nameQ: Option[String]
|
||||
): ConnectionIO[Vector[SpaceItem]] = {
|
||||
val uId = RUser.Columns.uid.prefix("u")
|
||||
val uLogin = RUser.Columns.login.prefix("u")
|
||||
val sId = RSpace.Columns.id.prefix("s")
|
||||
val sOwner = RSpace.Columns.owner.prefix("s")
|
||||
val sName = RSpace.Columns.name.prefix("s")
|
||||
@ -178,7 +180,7 @@ object QSpace {
|
||||
val where =
|
||||
sColl.is(collective) :: idQ.toList.map(id => sId.is(id)) ::: nameQ.toList.map(q =>
|
||||
sName.lowerLike(s"%${q.toLowerCase}%")
|
||||
)
|
||||
) ::: ownerLogin.toList.map(login => uLogin.is(login))
|
||||
|
||||
selectSimple(cols, from, and(where) ++ orderBy(sName.asc)).query[SpaceItem].to[Vector]
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user