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

@ -7,9 +7,11 @@
package docspell.joex
import scala.concurrent.ExecutionContext
import cats.effect._
import cats.implicits._
import fs2.concurrent.SignallingRef
import docspell.analysis.TextAnalyser
import docspell.backend.ops._
import docspell.common._
@ -33,6 +35,7 @@ import docspell.joexapi.client.JoexClient
import docspell.store.Store
import docspell.store.queue._
import docspell.store.records.{REmptyTrashSetting, RJobLog}
import emil.javamail._
import org.http4s.blaze.client.BlazeClientBuilder
import org.http4s.client.Client

View File

@ -8,13 +8,15 @@ package docspell.joex.emptytrash
import cats.effect._
import cats.implicits._
import com.github.eikek.calev.CalEvent
import fs2.Stream
import docspell.backend.ops.{OItem, OItemSearch}
import docspell.common._
import docspell.joex.scheduler._
import docspell.store.records.{RItem, RPeriodicTask}
import docspell.store.usertask.UserTask
import docspell.store.usertask.{UserTask, UserTaskScope}
import com.github.eikek.calev.CalEvent
object EmptyTrashTask {
type Args = EmptyTrashArgs
@ -24,18 +26,19 @@ object EmptyTrashTask {
private val pageSize = 20
def periodicTask[F[_]: Sync](collective: Ident, ce: CalEvent): F[RPeriodicTask] = {
Ident.randomId[F].flatMap( id =>
UserTask(
id,
EmptyTrashArgs.taskName,
true,
ce,
None,
EmptyTrashArgs(collective)
).encode.toPeriodicTask(AccountId(collective, collective)))
}
def periodicTask[F[_]: Sync](collective: Ident, ce: CalEvent): F[RPeriodicTask] =
Ident
.randomId[F]
.flatMap(id =>
UserTask(
id,
EmptyTrashArgs.taskName,
true,
ce,
None,
EmptyTrashArgs(collective)
).encode.toPeriodicTask(UserTaskScope(collective))
)
def apply[F[_]: Async](
itemOps: OItem[F],

View File

@ -13,6 +13,7 @@ import docspell.common._
import docspell.joex.Config
import docspell.joex.scheduler.Task
import docspell.store.records._
import docspell.store.usertask.UserTaskScope
import com.github.eikek.calev._
@ -36,11 +37,10 @@ object HouseKeepingTask {
RPeriodicTask
.createJson(
true,
UserTaskScope(DocspellSystem.taskGroup),
taskName,
DocspellSystem.taskGroup,
(),
"Docspell house-keeping",
DocspellSystem.taskGroup,
Priority.Low,
ce,
None