mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-21 18:08:25 +00:00
Implement space operations
This commit is contained in:
@ -15,7 +15,7 @@ import docspell.common.syntax.all._
|
||||
import docspell.ftsclient.FtsResult
|
||||
import docspell.restapi.model._
|
||||
import docspell.restserver.conv.Conversions._
|
||||
import docspell.store.AddResult
|
||||
import docspell.store.{AddResult, UpdateResult}
|
||||
import docspell.store.records._
|
||||
|
||||
import bitpeace.FileMeta
|
||||
@ -537,6 +537,14 @@ trait Conversions {
|
||||
BasicResult(true, "The job has been removed from the queue.")
|
||||
}
|
||||
|
||||
def idResult(ar: AddResult, id: Ident, successMsg: String): IdResult =
|
||||
ar match {
|
||||
case AddResult.Success => IdResult(true, successMsg, id)
|
||||
case AddResult.EntityExists(msg) => IdResult(false, msg, Ident.unsafe(""))
|
||||
case AddResult.Failure(ex) =>
|
||||
IdResult(false, s"Internal error: ${ex.getMessage}", Ident.unsafe(""))
|
||||
}
|
||||
|
||||
def basicResult(ar: AddResult, successMsg: String): BasicResult =
|
||||
ar match {
|
||||
case AddResult.Success => BasicResult(true, successMsg)
|
||||
@ -545,6 +553,14 @@ trait Conversions {
|
||||
BasicResult(false, s"Internal error: ${ex.getMessage}")
|
||||
}
|
||||
|
||||
def basicResult(ar: UpdateResult, successMsg: String): BasicResult =
|
||||
ar match {
|
||||
case UpdateResult.Success => BasicResult(true, successMsg)
|
||||
case UpdateResult.NotFound => BasicResult(false, "Not found")
|
||||
case UpdateResult.Failure(ex) =>
|
||||
BasicResult(false, s"Internal error: ${ex.getMessage}")
|
||||
}
|
||||
|
||||
def basicResult(ur: OUpload.UploadResult): BasicResult =
|
||||
ur match {
|
||||
case UploadResult.Success => BasicResult(true, "Files submitted.")
|
||||
|
@ -27,16 +27,16 @@ object SpaceRoutes {
|
||||
HttpRoutes.of {
|
||||
case GET -> Root :? QueryParam.QueryOpt(q) =>
|
||||
for {
|
||||
all <- backend.space.findAll(user.account, q.map(_.q))
|
||||
all <- backend.space.findAll(user.account.collective, q.map(_.q))
|
||||
resp <- Ok(SpaceList(all.map(mkSpace).toList))
|
||||
} yield resp
|
||||
|
||||
case req @ POST -> Root =>
|
||||
for {
|
||||
data <- req.as[NewSpace]
|
||||
tag <- newSpace(data, user.account)
|
||||
res <- backend.space.add(tag)
|
||||
resp <- Ok(Conversions.basicResult(res, "Space successfully created."))
|
||||
data <- req.as[NewSpace]
|
||||
nspace <- newSpace(data, user.account)
|
||||
res <- backend.space.add(nspace, Some(user.account.user))
|
||||
resp <- Ok(Conversions.idResult(res, nspace.id, "Space successfully created."))
|
||||
} yield resp
|
||||
|
||||
case GET -> Root / Ident(id) =>
|
||||
@ -49,28 +49,25 @@ object SpaceRoutes {
|
||||
for {
|
||||
data <- req.as[NewSpace]
|
||||
res <- backend.space.changeName(id, user.account, data.name)
|
||||
resp <- Ok(Conversions.basicResult(res, "Space successfully updated."))
|
||||
resp <- Ok(mkSpaceChangeResult(res))
|
||||
} yield resp
|
||||
|
||||
case DELETE -> Root / Ident(id) =>
|
||||
for {
|
||||
del <- backend.space.delete(id, user.account.collective)
|
||||
resp <- Ok(
|
||||
if (del > 0) BasicResult(true, "Successfully deleted space")
|
||||
else BasicResult(false, "Could not delete space")
|
||||
)
|
||||
res <- backend.space.delete(id, user.account)
|
||||
resp <- Ok(mkSpaceChangeResult(res))
|
||||
} yield resp
|
||||
|
||||
case PUT -> Root / Ident(id) / "member" / Ident(userId) =>
|
||||
for {
|
||||
res <- backend.space.addMember(id, user.account, userId)
|
||||
resp <- Ok(mkMemberResult(res))
|
||||
resp <- Ok(mkSpaceChangeResult(res))
|
||||
} yield resp
|
||||
|
||||
case DELETE -> Root / Ident(id) / "member" / Ident(userId) =>
|
||||
for {
|
||||
res <- backend.space.removeMember(id, user.account, userId)
|
||||
resp <- Ok(mkMemberResult(res))
|
||||
resp <- Ok(mkSpaceChangeResult(res))
|
||||
} yield resp
|
||||
}
|
||||
}
|
||||
@ -83,8 +80,7 @@ object SpaceRoutes {
|
||||
item.id,
|
||||
item.name,
|
||||
Conversions.mkIdName(item.owner),
|
||||
item.created,
|
||||
item.members
|
||||
item.created
|
||||
)
|
||||
|
||||
private def mkSpaceDetail(item: OSpace.SpaceDetail): SpaceDetail =
|
||||
@ -96,13 +92,15 @@ object SpaceRoutes {
|
||||
item.members.map(Conversions.mkIdName)
|
||||
)
|
||||
|
||||
private def mkMemberResult(r: OSpace.MemberChangeResult): BasicResult =
|
||||
private def mkSpaceChangeResult(r: OSpace.SpaceChangeResult): BasicResult =
|
||||
r match {
|
||||
case OSpace.MemberChangeResult.Success =>
|
||||
BasicResult(true, "Successfully changed space")
|
||||
case OSpace.MemberChangeResult.NotFound =>
|
||||
BasicResult(false, "Space or user not found")
|
||||
case OSpace.MemberChangeResult.Forbidden =>
|
||||
BasicResult(false, "Not allowed to edit space")
|
||||
case OSpace.SpaceChangeResult.Success =>
|
||||
BasicResult(true, "Successfully changed space.")
|
||||
case OSpace.SpaceChangeResult.NotFound =>
|
||||
BasicResult(false, "Space or user not found.")
|
||||
case OSpace.SpaceChangeResult.Forbidden =>
|
||||
BasicResult(false, "Not allowed to edit space.")
|
||||
case OSpace.SpaceChangeResult.Exists =>
|
||||
BasicResult(false, "The member already exists.")
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user