Server-side stub impl for notify-due-items

This commit is contained in:
Eike Kettner
2020-04-19 20:31:28 +02:00
parent e97e0db45c
commit ad772c0c25
16 changed files with 562 additions and 37 deletions

View File

@ -7,6 +7,7 @@ import docspell.backend.signup.OSignup
import docspell.store.Store
import docspell.store.ops.ONode
import docspell.store.queue.JobQueue
import docspell.store.usertask.UserTaskStore
import scala.concurrent.ExecutionContext
import emil.javamail.JavaMailEmil
@ -26,6 +27,7 @@ trait BackendApp[F[_]] {
def item: OItem[F]
def mail: OMail[F]
def joex: OJoex[F]
def userTask: OUserTask[F]
}
object BackendApp {
@ -37,20 +39,22 @@ object BackendApp {
blocker: Blocker
): Resource[F, BackendApp[F]] =
for {
queue <- JobQueue(store)
loginImpl <- Login[F](store)
signupImpl <- OSignup[F](store)
collImpl <- OCollective[F](store)
sourceImpl <- OSource[F](store)
tagImpl <- OTag[F](store)
equipImpl <- OEquipment[F](store)
orgImpl <- OOrganization(store)
joexImpl <- OJoex.create(httpClientEc, store)
uploadImpl <- OUpload(store, queue, cfg, joexImpl)
nodeImpl <- ONode(store)
jobImpl <- OJob(store, joexImpl)
itemImpl <- OItem(store)
mailImpl <- OMail(store, JavaMailEmil(blocker))
utStore <- UserTaskStore(store)
queue <- JobQueue(store)
loginImpl <- Login[F](store)
signupImpl <- OSignup[F](store)
collImpl <- OCollective[F](store)
sourceImpl <- OSource[F](store)
tagImpl <- OTag[F](store)
equipImpl <- OEquipment[F](store)
orgImpl <- OOrganization(store)
joexImpl <- OJoex.create(httpClientEc, store)
uploadImpl <- OUpload(store, queue, cfg, joexImpl)
nodeImpl <- ONode(store)
jobImpl <- OJob(store, joexImpl)
itemImpl <- OItem(store)
mailImpl <- OMail(store, JavaMailEmil(blocker))
userTaskImpl <- OUserTask(utStore, joexImpl)
} yield new BackendApp[F] {
val login: Login[F] = loginImpl
val signup: OSignup[F] = signupImpl
@ -65,6 +69,7 @@ object BackendApp {
val item = itemImpl
val mail = mailImpl
val joex = joexImpl
val userTask = userTaskImpl
}
def apply[F[_]: ConcurrentEffect: ContextShift](

View File

@ -0,0 +1,60 @@
package docspell.backend.ops
import cats.implicits._
import cats.effect._
import docspell.store.usertask._
import docspell.common._
import com.github.eikek.calev.CalEvent
trait OUserTask[F[_]] {
def getNotifyDueItems(account: AccountId): F[UserTask[NotifyDueItemsArgs]]
def submitNotifyDueItems(
account: AccountId,
task: UserTask[NotifyDueItemsArgs]
): F[Unit]
}
object OUserTask {
def apply[F[_]: Effect](store: UserTaskStore[F], joex: OJoex[F]): Resource[F, OUserTask[F]] =
Resource.pure[F, OUserTask[F]](new OUserTask[F] {
def getNotifyDueItems(account: AccountId): F[UserTask[NotifyDueItemsArgs]] =
store
.getOneByName[NotifyDueItemsArgs](account, NotifyDueItemsArgs.taskName)
.getOrElseF(notifyDueItemsDefault(account))
def submitNotifyDueItems(
account: AccountId,
task: UserTask[NotifyDueItemsArgs]
): F[Unit] =
for {
_ <- store.updateOneTask[NotifyDueItemsArgs](account, task)
_ <- joex.notifyAllNodes
} yield ()
private def notifyDueItemsDefault(
account: AccountId
): F[UserTask[NotifyDueItemsArgs]] =
for {
id <- Ident.randomId[F]
} yield UserTask(
id,
NotifyDueItemsArgs.taskName,
false,
CalEvent.unsafe("*-*-1/7 12:00"),
NotifyDueItemsArgs(
account,
Ident.unsafe("none"),
Nil,
5,
Nil,
Nil
)
)
})
}