Adopt restserver to new collective-id

This commit is contained in:
eikek
2022-08-04 12:44:09 +02:00
parent 53d92c4a26
commit eabcffe71a
48 changed files with 539 additions and 293 deletions

View File

@ -28,7 +28,6 @@ trait OCollective[F[_]] {
def updateSettings(
collective: CollectiveId,
collectiveName: Ident,
settings: OCollective.Settings
): F[AddResult]
@ -147,7 +146,6 @@ object OCollective {
def updateSettings(
collectiveId: CollectiveId,
collectiveName: Ident,
sett: Settings
): F[AddResult] =
store

View File

@ -40,10 +40,10 @@ trait ODownloadAll[F[_]] {
def submit(accountId: AccountInfo, req: DownloadRequest): F[DownloadSummary]
/** Given the id from the summary, cancels a running job. */
def cancelDownload(accountId: AccountId, id: Ident): F[OJob.JobCancelResult]
def cancelDownload(cid: CollectiveId, id: Ident): F[OJob.JobCancelResult]
/** Returns the file if it is present, given a summary id. */
def getFile(collective: Ident, id: Ident): F[Option[DownloadAllFile[F]]]
def getFile(collective: CollectiveId, id: Ident): F[Option[DownloadAllFile[F]]]
/** Deletes a download archive given it's id. */
def deleteFile(id: Ident): F[Unit]
@ -122,7 +122,7 @@ object ODownloadAll {
else DownloadState.NotPresent
} yield state
def getFile(collective: Ident, id: Ident) =
def getFile(collective: CollectiveId, id: Ident) =
OptionT(store.transact(RDownloadQuery.findById(id)))
.map(_._2)
.map(md =>
@ -156,10 +156,10 @@ object ODownloadAll {
_ <- store.fileRepo.delete(fkey)
} yield ()
def cancelDownload(accountId: AccountId, id: Ident) =
def cancelDownload(cid: CollectiveId, id: Ident) =
OptionT(store.transact(RDownloadQuery.findById(id)))
.flatMap(t => OptionT(store.transact(RJob.findNonFinalByTracker(t._1.id))))
.semiflatMap(job => jobs.cancelJob(job.id, accountId.collective))
.semiflatMap(job => jobs.cancelJob(job.id, UserTaskScope.collective(cid)))
.getOrElse(JobCancelResult.jobNotFound)
}

View File

@ -30,10 +30,10 @@ trait OFolder[F[_]] {
userId: Ident
): F[Option[OFolder.FolderDetail]]
/** Adds a new folder. If `login` is non-empty, the `folder.user` property is ignored
* and the user-id is determined by the given login name.
/** Adds a new folder. If `login` is non-empty, the `folder.owner` property is ignored
* and its value is determined by the given login name.
*/
def add(folder: RFolder, userId: Option[Ident]): F[AddResult]
def add(folder: RFolder, login: Option[Ident]): F[AddResult]
def changeName(
folder: Ident,
@ -123,11 +123,11 @@ object OFolder {
): F[Option[FolderDetail]] =
store.transact(QFolder.findById(id, collectiveId, userId))
def add(folder: RFolder, userId: Option[Ident]): F[AddResult] = {
val insert = userId match {
case Some(uid) =>
def add(folder: RFolder, login: Option[Ident]): F[AddResult] = {
val insert = login match {
case Some(userLogin) =>
for {
user <- RUser.findById(uid, folder.collectiveId.some)
user <- RUser.findByLogin(userLogin, folder.collectiveId.some)
s = user.map(u => folder.copy(owner = u.uid)).getOrElse(folder)
n <- RFolder.insert(s)
} yield n

View File

@ -9,11 +9,11 @@ package docspell.backend.ops
import cats.data.OptionT
import cats.effect._
import cats.implicits._
import docspell.backend.ops.OJob.{CollectiveQueueState, JobCancelResult}
import docspell.common._
import docspell.pubsub.api.PubSubT
import docspell.scheduler.msg.JobDone
import docspell.scheduler.usertask.UserTaskScope
import docspell.store.Store
import docspell.store.UpdateResult
import docspell.store.queries.QJobQueue
@ -21,13 +21,13 @@ import docspell.store.records.{RJob, RJobLog}
trait OJob[F[_]] {
def queueState(collective: Ident, maxResults: Int): F[CollectiveQueueState]
def queueState(collective: UserTaskScope, maxResults: Int): F[CollectiveQueueState]
def cancelJob(id: Ident, collective: Ident): F[JobCancelResult]
def cancelJob(id: Ident, collective: UserTaskScope): F[JobCancelResult]
def setPriority(id: Ident, collective: Ident, prio: Priority): F[UpdateResult]
def setPriority(id: Ident, collective: UserTaskScope, prio: Priority): F[UpdateResult]
def getUnfinishedJobCount(collective: Ident): F[Int]
def getUnfinishedJobCount(collective: UserTaskScope): F[Int]
}
object OJob {
@ -61,20 +61,34 @@ object OJob {
Resource.pure[F, OJob[F]](new OJob[F] {
private[this] val logger = docspell.logging.getLogger[F]
def queueState(collective: Ident, maxResults: Int): F[CollectiveQueueState] =
private def scopeToGroup(s: UserTaskScope) =
s.collectiveId
.map(_.valueAsIdent)
.getOrElse(DocspellSystem.taskGroup)
def queueState(
collective: UserTaskScope,
maxResults: Int
): F[CollectiveQueueState] =
store
.transact(
QJobQueue.queueStateSnapshot(collective, maxResults.toLong)
QJobQueue.queueStateSnapshot(scopeToGroup(collective), maxResults.toLong)
)
.map(t => JobDetail(t._1, t._2))
.compile
.toVector
.map(CollectiveQueueState)
def setPriority(id: Ident, collective: Ident, prio: Priority): F[UpdateResult] =
UpdateResult.fromUpdate(store.transact(RJob.setPriority(id, collective, prio)))
def setPriority(
id: Ident,
collective: UserTaskScope,
prio: Priority
): F[UpdateResult] =
UpdateResult.fromUpdate(
store.transact(RJob.setPriority(id, scopeToGroup(collective), prio))
)
def cancelJob(id: Ident, collective: Ident): F[JobCancelResult] = {
def cancelJob(id: Ident, collective: UserTaskScope): F[JobCancelResult] = {
def remove(job: RJob): F[JobCancelResult] =
for {
n <- store.transact(RJob.delete(job.id))
@ -99,7 +113,9 @@ object OJob {
}
(for {
job <- OptionT(store.transact(RJob.findByIdAndGroup(id, collective)))
job <- OptionT(
store.transact(RJob.findByIdAndGroup(id, scopeToGroup(collective)))
)
result <- OptionT.liftF(
if (job.isInProgress) tryCancel(job)
else remove(job)
@ -108,7 +124,7 @@ object OJob {
.getOrElse(JobCancelResult.jobNotFound)
}
def getUnfinishedJobCount(collective: Ident): F[Int] =
store.transact(RJob.getUnfinishedCount(collective))
def getUnfinishedJobCount(collective: UserTaskScope): F[Int] =
store.transact(RJob.getUnfinishedCount(scopeToGroup(collective)))
})
}