Implement space operations

This commit is contained in:
Eike Kettner
2020-07-08 00:21:48 +02:00
parent 0e8c9b1819
commit 752a94a9e2
11 changed files with 358 additions and 74 deletions

View File

@ -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.")

View File

@ -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.")
}
}