diff --git a/modules/joex/src/main/scala/docspell/joex/pagecount/PageCountTask.scala b/modules/joex/src/main/scala/docspell/joex/pagecount/PageCountTask.scala index 7e97186c..d69d4fe3 100644 --- a/modules/joex/src/main/scala/docspell/joex/pagecount/PageCountTask.scala +++ b/modules/joex/src/main/scala/docspell/joex/pagecount/PageCountTask.scala @@ -48,8 +48,8 @@ object MakePageCountTask { private def pageCountExists[F[_]: Sync](ctx: Context[F, Args]): F[Boolean] = ctx.store.transact( RAttachmentMeta - .findById(ctx.args.attachment) - .map(_.flatMap(_.pages).exists(_ > 0)) + .findPageCountById(ctx.args.attachment) + .map(_.exists(_ > 0)) ) } diff --git a/modules/joex/src/main/scala/docspell/joex/preview/AllPreviewsTask.scala b/modules/joex/src/main/scala/docspell/joex/preview/AllPreviewsTask.scala index 70d87fdb..9efed3a1 100644 --- a/modules/joex/src/main/scala/docspell/joex/preview/AllPreviewsTask.scala +++ b/modules/joex/src/main/scala/docspell/joex/preview/AllPreviewsTask.scala @@ -56,22 +56,15 @@ object AllPreviewsTask { private def createJobs[F[_]: Sync]( ctx: Context[F, Args] )(ras: Chunk[RAttachment]): Stream[F, RJob] = { - val collectiveOrSystem = ctx.args.collective.getOrElse(DocspellSystem.taskGroup) + val collectiveOrSystem = { + val cid = ctx.args.collective.getOrElse(DocspellSystem.taskGroup) + AccountId(cid, DocspellSystem.user) + } def mkJob(ra: RAttachment): F[RJob] = - for { - id <- Ident.randomId[F] - now <- Timestamp.current[F] - } yield RJob.newJob( - id, - MakePreviewArgs.taskName, - collectiveOrSystem, + JobFactory.makePreview( MakePreviewArgs(ra.id, ctx.args.storeMode), - s"Create preview ${ra.id.id}/${ra.name.getOrElse("-")}", - now, - collectiveOrSystem, - Priority.Low, - Some(MakePreviewArgs.taskName / ra.id) + collectiveOrSystem.some ) val jobs = ras.traverse(mkJob) diff --git a/modules/store/src/main/scala/docspell/store/records/RAttachment.scala b/modules/store/src/main/scala/docspell/store/records/RAttachment.scala index b23c4146..e9d5d935 100644 --- a/modules/store/src/main/scala/docspell/store/records/RAttachment.scala +++ b/modules/store/src/main/scala/docspell/store/records/RAttachment.scala @@ -256,16 +256,17 @@ object RAttachment { } def findAllWithoutPageCount(chunkSize: Int): Stream[ConnectionIO, RAttachment] = { - val aId = Columns.id.prefix("a") - val mId = RAttachmentMeta.Columns.id.prefix("m") - val mPages = RAttachmentMeta.Columns.pages.prefix("m") + val aId = Columns.id.prefix("a") + val aCreated = Columns.created.prefix("a") + val mId = RAttachmentMeta.Columns.id.prefix("m") + val mPages = RAttachmentMeta.Columns.pages.prefix("m") val cols = all.map(_.prefix("a")) val join = table ++ fr"a LEFT OUTER JOIN" ++ RAttachmentMeta.table ++ fr"m ON" ++ aId.is(mId) val cond = mPages.isNull - selectSimple(cols, join, cond) + (selectSimple(cols, join, cond) ++ orderBy(aCreated.desc)) .query[RAttachment] .streamWithChunkSize(chunkSize) } @@ -274,11 +275,12 @@ object RAttachment { coll: Option[Ident], chunkSize: Int ): Stream[ConnectionIO, RAttachment] = { - val aId = Columns.id.prefix("a") - val aItem = Columns.itemId.prefix("a") - val pId = RAttachmentPreview.Columns.id.prefix("p") - val iId = RItem.Columns.id.prefix("i") - val iColl = RItem.Columns.cid.prefix("i") + val aId = Columns.id.prefix("a") + val aItem = Columns.itemId.prefix("a") + val aCreated = Columns.created.prefix("a") + val pId = RAttachmentPreview.Columns.id.prefix("p") + val iId = RItem.Columns.id.prefix("i") + val iColl = RItem.Columns.cid.prefix("i") val cols = all.map(_.prefix("a")) val baseJoin = @@ -292,11 +294,11 @@ object RAttachment { case Some(cid) => val join = baseJoin ++ fr"INNER JOIN" ++ RItem.table ++ fr"i ON" ++ iId.is(aItem) val cond = and(baseCond ++ Seq(iColl.is(cid))) - selectSimple(cols, join, cond) + (selectSimple(cols, join, cond) ++ orderBy(aCreated.desc)) .query[RAttachment] .streamWithChunkSize(chunkSize) case None => - selectSimple(cols, baseJoin, and(baseCond)) + (selectSimple(cols, baseJoin, and(baseCond)) ++ orderBy(aCreated.desc)) .query[RAttachment] .streamWithChunkSize(chunkSize) } diff --git a/modules/store/src/main/scala/docspell/store/records/RAttachmentMeta.scala b/modules/store/src/main/scala/docspell/store/records/RAttachmentMeta.scala index 833bfeca..5fcd5b93 100644 --- a/modules/store/src/main/scala/docspell/store/records/RAttachmentMeta.scala +++ b/modules/store/src/main/scala/docspell/store/records/RAttachmentMeta.scala @@ -54,6 +54,12 @@ object RAttachmentMeta { def findById(attachId: Ident): ConnectionIO[Option[RAttachmentMeta]] = selectSimple(all, table, id.is(attachId)).query[RAttachmentMeta].option + def findPageCountById(attachId: Ident): ConnectionIO[Option[Int]] = + selectSimple(Seq(pages), table, id.is(attachId)) + .query[Option[Int]] + .option + .map(_.flatten) + def upsert(v: RAttachmentMeta): ConnectionIO[Int] = for { n0 <- update(v)