mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Update scalafmt settings
This commit is contained in:
@ -59,54 +59,54 @@ object BackendApp {
|
||||
ftsClient: FtsClient[F]
|
||||
): Resource[F, BackendApp[F]] =
|
||||
for {
|
||||
utStore <- UserTaskStore(store)
|
||||
queue <- JobQueue(store)
|
||||
totpImpl <- OTotp(store, Totp.default)
|
||||
loginImpl <- Login[F](store, Totp.default)
|
||||
signupImpl <- OSignup[F](store)
|
||||
joexImpl <- OJoex(JoexClient(httpClient), store)
|
||||
collImpl <- OCollective[F](store, utStore, queue, joexImpl)
|
||||
sourceImpl <- OSource[F](store)
|
||||
tagImpl <- OTag[F](store)
|
||||
equipImpl <- OEquipment[F](store)
|
||||
orgImpl <- OOrganization(store)
|
||||
uploadImpl <- OUpload(store, queue, joexImpl)
|
||||
nodeImpl <- ONode(store)
|
||||
jobImpl <- OJob(store, joexImpl)
|
||||
createIndex <- CreateIndex.resource(ftsClient, store)
|
||||
itemImpl <- OItem(store, ftsClient, createIndex, queue, joexImpl)
|
||||
utStore <- UserTaskStore(store)
|
||||
queue <- JobQueue(store)
|
||||
totpImpl <- OTotp(store, Totp.default)
|
||||
loginImpl <- Login[F](store, Totp.default)
|
||||
signupImpl <- OSignup[F](store)
|
||||
joexImpl <- OJoex(JoexClient(httpClient), store)
|
||||
collImpl <- OCollective[F](store, utStore, queue, joexImpl)
|
||||
sourceImpl <- OSource[F](store)
|
||||
tagImpl <- OTag[F](store)
|
||||
equipImpl <- OEquipment[F](store)
|
||||
orgImpl <- OOrganization(store)
|
||||
uploadImpl <- OUpload(store, queue, joexImpl)
|
||||
nodeImpl <- ONode(store)
|
||||
jobImpl <- OJob(store, joexImpl)
|
||||
createIndex <- CreateIndex.resource(ftsClient, store)
|
||||
itemImpl <- OItem(store, ftsClient, createIndex, queue, joexImpl)
|
||||
itemSearchImpl <- OItemSearch(store)
|
||||
fulltextImpl <- OFulltext(itemSearchImpl, ftsClient, store, queue, joexImpl)
|
||||
fulltextImpl <- OFulltext(itemSearchImpl, ftsClient, store, queue, joexImpl)
|
||||
javaEmil =
|
||||
JavaMailEmil(Settings.defaultSettings.copy(debug = cfg.mailDebug))
|
||||
mailImpl <- OMail(store, javaEmil)
|
||||
userTaskImpl <- OUserTask(utStore, queue, joexImpl)
|
||||
folderImpl <- OFolder(store)
|
||||
mailImpl <- OMail(store, javaEmil)
|
||||
userTaskImpl <- OUserTask(utStore, queue, joexImpl)
|
||||
folderImpl <- OFolder(store)
|
||||
customFieldsImpl <- OCustomFields(store)
|
||||
simpleSearchImpl = OSimpleSearch(fulltextImpl, itemSearchImpl)
|
||||
clientSettingsImpl <- OClientSettings(store)
|
||||
} yield new BackendApp[F] {
|
||||
val login = loginImpl
|
||||
val signup = signupImpl
|
||||
val collective = collImpl
|
||||
val source = sourceImpl
|
||||
val tag = tagImpl
|
||||
val equipment = equipImpl
|
||||
val organization = orgImpl
|
||||
val upload = uploadImpl
|
||||
val node = nodeImpl
|
||||
val job = jobImpl
|
||||
val item = itemImpl
|
||||
val itemSearch = itemSearchImpl
|
||||
val fulltext = fulltextImpl
|
||||
val mail = mailImpl
|
||||
val joex = joexImpl
|
||||
val userTask = userTaskImpl
|
||||
val folder = folderImpl
|
||||
val customFields = customFieldsImpl
|
||||
val simpleSearch = simpleSearchImpl
|
||||
val login = loginImpl
|
||||
val signup = signupImpl
|
||||
val collective = collImpl
|
||||
val source = sourceImpl
|
||||
val tag = tagImpl
|
||||
val equipment = equipImpl
|
||||
val organization = orgImpl
|
||||
val upload = uploadImpl
|
||||
val node = nodeImpl
|
||||
val job = jobImpl
|
||||
val item = itemImpl
|
||||
val itemSearch = itemSearchImpl
|
||||
val fulltext = fulltextImpl
|
||||
val mail = mailImpl
|
||||
val joex = joexImpl
|
||||
val userTask = userTaskImpl
|
||||
val folder = folderImpl
|
||||
val customFields = customFieldsImpl
|
||||
val simpleSearch = simpleSearchImpl
|
||||
val clientSettings = clientSettingsImpl
|
||||
val totp = totpImpl
|
||||
val totp = totpImpl
|
||||
}
|
||||
|
||||
def apply[F[_]: Async](
|
||||
@ -115,9 +115,9 @@ object BackendApp {
|
||||
httpClientEc: ExecutionContext
|
||||
)(ftsFactory: Client[F] => Resource[F, FtsClient[F]]): Resource[F, BackendApp[F]] =
|
||||
for {
|
||||
store <- Store.create(cfg.jdbc, cfg.files.chunkSize, connectEC)
|
||||
store <- Store.create(cfg.jdbc, cfg.files.chunkSize, connectEC)
|
||||
httpClient <- BlazeClientBuilder[F](httpClientEc).resource
|
||||
ftsClient <- ftsFactory(httpClient)
|
||||
backend <- create(cfg, store, httpClient, ftsClient)
|
||||
ftsClient <- ftsFactory(httpClient)
|
||||
backend <- create(cfg, store, httpClient, ftsClient)
|
||||
} yield backend
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ object JobFactory {
|
||||
account: Option[AccountId]
|
||||
): F[RJob] =
|
||||
for {
|
||||
id <- Ident.randomId[F]
|
||||
id <- Ident.randomId[F]
|
||||
now <- Timestamp.current[F]
|
||||
job = RJob.newJob(
|
||||
id,
|
||||
@ -39,7 +39,7 @@ object JobFactory {
|
||||
account: Option[AccountId]
|
||||
): F[RJob] =
|
||||
for {
|
||||
id <- Ident.randomId[F]
|
||||
id <- Ident.randomId[F]
|
||||
now <- Timestamp.current[F]
|
||||
job = RJob.newJob(
|
||||
id,
|
||||
@ -59,7 +59,7 @@ object JobFactory {
|
||||
submitter: Option[Ident]
|
||||
): F[RJob] =
|
||||
for {
|
||||
id <- Ident.randomId[F]
|
||||
id <- Ident.randomId[F]
|
||||
now <- Timestamp.current[F]
|
||||
} yield RJob.newJob(
|
||||
id,
|
||||
@ -79,7 +79,7 @@ object JobFactory {
|
||||
prio: Priority
|
||||
): F[RJob] =
|
||||
for {
|
||||
id <- Ident.randomId[F]
|
||||
id <- Ident.randomId[F]
|
||||
now <- Timestamp.current[F]
|
||||
job = RJob.newJob(
|
||||
id,
|
||||
@ -102,7 +102,7 @@ object JobFactory {
|
||||
prio: Priority
|
||||
): F[RJob] =
|
||||
for {
|
||||
id <- Ident.randomId[F]
|
||||
id <- Ident.randomId[F]
|
||||
now <- Timestamp.current[F]
|
||||
job = RJob.newJob(
|
||||
id,
|
||||
@ -124,7 +124,7 @@ object JobFactory {
|
||||
tracker: Option[Ident]
|
||||
): F[RJob] =
|
||||
for {
|
||||
id <- Ident.randomId[F]
|
||||
id <- Ident.randomId[F]
|
||||
now <- Timestamp.current[F]
|
||||
job = RJob.newJob(
|
||||
id,
|
||||
@ -163,14 +163,14 @@ object JobFactory {
|
||||
)
|
||||
|
||||
for {
|
||||
now <- Timestamp.current[F]
|
||||
now <- Timestamp.current[F]
|
||||
jobs <- args.traverse(a => create(now, a))
|
||||
} yield jobs
|
||||
}
|
||||
|
||||
def reIndexAll[F[_]: Sync]: F[RJob] =
|
||||
for {
|
||||
id <- Ident.randomId[F]
|
||||
id <- Ident.randomId[F]
|
||||
now <- Timestamp.current[F]
|
||||
} yield RJob.newJob(
|
||||
id,
|
||||
@ -186,7 +186,7 @@ object JobFactory {
|
||||
|
||||
def reIndex[F[_]: Sync](account: AccountId): F[RJob] =
|
||||
for {
|
||||
id <- Ident.randomId[F]
|
||||
id <- Ident.randomId[F]
|
||||
now <- Timestamp.current[F]
|
||||
args = ReIndexTaskArgs(Some(account.collective))
|
||||
} yield RJob.newJob(
|
||||
|
@ -53,8 +53,8 @@ object AuthToken {
|
||||
case Array(ms, as, fa, salt, sig) =>
|
||||
for {
|
||||
millis <- TokenUtil.asInt(ms).toRight("Cannot read authenticator data")
|
||||
acc <- TokenUtil.b64dec(as).toRight("Cannot read authenticator data")
|
||||
accId <- AccountId.parse(acc)
|
||||
acc <- TokenUtil.b64dec(as).toRight("Cannot read authenticator data")
|
||||
accId <- AccountId.parse(acc)
|
||||
twofac <- Right[String, Boolean](java.lang.Boolean.parseBoolean(fa))
|
||||
} yield AuthToken(millis, accId, twofac, salt, sig)
|
||||
|
||||
@ -70,15 +70,15 @@ object AuthToken {
|
||||
for {
|
||||
salt <- Common.genSaltString[F]
|
||||
millis = Instant.now.toEpochMilli
|
||||
cd = AuthToken(millis, accountId, requireSecondFactor, salt, "")
|
||||
sig = TokenUtil.sign(cd, key)
|
||||
cd = AuthToken(millis, accountId, requireSecondFactor, salt, "")
|
||||
sig = TokenUtil.sign(cd, key)
|
||||
} yield cd.copy(sig = sig)
|
||||
|
||||
def update[F[_]: Sync](token: AuthToken, key: ByteVector): F[AuthToken] =
|
||||
for {
|
||||
now <- Timestamp.current[F]
|
||||
now <- Timestamp.current[F]
|
||||
salt <- Common.genSaltString[F]
|
||||
data = AuthToken(now.toMillis, token.account, token.requireSecondFactor, salt, "")
|
||||
sig = TokenUtil.sign(data, key)
|
||||
sig = TokenUtil.sign(data, key)
|
||||
} yield data.copy(sig = sig)
|
||||
}
|
||||
|
@ -85,8 +85,8 @@ object Login {
|
||||
|
||||
def ok(session: AuthToken, remember: Option[RememberToken]): Result =
|
||||
Ok(session, remember)
|
||||
def invalidAuth: Result = InvalidAuth
|
||||
def invalidTime: Result = InvalidTime
|
||||
def invalidAuth: Result = InvalidAuth
|
||||
def invalidTime: Result = InvalidTime
|
||||
def invalidFactor: Result = InvalidFactor
|
||||
}
|
||||
|
||||
@ -98,7 +98,7 @@ object Login {
|
||||
def loginExternal(config: Config)(accountId: AccountId): F[Result] =
|
||||
for {
|
||||
data <- store.transact(QLogin.findUser(accountId))
|
||||
_ <- logF.trace(s"Account lookup: $data")
|
||||
_ <- logF.trace(s"Account lookup: $data")
|
||||
res <-
|
||||
if (data.exists(checkNoPassword(_, Set(AccountSource.OpenId))))
|
||||
doLogin(config, accountId, false)
|
||||
@ -124,7 +124,7 @@ object Login {
|
||||
case Right(acc) =>
|
||||
for {
|
||||
data <- store.transact(QLogin.findUser(acc))
|
||||
_ <- Sync[F].delay(logger.trace(s"Account lookup: $data"))
|
||||
_ <- Sync[F].delay(logger.trace(s"Account lookup: $data"))
|
||||
res <-
|
||||
if (data.exists(check(up.pass))) doLogin(config, acc, up.rememberMe)
|
||||
else Result.invalidAuth.pure[F]
|
||||
@ -137,7 +137,7 @@ object Login {
|
||||
def loginSecondFactor(config: Config)(sf: SecondFactor): F[Result] = {
|
||||
val okResult: F[Result] =
|
||||
for {
|
||||
_ <- store.transact(RUser.updateLogin(sf.token.account))
|
||||
_ <- store.transact(RUser.updateLogin(sf.token.account))
|
||||
newToken <- AuthToken.user(sf.token.account, false, config.serverSecret)
|
||||
rem <- OptionT
|
||||
.whenF(sf.rememberMe && config.rememberMe.enabled)(
|
||||
@ -180,7 +180,7 @@ object Login {
|
||||
def loginRememberMe(config: Config)(token: String): F[Result] = {
|
||||
def okResult(acc: AccountId) =
|
||||
for {
|
||||
_ <- store.transact(RUser.updateLogin(acc))
|
||||
_ <- store.transact(RUser.updateLogin(acc))
|
||||
token <- AuthToken.user(acc, false, config.serverSecret)
|
||||
} yield Result.ok(token, None)
|
||||
|
||||
@ -270,8 +270,8 @@ object Login {
|
||||
config: Config
|
||||
): F[RememberToken] =
|
||||
for {
|
||||
rme <- RRememberMe.generate[F](acc)
|
||||
_ <- store.transact(RRememberMe.insert(rme))
|
||||
rme <- RRememberMe.generate[F](acc)
|
||||
_ <- store.transact(RRememberMe.insert(rme))
|
||||
token <- RememberToken.user(rme.id, config.serverSecret)
|
||||
} yield token
|
||||
|
||||
|
@ -45,8 +45,8 @@ object RememberToken {
|
||||
case Array(ms, as, salt, sig) =>
|
||||
for {
|
||||
millis <- TokenUtil.asInt(ms).toRight("Cannot read authenticator data")
|
||||
rId <- TokenUtil.b64dec(as).toRight("Cannot read authenticator data")
|
||||
accId <- Ident.fromString(rId)
|
||||
rId <- TokenUtil.b64dec(as).toRight("Cannot read authenticator data")
|
||||
accId <- Ident.fromString(rId)
|
||||
} yield RememberToken(millis, accId, salt, sig)
|
||||
|
||||
case _ =>
|
||||
@ -57,8 +57,8 @@ object RememberToken {
|
||||
for {
|
||||
salt <- Common.genSaltString[F]
|
||||
millis = Instant.now.toEpochMilli
|
||||
cd = RememberToken(millis, rememberId, salt, "")
|
||||
sig = TokenUtil.sign(cd, key)
|
||||
cd = RememberToken(millis, rememberId, salt, "")
|
||||
sig = TokenUtil.sign(cd, key)
|
||||
} yield cd.copy(sig = sig)
|
||||
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ object Merge {
|
||||
def merge(givenIds: NonEmptyList[Ident], collective: Ident): F[Result[RItem]] =
|
||||
(for {
|
||||
items <- loadItems(givenIds, collective)
|
||||
ids = items.map(_.id)
|
||||
ids = items.map(_.id)
|
||||
target = moveMainData(items)
|
||||
_ <- EitherT.right[Error](store.transact(RItem.updateAll(target)))
|
||||
_ <- EitherT.right[Error](moveTags(ids))
|
||||
@ -101,7 +101,7 @@ object Merge {
|
||||
def moveCustomFields(items: NonEmptyList[Ident]): F[Unit] =
|
||||
for {
|
||||
values <- store.transact(QCustomField.findAllValues(items))
|
||||
byField = values.groupBy(_.field.name)
|
||||
byField = values.groupBy(_.field.name)
|
||||
newValues = mergeFields(items.head, byField)
|
||||
_ <- newValues.traverse(fv =>
|
||||
store.transact(RCustomField.setValue(fv.field, items.head, fv.value))
|
||||
|
@ -77,7 +77,7 @@ object OClientSettings {
|
||||
)
|
||||
)
|
||||
userId <- getUserId(account)
|
||||
data <- OptionT(store.transact(RClientSettings.find(clientId, userId)))
|
||||
data <- OptionT(store.transact(RClientSettings.find(clientId, userId)))
|
||||
} yield data).value
|
||||
|
||||
})
|
||||
|
@ -101,27 +101,27 @@ object OCollective {
|
||||
sealed trait PassResetResult
|
||||
object PassResetResult {
|
||||
case class Success(newPw: Password) extends PassResetResult
|
||||
case object NotFound extends PassResetResult
|
||||
case object UserNotLocal extends PassResetResult
|
||||
case object NotFound extends PassResetResult
|
||||
case object UserNotLocal extends PassResetResult
|
||||
|
||||
def success(np: Password): PassResetResult = Success(np)
|
||||
def notFound: PassResetResult = NotFound
|
||||
def userNotLocal: PassResetResult = UserNotLocal
|
||||
def notFound: PassResetResult = NotFound
|
||||
def userNotLocal: PassResetResult = UserNotLocal
|
||||
}
|
||||
|
||||
sealed trait PassChangeResult
|
||||
object PassChangeResult {
|
||||
case object UserNotFound extends PassChangeResult
|
||||
case object UserNotFound extends PassChangeResult
|
||||
case object PasswordMismatch extends PassChangeResult
|
||||
case object UpdateFailed extends PassChangeResult
|
||||
case object UserNotLocal extends PassChangeResult
|
||||
case object Success extends PassChangeResult
|
||||
case object UpdateFailed extends PassChangeResult
|
||||
case object UserNotLocal extends PassChangeResult
|
||||
case object Success extends PassChangeResult
|
||||
|
||||
def userNotFound: PassChangeResult = UserNotFound
|
||||
def userNotFound: PassChangeResult = UserNotFound
|
||||
def passwordMismatch: PassChangeResult = PasswordMismatch
|
||||
def success: PassChangeResult = Success
|
||||
def updateFailed: PassChangeResult = UpdateFailed
|
||||
def userNotLocal: PassChangeResult = UserNotLocal
|
||||
def success: PassChangeResult = Success
|
||||
def updateFailed: PassChangeResult = UpdateFailed
|
||||
def userNotLocal: PassChangeResult = UserNotLocal
|
||||
}
|
||||
|
||||
def apply[F[_]: Async](
|
||||
@ -149,9 +149,9 @@ object OCollective {
|
||||
private def updateLearnClassifierTask(coll: Ident, sett: Settings): F[Unit] =
|
||||
for {
|
||||
id <- Ident.randomId[F]
|
||||
on = sett.classifier.map(_.enabled).getOrElse(false)
|
||||
on = sett.classifier.map(_.enabled).getOrElse(false)
|
||||
timer = sett.classifier.map(_.schedule).getOrElse(CalEvent.unsafe(""))
|
||||
args = LearnClassifierArgs(coll)
|
||||
args = LearnClassifierArgs(coll)
|
||||
ut = UserTask(
|
||||
id,
|
||||
LearnClassifierArgs.taskName,
|
||||
@ -168,7 +168,7 @@ object OCollective {
|
||||
for {
|
||||
id <- Ident.randomId[F]
|
||||
settings = sett.emptyTrash.getOrElse(EmptyTrash.default)
|
||||
args = EmptyTrashArgs(coll, settings.minAge)
|
||||
args = EmptyTrashArgs(coll, settings.minAge)
|
||||
ut = UserTask(id, EmptyTrashArgs.taskName, true, settings.schedule, None, args)
|
||||
_ <- uts.updateOneTask(UserTaskScope(coll), args.makeSubject.some, ut)
|
||||
_ <- joex.notifyAllNodes
|
||||
@ -187,8 +187,8 @@ object OCollective {
|
||||
args
|
||||
).encode.toPeriodicTask(UserTaskScope(collective), args.makeSubject.some)
|
||||
job <- ut.toJob
|
||||
_ <- queue.insert(job)
|
||||
_ <- joex.notifyAllNodes
|
||||
_ <- queue.insert(job)
|
||||
_ <- joex.notifyAllNodes
|
||||
} yield ()
|
||||
|
||||
def startEmptyTrash(args: EmptyTrashArgs): F[Unit] =
|
||||
@ -203,8 +203,8 @@ object OCollective {
|
||||
args
|
||||
).encode.toPeriodicTask(UserTaskScope(args.collective), args.makeSubject.some)
|
||||
job <- ut.toJob
|
||||
_ <- queue.insert(job)
|
||||
_ <- joex.notifyAllNodes
|
||||
_ <- queue.insert(job)
|
||||
_ <- joex.notifyAllNodes
|
||||
} yield ()
|
||||
|
||||
def findSettings(collective: Ident): F[Option[OCollective.Settings]] =
|
||||
|
@ -88,15 +88,15 @@ object OCustomFields {
|
||||
sealed trait SetValueResult
|
||||
object SetValueResult {
|
||||
|
||||
case object ItemNotFound extends SetValueResult
|
||||
case object FieldNotFound extends SetValueResult
|
||||
case object ItemNotFound extends SetValueResult
|
||||
case object FieldNotFound extends SetValueResult
|
||||
case class ValueInvalid(msg: String) extends SetValueResult
|
||||
case object Success extends SetValueResult
|
||||
case object Success extends SetValueResult
|
||||
|
||||
def itemNotFound: SetValueResult = ItemNotFound
|
||||
def fieldNotFound: SetValueResult = FieldNotFound
|
||||
def itemNotFound: SetValueResult = ItemNotFound
|
||||
def fieldNotFound: SetValueResult = FieldNotFound
|
||||
def valueInvalid(msg: String): SetValueResult = ValueInvalid(msg)
|
||||
def success: SetValueResult = Success
|
||||
def success: SetValueResult = Success
|
||||
}
|
||||
|
||||
case class RemoveValue(
|
||||
@ -109,12 +109,12 @@ object OCustomFields {
|
||||
object CustomFieldOrder {
|
||||
import docspell.store.qb.DSL._
|
||||
|
||||
final case object NameAsc extends CustomFieldOrder
|
||||
final case object NameDesc extends CustomFieldOrder
|
||||
final case object LabelAsc extends CustomFieldOrder
|
||||
final case object NameAsc extends CustomFieldOrder
|
||||
final case object NameDesc extends CustomFieldOrder
|
||||
final case object LabelAsc extends CustomFieldOrder
|
||||
final case object LabelDesc extends CustomFieldOrder
|
||||
final case object TypeAsc extends CustomFieldOrder
|
||||
final case object TypeDesc extends CustomFieldOrder
|
||||
final case object TypeAsc extends CustomFieldOrder
|
||||
final case object TypeDesc extends CustomFieldOrder
|
||||
|
||||
def parse(str: String): Either[String, CustomFieldOrder] =
|
||||
str.toLowerCase match {
|
||||
@ -172,7 +172,7 @@ object OCustomFields {
|
||||
def create(field: NewCustomField): F[AddResult] = {
|
||||
val exists = RCustomField.exists(field.name, field.cid)
|
||||
val insert = for {
|
||||
id <- Ident.randomId[ConnectionIO]
|
||||
id <- Ident.randomId[ConnectionIO]
|
||||
now <- Timestamp.current[ConnectionIO]
|
||||
rec = RCustomField(id, field.name, field.label, field.cid, field.ftype, now)
|
||||
n <- RCustomField.insert(rec)
|
||||
@ -188,9 +188,9 @@ object OCustomFields {
|
||||
val update =
|
||||
for {
|
||||
field <- OptionT(RCustomField.findByIdOrName(fieldIdOrName, coll))
|
||||
_ <- OptionT.liftF(logger.info(s"Deleting field: $field"))
|
||||
n <- OptionT.liftF(RCustomFieldValue.deleteByField(field.id))
|
||||
k <- OptionT.liftF(RCustomField.deleteById(field.id, coll))
|
||||
_ <- OptionT.liftF(logger.info(s"Deleting field: $field"))
|
||||
n <- OptionT.liftF(RCustomFieldValue.deleteByField(field.id))
|
||||
k <- OptionT.liftF(RCustomField.deleteById(field.id, coll))
|
||||
} yield n + k
|
||||
|
||||
UpdateResult.fromUpdate(store.transact(update.getOrElse(0)))
|
||||
@ -230,8 +230,8 @@ object OCustomFields {
|
||||
val update =
|
||||
for {
|
||||
field <- OptionT(RCustomField.findByIdOrName(in.field, in.collective))
|
||||
_ <- OptionT.liftF(logger.debug(s"Field found by '${in.field}': $field"))
|
||||
n <- OptionT.liftF(RCustomFieldValue.deleteValue(field.id, in.item))
|
||||
_ <- OptionT.liftF(logger.debug(s"Field found by '${in.field}': $field"))
|
||||
n <- OptionT.liftF(RCustomFieldValue.deleteValue(field.id, in.item))
|
||||
} yield n
|
||||
|
||||
UpdateResult.fromUpdate(store.transact(update.getOrElse(0)))
|
||||
|
@ -36,7 +36,7 @@ object OEquipment {
|
||||
|
||||
sealed trait EquipmentOrder
|
||||
object EquipmentOrder {
|
||||
final case object NameAsc extends EquipmentOrder
|
||||
final case object NameAsc extends EquipmentOrder
|
||||
final case object NameDesc extends EquipmentOrder
|
||||
|
||||
def parse(str: String): Either[String, EquipmentOrder] =
|
||||
|
@ -65,9 +65,9 @@ object OFolder {
|
||||
|
||||
sealed trait FolderOrder
|
||||
object FolderOrder {
|
||||
final case object NameAsc extends FolderOrder
|
||||
final case object NameDesc extends FolderOrder
|
||||
final case object OwnerAsc extends FolderOrder
|
||||
final case object NameAsc extends FolderOrder
|
||||
final case object NameDesc extends FolderOrder
|
||||
final case object OwnerAsc extends FolderOrder
|
||||
final case object OwnerDesc extends FolderOrder
|
||||
|
||||
def parse(str: String): Either[String, FolderOrder] =
|
||||
|
@ -49,8 +49,7 @@ trait OFulltext[F[_]] {
|
||||
def findIndexOnlySummary(account: AccountId, fts: OFulltext.FtsInput): F[SearchSummary]
|
||||
def findItemsSummary(q: Query, fts: OFulltext.FtsInput): F[SearchSummary]
|
||||
|
||||
/** Clears the full-text index completely and launches a task that indexes all data.
|
||||
*/
|
||||
/** Clears the full-text index completely and launches a task that indexes all data. */
|
||||
def reindexAll: F[Unit]
|
||||
|
||||
/** Clears the full-text index for the given collective and starts a task indexing all
|
||||
@ -92,9 +91,9 @@ object OFulltext {
|
||||
Resource.pure[F, OFulltext[F]](new OFulltext[F] {
|
||||
def reindexAll: F[Unit] =
|
||||
for {
|
||||
_ <- logger.finfo(s"Re-index all.")
|
||||
_ <- logger.finfo(s"Re-index all.")
|
||||
job <- JobFactory.reIndexAll[F]
|
||||
_ <- queue.insertIfNew(job) *> joex.notifyAllNodes
|
||||
_ <- queue.insertIfNew(job) *> joex.notifyAllNodes
|
||||
} yield ()
|
||||
|
||||
def reindexCollective(account: AccountId): F[Unit] =
|
||||
@ -124,9 +123,9 @@ object OFulltext {
|
||||
FtsQuery.HighlightSetting(ftsQ.highlightPre, ftsQ.highlightPost)
|
||||
)
|
||||
for {
|
||||
_ <- logger.ftrace(s"Find index only: ${ftsQ.query}/$batch")
|
||||
_ <- logger.ftrace(s"Find index only: ${ftsQ.query}/$batch")
|
||||
folders <- store.transact(QFolder.getMemberFolders(account))
|
||||
ftsR <- fts.search(fq.withFolders(folders))
|
||||
ftsR <- fts.search(fq.withFolders(folders))
|
||||
ftsItems = ftsR.results.groupBy(_.itemId)
|
||||
select =
|
||||
ftsItems.values
|
||||
@ -173,7 +172,7 @@ object OFulltext {
|
||||
|
||||
for {
|
||||
folder <- store.transact(QFolder.getMemberFolders(account))
|
||||
now <- Timestamp.current[F]
|
||||
now <- Timestamp.current[F]
|
||||
itemIds <- fts
|
||||
.searchAll(fq.withFolders(folder))
|
||||
.flatMap(r => Stream.emits(r.results.map(_.itemId)))
|
||||
@ -290,7 +289,7 @@ object OFulltext {
|
||||
val qres =
|
||||
for {
|
||||
items <- sqlResult
|
||||
ids = items.map(a => ItemId[A].itemId(a))
|
||||
ids = items.map(a => ItemId[A].itemId(a))
|
||||
idsNel = NonEmptyList.fromFoldable(ids)
|
||||
// must find all index results involving the items.
|
||||
// Currently there is one result per item + one result per
|
||||
@ -301,7 +300,7 @@ object OFulltext {
|
||||
ftsQ = fq.copy(items = ids.toSet, limit = limit)
|
||||
ftsR <- fts.search(ftsQ)
|
||||
ftsItems = ftsR.results.groupBy(_.itemId)
|
||||
res = items.collect(convert(ftsR, ftsItems))
|
||||
res = items.collect(convert(ftsR, ftsItems))
|
||||
} yield (items.size, res)
|
||||
|
||||
Stream.eval(qres) ++ findItemsFts0(q, ftsQ, batch.next, search, convert)
|
||||
|
@ -188,23 +188,20 @@ trait OItem[F[_]] {
|
||||
notifyJoex: Boolean
|
||||
): F[UpdateResult]
|
||||
|
||||
/** Submits a task that (re)generates the preview image for an attachment.
|
||||
*/
|
||||
/** Submits a task that (re)generates the preview image for an attachment. */
|
||||
def generatePreview(
|
||||
args: MakePreviewArgs,
|
||||
account: AccountId,
|
||||
notifyJoex: Boolean
|
||||
): F[UpdateResult]
|
||||
|
||||
/** Submits a task that (re)generates the preview images for all attachments.
|
||||
*/
|
||||
/** Submits a task that (re)generates the preview images for all attachments. */
|
||||
def generateAllPreviews(
|
||||
storeMode: MakePreviewArgs.StoreMode,
|
||||
notifyJoex: Boolean
|
||||
): F[UpdateResult]
|
||||
|
||||
/** Merges a list of items into one item. The remaining items are deleted.
|
||||
*/
|
||||
/** Merges a list of items into one item. The remaining items are deleted. */
|
||||
def merge(
|
||||
logger: Logger[F],
|
||||
items: NonEmptyList[Ident],
|
||||
@ -222,8 +219,8 @@ object OItem {
|
||||
joex: OJoex[F]
|
||||
): Resource[F, OItem[F]] =
|
||||
for {
|
||||
otag <- OTag(store)
|
||||
oorg <- OOrganization(store)
|
||||
otag <- OTag(store)
|
||||
oorg <- OOrganization(store)
|
||||
oequip <- OEquipment(store)
|
||||
logger <- Resource.pure[F, Logger[F]](Logger.log4s(getLogger))
|
||||
oitem <- Resource.pure[F, OItem[F]](new OItem[F] {
|
||||
@ -312,11 +309,11 @@ object OItem {
|
||||
case kws =>
|
||||
val db =
|
||||
(for {
|
||||
_ <- OptionT(RItem.checkByIdAndCollective(item, collective))
|
||||
_ <- OptionT(RItem.checkByIdAndCollective(item, collective))
|
||||
given <- OptionT.liftF(RTag.findAllByNameOrId(kws, collective))
|
||||
exist <- OptionT.liftF(RTagItem.findAllIn(item, given.map(_.tagId)))
|
||||
remove = given.map(_.tagId).toSet.intersect(exist.map(_.tagId).toSet)
|
||||
toadd = given.map(_.tagId).diff(exist.map(_.tagId))
|
||||
toadd = given.map(_.tagId).diff(exist.map(_.tagId))
|
||||
_ <- OptionT.liftF(RTagItem.setAllTags(item, toadd))
|
||||
_ <- OptionT.liftF(RTagItem.removeAllTags(item, remove.toSeq))
|
||||
} yield UpdateResult.success).getOrElse(UpdateResult.notFound)
|
||||
@ -337,9 +334,9 @@ object OItem {
|
||||
collective: Ident
|
||||
): F[UpdateResult] =
|
||||
UpdateResult.fromUpdate(store.transact(for {
|
||||
k <- RTagItem.deleteItemTags(items, collective)
|
||||
k <- RTagItem.deleteItemTags(items, collective)
|
||||
rtags <- RTag.findAllByNameOrId(tags, collective)
|
||||
res <- items.traverse(i => RTagItem.setAllTags(i, rtags.map(_.tagId)))
|
||||
res <- items.traverse(i => RTagItem.setAllTags(i, rtags.map(_.tagId)))
|
||||
n = res.fold
|
||||
} yield k + n))
|
||||
|
||||
@ -733,8 +730,8 @@ object OItem {
|
||||
): F[UpdateResult] =
|
||||
for {
|
||||
job <- JobFactory.convertAllPdfs[F](collective, submitter, Priority.Low)
|
||||
_ <- queue.insertIfNew(job)
|
||||
_ <- if (notifyJoex) joex.notifyAllNodes else ().pure[F]
|
||||
_ <- queue.insertIfNew(job)
|
||||
_ <- if (notifyJoex) joex.notifyAllNodes else ().pure[F]
|
||||
} yield UpdateResult.success
|
||||
|
||||
def generatePreview(
|
||||
@ -744,8 +741,8 @@ object OItem {
|
||||
): F[UpdateResult] =
|
||||
for {
|
||||
job <- JobFactory.makePreview[F](args, account.some)
|
||||
_ <- queue.insertIfNew(job)
|
||||
_ <- if (notifyJoex) joex.notifyAllNodes else ().pure[F]
|
||||
_ <- queue.insertIfNew(job)
|
||||
_ <- if (notifyJoex) joex.notifyAllNodes else ().pure[F]
|
||||
} yield UpdateResult.success
|
||||
|
||||
def generateAllPreviews(
|
||||
@ -754,8 +751,8 @@ object OItem {
|
||||
): F[UpdateResult] =
|
||||
for {
|
||||
job <- JobFactory.allPreviews[F](AllPreviewsArgs(None, storeMode), None)
|
||||
_ <- queue.insertIfNew(job)
|
||||
_ <- if (notifyJoex) joex.notifyAllNodes else ().pure[F]
|
||||
_ <- queue.insertIfNew(job)
|
||||
_ <- if (notifyJoex) joex.notifyAllNodes else ().pure[F]
|
||||
} yield UpdateResult.success
|
||||
|
||||
private def onSuccessIgnoreError(update: F[Unit])(ar: UpdateResult): F[Unit] =
|
||||
|
@ -94,7 +94,7 @@ object OItemSearch {
|
||||
}
|
||||
case class AttachmentData[F[_]](ra: RAttachment, meta: RFileMeta, data: Stream[F, Byte])
|
||||
extends BinaryData[F] {
|
||||
val name = ra.name
|
||||
val name = ra.name
|
||||
val fileId = ra.fileId
|
||||
}
|
||||
|
||||
@ -103,7 +103,7 @@ object OItemSearch {
|
||||
meta: RFileMeta,
|
||||
data: Stream[F, Byte]
|
||||
) extends BinaryData[F] {
|
||||
val name = rs.name
|
||||
val name = rs.name
|
||||
val fileId = rs.fileId
|
||||
}
|
||||
|
||||
@ -112,7 +112,7 @@ object OItemSearch {
|
||||
meta: RFileMeta,
|
||||
data: Stream[F, Byte]
|
||||
) extends BinaryData[F] {
|
||||
val name = rs.name
|
||||
val name = rs.name
|
||||
val fileId = rs.fileId
|
||||
}
|
||||
|
||||
@ -121,7 +121,7 @@ object OItemSearch {
|
||||
meta: RFileMeta,
|
||||
data: Stream[F, Byte]
|
||||
) extends BinaryData[F] {
|
||||
val name = rs.name
|
||||
val name = rs.name
|
||||
val fileId = rs.fileId
|
||||
}
|
||||
|
||||
@ -290,7 +290,7 @@ object OItemSearch {
|
||||
|
||||
def findByFileSource(checksum: String, sourceId: Ident): F[Option[Vector[RItem]]] =
|
||||
store.transact((for {
|
||||
coll <- OptionT(RSource.findCollective(sourceId))
|
||||
coll <- OptionT(RSource.findCollective(sourceId))
|
||||
items <- OptionT.liftF(QItem.findByChecksum(checksum, coll, Set.empty))
|
||||
} yield items).value)
|
||||
|
||||
|
@ -31,13 +31,13 @@ object OJob {
|
||||
|
||||
sealed trait JobCancelResult
|
||||
object JobCancelResult {
|
||||
case object Removed extends JobCancelResult
|
||||
case object Removed extends JobCancelResult
|
||||
case object CancelRequested extends JobCancelResult
|
||||
case object JobNotFound extends JobCancelResult
|
||||
case object JobNotFound extends JobCancelResult
|
||||
|
||||
def removed: JobCancelResult = Removed
|
||||
def removed: JobCancelResult = Removed
|
||||
def cancelRequested: JobCancelResult = CancelRequested
|
||||
def jobNotFound: JobCancelResult = JobNotFound
|
||||
def jobNotFound: JobCancelResult = JobNotFound
|
||||
}
|
||||
|
||||
case class JobDetail(job: RJob, logs: Vector[RJobLog])
|
||||
|
@ -32,12 +32,12 @@ object OJoex {
|
||||
def notifyAllNodes: F[Unit] =
|
||||
for {
|
||||
nodes <- store.transact(RNode.findAll(NodeType.Joex))
|
||||
_ <- nodes.toList.traverse(n => client.notifyJoexIgnoreErrors(n.url))
|
||||
_ <- nodes.toList.traverse(n => client.notifyJoexIgnoreErrors(n.url))
|
||||
} yield ()
|
||||
|
||||
def cancelJob(job: Ident, worker: Ident): F[Boolean] =
|
||||
(for {
|
||||
node <- OptionT(store.transact(RNode.findById(worker)))
|
||||
node <- OptionT(store.transact(RNode.findById(worker)))
|
||||
cancel <- OptionT.liftF(client.cancelJob(node.url, job))
|
||||
} yield cancel.success).getOrElse(false)
|
||||
})
|
||||
|
@ -162,7 +162,7 @@ object OMail {
|
||||
def createSmtpSettings(accId: AccountId, s: SmtpSettings): F[AddResult] =
|
||||
(for {
|
||||
ru <- OptionT(store.transact(s.toRecord(accId).value))
|
||||
ins = RUserEmail.insert(ru)
|
||||
ins = RUserEmail.insert(ru)
|
||||
exists = RUserEmail.exists(ru.uid, ru.name)
|
||||
res <- OptionT.liftF(store.add(ins, exists))
|
||||
} yield res).getOrElse(AddResult.Failure(new Exception("User not found")))
|
||||
@ -175,7 +175,7 @@ object OMail {
|
||||
val op = for {
|
||||
um <- OptionT(RUserEmail.getByName(accId, name))
|
||||
ru <- data.toRecord(accId)
|
||||
n <- OptionT.liftF(RUserEmail.update(um.id, ru))
|
||||
n <- OptionT.liftF(RUserEmail.update(um.id, ru))
|
||||
} yield n
|
||||
|
||||
store.transact(op.value).map(_.getOrElse(0))
|
||||
@ -193,7 +193,7 @@ object OMail {
|
||||
def createImapSettings(accId: AccountId, data: ImapSettings): F[AddResult] =
|
||||
(for {
|
||||
ru <- OptionT(store.transact(data.toRecord(accId).value))
|
||||
ins = RUserImap.insert(ru)
|
||||
ins = RUserImap.insert(ru)
|
||||
exists = RUserImap.exists(ru.uid, ru.name)
|
||||
res <- OptionT.liftF(store.add(ins, exists))
|
||||
} yield res).getOrElse(AddResult.Failure(new Exception("User not found")))
|
||||
@ -206,7 +206,7 @@ object OMail {
|
||||
val op = for {
|
||||
um <- OptionT(RUserImap.getByName(accId, name))
|
||||
ru <- data.toRecord(accId)
|
||||
n <- OptionT.liftF(RUserImap.update(um.id, ru))
|
||||
n <- OptionT.liftF(RUserImap.update(um.id, ru))
|
||||
} yield n
|
||||
|
||||
store.transact(op.value).map(_.getOrElse(0))
|
||||
@ -284,9 +284,9 @@ object OMail {
|
||||
|
||||
(for {
|
||||
mailCfg <- getSmtpSettings
|
||||
mail <- createMail(mailCfg)
|
||||
mid <- OptionT.liftF(sendMail(mailCfg.toMailConfig, mail))
|
||||
res <- mid.traverse(id => OptionT.liftF(storeMail(id, mailCfg)))
|
||||
mail <- createMail(mailCfg)
|
||||
mid <- OptionT.liftF(sendMail(mailCfg.toMailConfig, mail))
|
||||
res <- mid.traverse(id => OptionT.liftF(storeMail(id, mailCfg)))
|
||||
conv = res.fold(identity, _.fold(identity, id => SendResult.Success(id)))
|
||||
} yield conv).getOrElse(SendResult.NotFound)
|
||||
}
|
||||
|
@ -32,8 +32,8 @@ object ONode {
|
||||
def register(appId: Ident, nodeType: NodeType, uri: LenientUri): F[Unit] =
|
||||
for {
|
||||
node <- RNode(appId, nodeType, uri)
|
||||
_ <- logger.finfo(s"Registering node ${node.id.id}")
|
||||
_ <- store.transact(RNode.set(node))
|
||||
_ <- logger.finfo(s"Registering node ${node.id.id}")
|
||||
_ <- store.transact(RNode.set(node))
|
||||
} yield ()
|
||||
|
||||
def unregister(appId: Ident): F[Unit] =
|
||||
|
@ -72,7 +72,7 @@ object OOrganization {
|
||||
|
||||
sealed trait OrganizationOrder
|
||||
object OrganizationOrder {
|
||||
final case object NameAsc extends OrganizationOrder
|
||||
final case object NameAsc extends OrganizationOrder
|
||||
final case object NameDesc extends OrganizationOrder
|
||||
|
||||
def parse(str: String): Either[String, OrganizationOrder] =
|
||||
@ -94,10 +94,10 @@ object OOrganization {
|
||||
|
||||
sealed trait PersonOrder
|
||||
object PersonOrder {
|
||||
final case object NameAsc extends PersonOrder
|
||||
final case object NameAsc extends PersonOrder
|
||||
final case object NameDesc extends PersonOrder
|
||||
final case object OrgAsc extends PersonOrder
|
||||
final case object OrgDesc extends PersonOrder
|
||||
final case object OrgAsc extends PersonOrder
|
||||
final case object OrgDesc extends PersonOrder
|
||||
|
||||
def parse(str: String): Either[String, PersonOrder] =
|
||||
str.toLowerCase match {
|
||||
|
@ -48,8 +48,7 @@ trait OSimpleSearch[F[_]] {
|
||||
): F[StringSearchResult[Items]] =
|
||||
OSimpleSearch.applySearch[F, Items](fix, q)((iq, fts) => search(settings)(iq, fts))
|
||||
|
||||
/** Same as `searchByString` but returning a summary instead of the results.
|
||||
*/
|
||||
/** Same as `searchByString` but returning a summary instead of the results. */
|
||||
final def searchSummaryByString(
|
||||
settings: StatsSettings
|
||||
)(fix: Query.Fix, q: ItemQueryString)(implicit
|
||||
|
@ -29,8 +29,7 @@ trait OTag[F[_]] {
|
||||
|
||||
def delete(id: Ident, collective: Ident): F[AddResult]
|
||||
|
||||
/** Load all tags given their ids. Ids that are not available are ignored.
|
||||
*/
|
||||
/** Load all tags given their ids. Ids that are not available are ignored. */
|
||||
def loadAll(ids: List[Ident]): F[Vector[RTag]]
|
||||
}
|
||||
|
||||
@ -39,9 +38,9 @@ object OTag {
|
||||
|
||||
sealed trait TagOrder
|
||||
object TagOrder {
|
||||
final case object NameAsc extends TagOrder
|
||||
final case object NameDesc extends TagOrder
|
||||
final case object CategoryAsc extends TagOrder
|
||||
final case object NameAsc extends TagOrder
|
||||
final case object NameDesc extends TagOrder
|
||||
final case object CategoryAsc extends TagOrder
|
||||
final case object CategoryDesc extends TagOrder
|
||||
|
||||
def parse(str: String): Either[String, TagOrder] =
|
||||
@ -92,9 +91,9 @@ object OTag {
|
||||
def delete(id: Ident, collective: Ident): F[AddResult] = {
|
||||
val io = for {
|
||||
optTag <- RTag.findByIdAndCollective(id, collective)
|
||||
n0 <- optTag.traverse(t => RTagItem.deleteTag(t.tagId))
|
||||
n1 <- optTag.traverse(t => RTagSource.deleteTag(t.tagId))
|
||||
n2 <- optTag.traverse(t => RTag.delete(t.tagId, collective))
|
||||
n0 <- optTag.traverse(t => RTagItem.deleteTag(t.tagId))
|
||||
n1 <- optTag.traverse(t => RTagSource.deleteTag(t.tagId))
|
||||
n2 <- optTag.traverse(t => RTag.delete(t.tagId, collective))
|
||||
} yield (n0 |+| n1 |+| n2).getOrElse(0)
|
||||
store.transact(io).attempt.map(AddResult.fromUpdate)
|
||||
}
|
||||
|
@ -56,8 +56,8 @@ object OTotp {
|
||||
s"otpauth://totp/$issuer:${accountId.asString}?secret=${key.data.toBase32}&issuer=$issuer"
|
||||
)
|
||||
}
|
||||
case object AlreadyExists extends InitResult
|
||||
case object NotFound extends InitResult
|
||||
case object AlreadyExists extends InitResult
|
||||
case object NotFound extends InitResult
|
||||
final case class Failed(ex: Throwable) extends InitResult
|
||||
|
||||
def success(accountId: AccountId, key: Key): InitResult =
|
||||
@ -71,7 +71,7 @@ object OTotp {
|
||||
sealed trait ConfirmResult
|
||||
object ConfirmResult {
|
||||
case object Success extends ConfirmResult
|
||||
case object Failed extends ConfirmResult
|
||||
case object Failed extends ConfirmResult
|
||||
}
|
||||
|
||||
def apply[F[_]: Async](store: Store[F], totp: Totp): Resource[F, OTotp[F]] =
|
||||
@ -80,13 +80,13 @@ object OTotp {
|
||||
|
||||
def initialize(accountId: AccountId): F[InitResult] =
|
||||
for {
|
||||
_ <- log.info(s"Initializing TOTP for account ${accountId.asString}")
|
||||
_ <- log.info(s"Initializing TOTP for account ${accountId.asString}")
|
||||
userId <- store.transact(RUser.findIdByAccount(accountId))
|
||||
result <- userId match {
|
||||
case Some(uid) =>
|
||||
for {
|
||||
record <- RTotp.generate[F](uid, totp.settings.mac)
|
||||
un <- store.transact(RTotp.updateDisabled(record))
|
||||
un <- store.transact(RTotp.updateDisabled(record))
|
||||
an <-
|
||||
if (un != 0)
|
||||
AddResult.entityExists("Entity exists, but update was ok").pure[F]
|
||||
@ -117,7 +117,7 @@ object OTotp {
|
||||
|
||||
def confirmInit(accountId: AccountId, otp: OnetimePassword): F[ConfirmResult] =
|
||||
for {
|
||||
_ <- log.info(s"Confirm TOTP setup for account ${accountId.asString}")
|
||||
_ <- log.info(s"Confirm TOTP setup for account ${accountId.asString}")
|
||||
key <- store.transact(RTotp.findEnabledByLogin(accountId, false))
|
||||
now <- Timestamp.current[F]
|
||||
res <- key match {
|
||||
|
@ -102,8 +102,7 @@ object OUpload {
|
||||
|
||||
def noSource: UploadResult = NoSource
|
||||
|
||||
/** When adding files to an item, no item was found using the given item-id.
|
||||
*/
|
||||
/** When adding files to an item, no item was found using the given item-id. */
|
||||
case object NoItem extends UploadResult
|
||||
|
||||
def noItem: UploadResult = NoItem
|
||||
@ -126,9 +125,9 @@ object OUpload {
|
||||
itemId: Option[Ident]
|
||||
): F[OUpload.UploadResult] =
|
||||
(for {
|
||||
_ <- checkExistingItem(itemId, account.collective)
|
||||
_ <- checkExistingItem(itemId, account.collective)
|
||||
files <- right(data.files.traverse(saveFile).map(_.flatten))
|
||||
_ <- checkFileList(files)
|
||||
_ <- checkFileList(files)
|
||||
lang <- data.meta.language match {
|
||||
case Some(lang) => right(lang.pure[F])
|
||||
case None =>
|
||||
@ -156,8 +155,8 @@ object OUpload {
|
||||
if (data.multiple) files.map(f => ProcessItemArgs(meta, List(f)))
|
||||
else Vector(ProcessItemArgs(meta, files.toList))
|
||||
jobs <- right(makeJobs(args, account, data.priority, data.tracker))
|
||||
_ <- right(logger.fdebug(s"Storing jobs: $jobs"))
|
||||
res <- right(submitJobs(notifyJoex)(jobs))
|
||||
_ <- right(logger.fdebug(s"Storing jobs: $jobs"))
|
||||
res <- right(submitJobs(notifyJoex)(jobs))
|
||||
_ <- right(
|
||||
store.transact(
|
||||
RSource.incrementCounter(data.meta.sourceAbbrev, account.collective)
|
||||
|
@ -19,8 +19,7 @@ import io.circe.Encoder
|
||||
|
||||
trait OUserTask[F[_]] {
|
||||
|
||||
/** Return the settings for all scan-mailbox tasks of the current user.
|
||||
*/
|
||||
/** Return the settings for all scan-mailbox tasks of the current user. */
|
||||
def getScanMailbox(scope: UserTaskScope): Stream[F, UserTask[ScanMailboxArgs]]
|
||||
|
||||
/** Find a scan-mailbox task by the given id. */
|
||||
@ -29,16 +28,14 @@ trait OUserTask[F[_]] {
|
||||
scope: UserTaskScope
|
||||
): OptionT[F, UserTask[ScanMailboxArgs]]
|
||||
|
||||
/** Updates the scan-mailbox tasks and notifies the joex nodes.
|
||||
*/
|
||||
/** Updates the scan-mailbox tasks and notifies the joex nodes. */
|
||||
def submitScanMailbox(
|
||||
scope: UserTaskScope,
|
||||
subject: Option[String],
|
||||
task: UserTask[ScanMailboxArgs]
|
||||
): F[Unit]
|
||||
|
||||
/** Return the settings for all the notify-due-items task of the current user.
|
||||
*/
|
||||
/** Return the settings for all the notify-due-items task of the current user. */
|
||||
def getNotifyDueItems(scope: UserTaskScope): Stream[F, UserTask[NotifyDueItemsArgs]]
|
||||
|
||||
/** Find a notify-due-items task by the given id. */
|
||||
@ -47,8 +44,7 @@ trait OUserTask[F[_]] {
|
||||
scope: UserTaskScope
|
||||
): OptionT[F, UserTask[NotifyDueItemsArgs]]
|
||||
|
||||
/** Updates the notify-due-items tasks and notifies the joex nodes.
|
||||
*/
|
||||
/** Updates the notify-due-items tasks and notifies the joex nodes. */
|
||||
def submitNotifyDueItems(
|
||||
scope: UserTaskScope,
|
||||
subject: Option[String],
|
||||
@ -80,9 +76,9 @@ object OUserTask {
|
||||
): F[Unit] =
|
||||
for {
|
||||
ptask <- task.encode.toPeriodicTask(scope, subject)
|
||||
job <- ptask.toJob
|
||||
_ <- queue.insert(job)
|
||||
_ <- joex.notifyAllNodes
|
||||
job <- ptask.toJob
|
||||
_ <- queue.insert(job)
|
||||
_ <- joex.notifyAllNodes
|
||||
} yield ()
|
||||
|
||||
def getScanMailbox(scope: UserTaskScope): Stream[F, UserTask[ScanMailboxArgs]] =
|
||||
|
@ -12,19 +12,15 @@ sealed trait SendResult
|
||||
|
||||
object SendResult {
|
||||
|
||||
/** Mail was successfully sent and stored to db.
|
||||
*/
|
||||
/** Mail was successfully sent and stored to db. */
|
||||
case class Success(id: Ident) extends SendResult
|
||||
|
||||
/** There was a failure sending the mail. The mail is then not saved to db.
|
||||
*/
|
||||
/** There was a failure sending the mail. The mail is then not saved to db. */
|
||||
case class SendFailure(ex: Throwable) extends SendResult
|
||||
|
||||
/** The mail was successfully sent, but storing to db failed.
|
||||
*/
|
||||
/** The mail was successfully sent, but storing to db failed. */
|
||||
case class StoreFailure(ex: Throwable) extends SendResult
|
||||
|
||||
/** Something could not be found required for sending (mail configs, items etc).
|
||||
*/
|
||||
/** Something could not be found required for sending (mail configs, items etc). */
|
||||
case object NotFound extends SendResult
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ object Config {
|
||||
Decoder.decodeString.emap(fromString)
|
||||
}
|
||||
|
||||
def open: Mode = Mode.Open
|
||||
def open: Mode = Mode.Open
|
||||
def invite: Mode = Mode.Invite
|
||||
def closed: Mode = Mode.Closed
|
||||
|
||||
|
@ -15,11 +15,11 @@ sealed trait NewInviteResult { self: Product =>
|
||||
}
|
||||
|
||||
object NewInviteResult {
|
||||
case class Success(id: Ident) extends NewInviteResult
|
||||
case class Success(id: Ident) extends NewInviteResult
|
||||
case object InvitationDisabled extends NewInviteResult
|
||||
case object PasswordMismatch extends NewInviteResult
|
||||
case object PasswordMismatch extends NewInviteResult
|
||||
|
||||
def passwordMismatch: NewInviteResult = PasswordMismatch
|
||||
def invitationClosed: NewInviteResult = InvitationDisabled
|
||||
def passwordMismatch: NewInviteResult = PasswordMismatch
|
||||
def invitationClosed: NewInviteResult = InvitationDisabled
|
||||
def success(id: Ident): NewInviteResult = Success(id)
|
||||
}
|
||||
|
@ -12,17 +12,17 @@ sealed trait SignupResult {}
|
||||
|
||||
object SignupResult {
|
||||
|
||||
case object CollectiveExists extends SignupResult
|
||||
case object InvalidInvitationKey extends SignupResult
|
||||
case object SignupClosed extends SignupResult
|
||||
case object CollectiveExists extends SignupResult
|
||||
case object InvalidInvitationKey extends SignupResult
|
||||
case object SignupClosed extends SignupResult
|
||||
case class Failure(ex: Throwable) extends SignupResult
|
||||
case object Success extends SignupResult
|
||||
case object Success extends SignupResult
|
||||
|
||||
def collectiveExists: SignupResult = CollectiveExists
|
||||
def invalidInvitationKey: SignupResult = InvalidInvitationKey
|
||||
def signupClosed: SignupResult = SignupClosed
|
||||
def collectiveExists: SignupResult = CollectiveExists
|
||||
def invalidInvitationKey: SignupResult = InvalidInvitationKey
|
||||
def signupClosed: SignupResult = SignupClosed
|
||||
def failure(ex: Throwable): SignupResult = Failure(ex)
|
||||
def success: SignupResult = Success
|
||||
def success: SignupResult = Success
|
||||
|
||||
def fromAddResult(ar: AddResult): SignupResult =
|
||||
ar match {
|
||||
|
Reference in New Issue
Block a user