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