mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Allow to start a user task once
This commit is contained in:
@ -33,13 +33,13 @@ object QUserTask {
|
||||
|
||||
def insert(account: AccountId, task: UserTask[String]): ConnectionIO[Int] =
|
||||
for {
|
||||
r <- makePeriodicTask(account, task)
|
||||
r <- task.toPeriodicTask[ConnectionIO](account)
|
||||
n <- RPeriodicTask.insert(r)
|
||||
} yield n
|
||||
|
||||
def update(account: AccountId, task: UserTask[String]): ConnectionIO[Int] =
|
||||
for {
|
||||
r <- makePeriodicTask(account, task)
|
||||
r <- task.toPeriodicTask[ConnectionIO](account)
|
||||
n <- RPeriodicTask.update(r)
|
||||
} yield n
|
||||
|
||||
@ -69,21 +69,4 @@ object QUserTask {
|
||||
def makeUserTask(r: RPeriodicTask): UserTask[String] =
|
||||
UserTask(r.id, r.task, r.enabled, r.timer, r.args)
|
||||
|
||||
def makePeriodicTask(
|
||||
account: AccountId,
|
||||
t: UserTask[String]
|
||||
): ConnectionIO[RPeriodicTask] =
|
||||
RPeriodicTask
|
||||
.create[ConnectionIO](
|
||||
t.enabled,
|
||||
t.name,
|
||||
account.collective,
|
||||
t.args,
|
||||
s"${account.user.id}: ${t.name.id}",
|
||||
account.user,
|
||||
Priority.Low,
|
||||
t.timer
|
||||
)
|
||||
.map(r => r.copy(id = t.id))
|
||||
|
||||
}
|
||||
|
@ -36,6 +36,8 @@ trait PeriodicTaskStore[F[_]] {
|
||||
*/
|
||||
def add(task: RPeriodicTask): F[AddResult]
|
||||
|
||||
/** Find all joex nodes as registered in the database.
|
||||
*/
|
||||
def findJoexNodes: F[Vector[RNode]]
|
||||
}
|
||||
|
||||
|
@ -1,33 +1,53 @@
|
||||
package docspell.store.usertask
|
||||
|
||||
import cats.effect._
|
||||
import cats.implicits._
|
||||
import com.github.eikek.calev.CalEvent
|
||||
import io.circe.Decoder
|
||||
import io.circe.Encoder
|
||||
|
||||
import docspell.common._
|
||||
import docspell.common.syntax.all._
|
||||
import docspell.store.records.RPeriodicTask
|
||||
|
||||
case class UserTask[A](
|
||||
id: Ident,
|
||||
name: Ident,
|
||||
enabled: Boolean,
|
||||
timer: CalEvent,
|
||||
args: A
|
||||
id: Ident,
|
||||
name: Ident,
|
||||
enabled: Boolean,
|
||||
timer: CalEvent,
|
||||
args: A
|
||||
) {
|
||||
|
||||
def encode(implicit E: Encoder[A]): UserTask[String] =
|
||||
copy(args = E(args).noSpaces)
|
||||
|
||||
}
|
||||
|
||||
object UserTask {
|
||||
|
||||
|
||||
implicit final class UserTaskCodec(ut: UserTask[String]) {
|
||||
|
||||
def decode[A](implicit D: Decoder[A]): Either[String, UserTask[A]] =
|
||||
ut.args.parseJsonAs[A]
|
||||
.left.map(_.getMessage)
|
||||
ut.args
|
||||
.parseJsonAs[A]
|
||||
.left
|
||||
.map(_.getMessage)
|
||||
.map(a => ut.copy(args = a))
|
||||
|
||||
def toPeriodicTask[F[_]: Sync](
|
||||
account: AccountId
|
||||
): F[RPeriodicTask] =
|
||||
RPeriodicTask
|
||||
.create[F](
|
||||
ut.enabled,
|
||||
ut.name,
|
||||
account.collective,
|
||||
ut.args,
|
||||
s"${account.user.id}: ${ut.name.id}",
|
||||
account.user,
|
||||
Priority.Low,
|
||||
ut.timer
|
||||
)
|
||||
.map(r => r.copy(id = ut.id))
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user