diff --git a/modules/joex/src/main/scala/docspell/joex/emptytrash/EmptyTrashTask.scala b/modules/joex/src/main/scala/docspell/joex/emptytrash/EmptyTrashTask.scala index 3d50a0ca..177e961b 100644 --- a/modules/joex/src/main/scala/docspell/joex/emptytrash/EmptyTrashTask.scala +++ b/modules/joex/src/main/scala/docspell/joex/emptytrash/EmptyTrashTask.scala @@ -39,7 +39,7 @@ object EmptyTrashTask { def apply[F[_]: Async]( itemOps: OItem[F], itemSearchOps: OItemSearch[F] - ): Task[F, Args, Unit] = + ): Task[F, Args, Result] = Task { ctx => for { now <- Timestamp.current[F] @@ -49,7 +49,7 @@ object EmptyTrashTask { ) nDeleted <- deleteAll(ctx.args, maxDate, itemOps, itemSearchOps, ctx) _ <- ctx.logger.info(s"Finished deleting $nDeleted items") - } yield () + } yield Result(nDeleted) } private def deleteAll[F[_]: Async]( diff --git a/modules/joex/src/main/scala/docspell/joex/emptytrash/Result.scala b/modules/joex/src/main/scala/docspell/joex/emptytrash/Result.scala new file mode 100644 index 00000000..618d7604 --- /dev/null +++ b/modules/joex/src/main/scala/docspell/joex/emptytrash/Result.scala @@ -0,0 +1,24 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.joex.emptytrash + +import docspell.scheduler.JobTaskResultEncoder + +import io.circe.Encoder +import io.circe.generic.semiauto.deriveEncoder + +final case class Result(removed: Int) + +object Result { + implicit val jsonEncoder: Encoder[Result] = + deriveEncoder + + implicit val jobTaskResultEncoder: JobTaskResultEncoder[Result] = + JobTaskResultEncoder.fromJson[Result].withMessage { result => + s"Deleted ${result.removed} items." + } +}