Refactor user tasks to support collective and user scopes

Before, there were periodic tasks run per collective and not user by
making sure that submitter + group are the same value. This is now
encoded in `UserTaskScope` so it is now obvious and errors can be
reduced when using this.
This commit is contained in:
eikek
2021-08-14 21:10:09 +02:00
parent 548dfb9a57
commit 31d885ed79
14 changed files with 177 additions and 114 deletions

View File

@ -8,6 +8,7 @@ package docspell.restserver.routes
import cats.effect._
import cats.implicits._
import docspell.backend.BackendApp
import docspell.backend.auth.AuthToken
import docspell.backend.ops.OCollective
@ -15,6 +16,7 @@ import docspell.common.{EmptyTrashArgs, ListType}
import docspell.restapi.model._
import docspell.restserver.conv.Conversions
import docspell.restserver.http4s._
import com.github.eikek.calev.CalEvent
import org.http4s.HttpRoutes
import org.http4s.circe.CirceEntityDecoder._

View File

@ -38,7 +38,7 @@ object NotifyDueItemsRoutes {
HttpRoutes.of {
case GET -> Root / Ident(id) =>
(for {
task <- ut.findNotifyDueItems(id, user.account)
task <- ut.findNotifyDueItems(id, UserTaskScope(user.account))
res <- OptionT.liftF(taskToSettings(user.account, backend, task))
resp <- OptionT.liftF(Ok(res))
} yield resp).getOrElseF(NotFound())
@ -49,7 +49,7 @@ object NotifyDueItemsRoutes {
newId <- Ident.randomId[F]
task <- makeTask(newId, getBaseUrl(cfg, req), user.account, data)
res <-
ut.executeNow(user.account, task)
ut.executeNow(UserTaskScope(user.account), task)
.attempt
.map(Conversions.basicResult(_, "Submitted successfully."))
resp <- Ok(res)
@ -58,7 +58,7 @@ object NotifyDueItemsRoutes {
case DELETE -> Root / Ident(id) =>
for {
res <-
ut.deleteTask(user.account, id)
ut.deleteTask(UserTaskScope(user.account), id)
.attempt
.map(Conversions.basicResult(_, "Deleted successfully"))
resp <- Ok(res)
@ -69,7 +69,7 @@ object NotifyDueItemsRoutes {
for {
task <- makeTask(data.id, getBaseUrl(cfg, req), user.account, data)
res <-
ut.submitNotifyDueItems(user.account, task)
ut.submitNotifyDueItems(UserTaskScope(user.account), task)
.attempt
.map(Conversions.basicResult(_, "Saved successfully"))
resp <- Ok(res)
@ -87,14 +87,14 @@ object NotifyDueItemsRoutes {
newId <- Ident.randomId[F]
task <- makeTask(newId, getBaseUrl(cfg, req), user.account, data)
res <-
ut.submitNotifyDueItems(user.account, task)
ut.submitNotifyDueItems(UserTaskScope(user.account), task)
.attempt
.map(Conversions.basicResult(_, "Saved successfully."))
resp <- Ok(res)
} yield resp
case GET -> Root =>
ut.getNotifyDueItems(user.account)
ut.getNotifyDueItems(UserTaskScope(user.account))
.evalMap(task => taskToSettings(user.account, backend, task))
.compile
.toVector

View File

@ -35,7 +35,7 @@ object ScanMailboxRoutes {
HttpRoutes.of {
case GET -> Root / Ident(id) =>
(for {
task <- ut.findScanMailbox(id, user.account)
task <- ut.findScanMailbox(id, UserTaskScope(user.account))
res <- OptionT.liftF(taskToSettings(user.account, backend, task))
resp <- OptionT.liftF(Ok(res))
} yield resp).getOrElseF(NotFound())
@ -46,7 +46,7 @@ object ScanMailboxRoutes {
newId <- Ident.randomId[F]
task <- makeTask(newId, user.account, data)
res <-
ut.executeNow(user.account, task)
ut.executeNow(UserTaskScope(user.account), task)
.attempt
.map(Conversions.basicResult(_, "Submitted successfully."))
resp <- Ok(res)
@ -55,7 +55,7 @@ object ScanMailboxRoutes {
case DELETE -> Root / Ident(id) =>
for {
res <-
ut.deleteTask(user.account, id)
ut.deleteTask(UserTaskScope(user.account), id)
.attempt
.map(Conversions.basicResult(_, "Deleted successfully."))
resp <- Ok(res)
@ -66,7 +66,7 @@ object ScanMailboxRoutes {
for {
task <- makeTask(data.id, user.account, data)
res <-
ut.submitScanMailbox(user.account, task)
ut.submitScanMailbox(UserTaskScope(user.account), task)
.attempt
.map(Conversions.basicResult(_, "Saved successfully."))
resp <- Ok(res)
@ -84,14 +84,14 @@ object ScanMailboxRoutes {
newId <- Ident.randomId[F]
task <- makeTask(newId, user.account, data)
res <-
ut.submitScanMailbox(user.account, task)
ut.submitScanMailbox(UserTaskScope(user.account), task)
.attempt
.map(Conversions.basicResult(_, "Saved successfully."))
resp <- Ok(res)
} yield resp
case GET -> Root =>
ut.getScanMailbox(user.account)
ut.getScanMailbox(UserTaskScope(user.account))
.evalMap(task => taskToSettings(user.account, backend, task))
.compile
.toVector