Fix deleting items that have sent mails

This commit is contained in:
Eike Kettner 2020-06-24 23:47:58 +02:00
parent 14213c4c27
commit 64c96942a9
3 changed files with 21 additions and 2 deletions

View File

@ -448,10 +448,11 @@ object QItem {
def delete[F[_]: Sync](store: Store[F])(itemId: Ident, collective: Ident): F[Int] =
for {
tn <- store.transact(RTagItem.deleteItemTags(itemId))
rn <- QAttachment.deleteItemAttachments(store)(itemId, collective)
tn <- store.transact(RTagItem.deleteItemTags(itemId))
mn <- store.transact(RSentMail.deleteByItem(itemId))
n <- store.transact(RItem.deleteByIdAndCollective(itemId, collective))
} yield tn + rn + n
} yield tn + rn + n + mn
def findByFileIds(fileMetaIds: Seq[Ident]): ConnectionIO[Vector[RItem]] = {
val IC = RItem.Columns

View File

@ -3,6 +3,7 @@ package docspell.store.records
import fs2.Stream
import cats.effect._
import cats.implicits._
import cats.data.NonEmptyList
import doobie._
import doobie.implicits._
import docspell.common._
@ -115,4 +116,15 @@ object RSentMail {
def delete(mailId: Ident): ConnectionIO[Int] =
deleteFrom(table, id.is(mailId)).update.run
def deleteByItem(item: Ident): ConnectionIO[Int] =
for {
list <- RSentMailItem.findSentMailIdsByItem(item)
n1 <- RSentMailItem.deleteAllByItem(item)
n0 <- NonEmptyList.fromList(list.toList) match {
case Some(nel) => deleteFrom(table, id.isIn(nel)).update.run
case None => 0.pure[ConnectionIO]
}
} yield n0 + n1
}

View File

@ -54,4 +54,10 @@ object RSentMailItem {
def deleteMail(mailId: Ident): ConnectionIO[Int] =
deleteFrom(table, sentMailId.is(mailId)).update.run
def findSentMailIdsByItem(item: Ident): ConnectionIO[Set[Ident]] =
selectSimple(Seq(sentMailId), table, itemId.is(item)).query[Ident].to[Set]
def deleteAllByItem(item: Ident): ConnectionIO[Int] =
deleteFrom(table, itemId.is(item)).update.run
}