Use a minimum age of items to remove

In order to keep deleted items for a while, the periodic task can now
use a duration to only remove items with a certain age. This can be
used to ensure that a deleted item stays at least X days before it
will be removed from the database.

Refs: #347
This commit is contained in:
eikek
2021-08-15 12:28:42 +02:00
parent d136bb8166
commit f4a2b86ea8
27 changed files with 303 additions and 124 deletions

View File

@ -12,7 +12,8 @@ import cats.implicits._
import docspell.backend.BackendApp
import docspell.backend.auth.AuthToken
import docspell.backend.ops.OCollective
import docspell.common.{EmptyTrashArgs, ListType}
import docspell.common.EmptyTrashArgs
import docspell.common.ListType
import docspell.restapi.model._
import docspell.restserver.conv.Conversions
import docspell.restserver.http4s._
@ -56,7 +57,12 @@ object CollectiveRoutes {
settings.classifier.listType
)
),
Some(settings.emptyTrashSchedule)
Some(
OCollective.EmptyTrash(
settings.emptyTrash.schedule,
settings.emptyTrash.minAge
)
)
)
res <-
backend.collective
@ -67,11 +73,11 @@ object CollectiveRoutes {
case GET -> Root / "settings" =>
for {
settDb <- backend.collective.findSettings(user.account.collective)
trash = settDb.flatMap(_.emptyTrash).getOrElse(OCollective.EmptyTrash.default)
sett = settDb.map(c =>
CollectiveSettings(
c.language,
c.integrationEnabled,
c.emptyTrash.getOrElse(EmptyTrashArgs.defaultSchedule),
ClassifierSetting(
c.classifier.map(_.itemCount).getOrElse(0),
c.classifier
@ -79,6 +85,10 @@ object CollectiveRoutes {
.getOrElse(CalEvent.unsafe("*-1/3-01 01:00:00")),
c.classifier.map(_.categories).getOrElse(Nil),
c.classifier.map(_.listType).getOrElse(ListType.whitelist)
),
EmptyTrashSetting(
trash.schedule,
trash.minAge
)
)
)
@ -103,9 +113,12 @@ object CollectiveRoutes {
resp <- Ok(BasicResult(true, "Task submitted"))
} yield resp
case POST -> Root / "emptytrash" / "startonce" =>
case req @ POST -> Root / "emptytrash" / "startonce" =>
for {
_ <- backend.collective.startEmptyTrash(user.account.collective)
data <- req.as[EmptyTrashSetting]
_ <- backend.collective.startEmptyTrash(
EmptyTrashArgs(user.account.collective, data.minAge)
)
resp <- Ok(BasicResult(true, "Task submitted"))
} yield resp

View File

@ -49,7 +49,7 @@ object NotifyDueItemsRoutes {
newId <- Ident.randomId[F]
task <- makeTask(newId, getBaseUrl(cfg, req), user.account, data)
res <-
ut.executeNow(UserTaskScope(user.account), task)
ut.executeNow(UserTaskScope(user.account), None, task)
.attempt
.map(Conversions.basicResult(_, "Submitted successfully."))
resp <- Ok(res)
@ -69,7 +69,7 @@ object NotifyDueItemsRoutes {
for {
task <- makeTask(data.id, getBaseUrl(cfg, req), user.account, data)
res <-
ut.submitNotifyDueItems(UserTaskScope(user.account), task)
ut.submitNotifyDueItems(UserTaskScope(user.account), None, task)
.attempt
.map(Conversions.basicResult(_, "Saved successfully"))
resp <- Ok(res)
@ -87,7 +87,7 @@ object NotifyDueItemsRoutes {
newId <- Ident.randomId[F]
task <- makeTask(newId, getBaseUrl(cfg, req), user.account, data)
res <-
ut.submitNotifyDueItems(UserTaskScope(user.account), task)
ut.submitNotifyDueItems(UserTaskScope(user.account), None, task)
.attempt
.map(Conversions.basicResult(_, "Saved successfully."))
resp <- Ok(res)

View File

@ -46,7 +46,7 @@ object ScanMailboxRoutes {
newId <- Ident.randomId[F]
task <- makeTask(newId, user.account, data)
res <-
ut.executeNow(UserTaskScope(user.account), task)
ut.executeNow(UserTaskScope(user.account), None, task)
.attempt
.map(Conversions.basicResult(_, "Submitted successfully."))
resp <- Ok(res)
@ -66,7 +66,7 @@ object ScanMailboxRoutes {
for {
task <- makeTask(data.id, user.account, data)
res <-
ut.submitScanMailbox(UserTaskScope(user.account), task)
ut.submitScanMailbox(UserTaskScope(user.account), None, task)
.attempt
.map(Conversions.basicResult(_, "Saved successfully."))
resp <- Ok(res)
@ -84,7 +84,7 @@ object ScanMailboxRoutes {
newId <- Ident.randomId[F]
task <- makeTask(newId, user.account, data)
res <-
ut.submitScanMailbox(UserTaskScope(user.account), task)
ut.submitScanMailbox(UserTaskScope(user.account), None, task)
.attempt
.map(Conversions.basicResult(_, "Saved successfully."))
resp <- Ok(res)